私は非常に単純なWebクローラーを作成し、'robots.txt'
ファイルを解析しようとしています。私は標準ライブラリでモジュールを見つけましたrobotparser
。これはまさにこれを行うはずです。Python2.7.2を使用しています。残念ながら、私のコードは'robots.txt'
ファイルを正しくロードせず、その理由を理解できません。
これが私のコードの関連するスニペットです:
from urlparse import urlparse, urljoin
import robotparser
def get_all_links(page, url):
links = []
page_url = urlparse(url)
base = page_url[0] + '://' + page_url[1]
robots_url = urljoin(base, '/robots.txt')
rp = robotparser.RobotFileParser()
rp.set_url(robots_url)
rp.read()
for link in page.find_all('a'):
link_url = link.get('href')
print "Found a link: ", link_url
if not rp.can_fetch('*', link_url):
print "Page off limits!"
pass
これpage
は解析されたBeautifulSoupオブジェクトでありurl
、文字列として保存されたURLです。パーサー'robots.txt'
は、指定されたURLのファイルではなく、空のファイルを読み取り、True
すべてのcan_fetch()
クエリに戻ります。URLを開いていないか、テキストファイルの読み取りに失敗しているようです。
インタラクティブインタプリタでもやってみました。これは、ドキュメントページと同じ構文を使用して行われることです。
Python 2.7.2 (default, Aug 18 2011, 18:04:39)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import robotparser
>>> url = 'http://www.udacity-forums.com/robots.txt'
>>> rp = robotparser.RobotFileParser()
>>> rp.set_url(url)
>>> rp.read()
>>> print rp
>>>
この行はファイルprint rp
の内容を出力するはず'robots.txt'
ですが、空白が返されます。さらに苛立たしいことに、これらの 例はどちらも記述どおりに完全に機能しますが、自分のURLを試してみると失敗します。私はPythonにかなり慣れていないので、何が問題になっているのか理解できません。私の知る限り、私はドキュメントや例と同じようにモジュールを使用しています。助けてくれてありがとう!
更新1:が読み込まれたprint rp
かどうかを確認するための適切な方法ではなかった場合に備えて、インタプリタからさらに数行があります。 、、、および属性は正しいですが、からのエントリはまだ読み込まれていません。'robots.txt'
path
host
url
'robots.txt'
>>> rp
<robotparser.RobotFileParser instance at 0x1004debd8>
>>> dir(rp)
['__doc__', '__init__', '__module__', '__str__', '_add_entry', 'allow_all', 'can_fetch', 'default_entry', 'disallow_all', 'entries', 'errcode', 'host', 'last_checked', 'modified', 'mtime', 'parse', 'path', 'read', 'set_url', 'url']
>>> rp.path
'/robots.txt'
>>> rp.host
'www.udacity-forums.com'
>>> rp.entries
[]
>>> rp.url
'http://www.udacity-forums.com/robots.txt'
>>>
更新2:この外部ライブラリを使用してファイルを解析することにより、この問題を解決しまし'robots.txt'
た。(しかし、元の質問には答えていません!)ターミナルでもう少し時間を過ごした後、私の推測では、のような仕様robotparser
への特定の追加を処理できず、空白行に問題があります。たとえば、Stack OverflowやPython.orgからファイルを読み込みますが、Google、YouTube、またはステートメントや空白行を含む元のUdacityファイルは読み込みません。私より賢い人がこれを確認したり説明したりできれば、それでもありがたいです!'robots.txt'
Sitemap
Sitemap