クローラーやボットがウェブサイトの特定ページをクロールしないように指示する規約があってRobots Exclusion Protocolと呼ばれている。ウェブサイトのルートディレクトリにrobots.txtというファイルを配置して、指示内容をそのファイルに記述する。ウェブサイトではこのrobots.txtを配置することは必須ではないし、クローラー側からしたら拘束力があるわけではないが、スクレイピングするときにはrobots.txtに従っておいた方が無難だと思うので、Pythonでrobots.txtを確認してみる。さらに、robots.txtと同様の目的で使われるrobotsメタタグを確認する方法もまとめておく。
Windows10のWSL(Ubuntu 18.04)。
ウェブサイトのルートディレクトリ置かれるrobots.txtはテキストファイルで、クローラーのアクセスを禁止するディレクトリなどを指定する。記述方法などの仕様については以下のサイトを参照。
Pythonでは標準モジュールにrobots.txtをパースするためのパーサーurllib.robotparserが用意されている。これを使って本ブログサイトのrobots.txtの内容を取得して、Crawl-delay(サイトが指定したクロール間隔)の取得と、本ブログのトップページとPythonでWikipediaの記念日一覧をGoogleカレンダーに登録するのクローリングが許可されているか確認してみる。
結果は以下の通り。Crawl-delayは指定されておらず、クローリングは許可されている。
robots.txtと似た目的で使われるものにrobotsメタタグがあって、ウェブサイトページのheadセクションに記述される。仕様は以下のサイトを参照。
robotメタタグを確認するにはHTMLを解析する。ここではBeautifulSoup4を使う。BeautifulSoup4がインストールされていなければ以下のようにpipでインストールできる。
このブログサイトとYahoo! Japanのrobotsメタタグを確認してみる。
結果は以下の通り。
本ブログサイトにはrobotsメタタグは設定されていないし、Yahoo Japan!にはnoodpというメタタグが設定されている。noodpについてはMETAタグ活用完全ガイド noindex nofollow noarchive unavailable_after など使い方まとめに以下のような説明がある。Yahooなどの検索結果のリンク下に表示される説明文があるが、その説明文にDMOZが使用されることを拒否する指示をするために使われるらしい。
環境
Windows10のWSL(Ubuntu 18.04)。
robots.txtの仕様
ウェブサイトのルートディレクトリ置かれるrobots.txtはテキストファイルで、クローラーのアクセスを禁止するディレクトリなどを指定する。記述方法などの仕様については以下のサイトを参照。
Pythonによるrobots.txtの確認
Pythonでは標準モジュールにrobots.txtをパースするためのパーサーurllib.robotparserが用意されている。これを使って本ブログサイトのrobots.txtの内容を取得して、Crawl-delay(サイトが指定したクロール間隔)の取得と、本ブログのトップページとPythonでWikipediaの記念日一覧をGoogleカレンダーに登録するのクローリングが許可されているか確認してみる。
from urllib.robotparser import RobotFileParser
def main():
root_url = 'https://irukanobox.blogspot.com/'
rp = RobotFileParser()
# robots.txtのurlを設定
rp.set_url(root_url + 'robots.txt')
rp.read()
# Crawl-delayの取得
print('Crawl-delay: ', rp.crawl_delay('*'))
# クローリング許可があるか確認
urls = [root_url, root_url + '2019/02/pythonwikipediagoogle.html']
for url in urls:
if rp.can_fetch('*', url):
print('Crawling {} is allowed.'.format(url))
if __name__ == '__main__':
main()
結果は以下の通り。Crawl-delayは指定されておらず、クローリングは許可されている。
robotメタタグの仕様
robots.txtと似た目的で使われるものにrobotsメタタグがあって、ウェブサイトページのheadセクションに記述される。仕様は以下のサイトを参照。
Pythonによるrobotメタタグの確認
robotメタタグを確認するにはHTMLを解析する。ここではBeautifulSoup4を使う。BeautifulSoup4がインストールされていなければ以下のようにpipでインストールできる。
このブログサイトとYahoo! Japanのrobotsメタタグを確認してみる。
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
from bs4 import BeautifulSoup
def get_robots_meta():
request_urls = ['https://irukanobox.blogspot.com/', 'https://www.yahoo.co.jp/']
for url in request_urls:
req = Request(url)
try:
with urlopen(req) as res:
res_html = res.read().decode('utf8')
parsed = BeautifulSoup(res_html, 'html.parser')
robots = parsed.find('meta', attrs={'name': 'robots'})
print(url)
if robots:
print(' Robots meta tag: ', robots['content'])
else:
print(' No robots meta tag.')
except HTTPError as e:
print('HTTPError: {}'.format(e.reason))
except URLError as e:
print('URLError: {}'.format(e.reason))
if __name__ == '__main__':
get_robots_meta()
結果は以下の通り。
本ブログサイトにはrobotsメタタグは設定されていないし、Yahoo Japan!にはnoodpというメタタグが設定されている。noodpについてはMETAタグ活用完全ガイド noindex nofollow noarchive unavailable_after など使い方まとめに以下のような説明がある。Yahooなどの検索結果のリンク下に表示される説明文があるが、その説明文にDMOZが使用されることを拒否する指示をするために使われるらしい。
noodp は、生ける屍のような状態のディレクトリサイト・DMOZ (Open Directory Project)に掲載されている説明文をスニペットとしてウェブ検索結果に利用されるのを拒否するための指示です。Google と Bing 共にサポートしています。
0 件のコメント:
コメントを投稿