web-dev-qa-db-ja.com

画面のスクレイピング:「HTTPエラー403:robots.txtでリクエストが許可されていません」を回避する

以下を回避する方法はありますか?

httperror_seek_wrapper: HTTP Error 403: request disallowed by robots.txt

これはサイト所有者(barnesandnoble.com)に連絡する唯一の方法です。特定の深さでアクセスを拒否する理由がわかりません。

Python2.6でmechanizeとBeautifulSoupを使用しています。

回避策を期待

43
Diego

Barnes&Nobleで法的な問題が発生する可能性がある場合は、ユーザーエージェントについてうそをつくことができます(たとえば、ロボットではなく人間であることを信じさせる)。代わりに彼らのビジネス開発部門と連絡を取って、彼らにあなたを明確に認可するよう説得してみませんか?彼らは、価格比較エンジンなどのいくつかのクラスのロボットによってサイトがスクレイプされるのを避けようとしていることは間違いありません。あなたのための例外。

Robots.txtにエンコードされているポリシーを単に破る「技術的な」回避策は、私が決して推奨しない高法的なリスクのアプローチです。ところで、どのようにdoes彼らのrobots.txtを読むのですか?

14
Alex Martelli

ああ、robots.txtを無視する必要があります

br = mechanize.Browser()
br.set_handle_robots(False)
198
Yuda Prawira

Mechanizeはrobots.txtに自動的に追随しますが、許可がある場合は無効にできます。または、..

ブラウザでフラグを設定します。

browser.set_handle_equiv(False) 

これはrobots.txtを無視します。

また、リクエストを抑制して、サイトに過度の負荷をかけないようにしてください。 (これにより、彼らがあなたを検出して禁止する可能性が低くなります)。

5
wisty

正しいリクエストを行うためのコード:

br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
resp = br.open(url)
print resp.info()  # headers
print resp.read()  # content
4
Vladislav

受け取ったエラーは、ユーザーエージェントとは関係ありません。デフォルトでは、mechanizeを使用してrobots.txtディレクティブを使用してサイトに移動すると、自動的にチェックされます。この動作を無効にするには、mechanize.browserの.set_handle_robots(false)メソッドを使用します。

3
Tom

User-Agentヘッダーは、実際のIE/FF User-Agentと一致します。

IE8ユーザーエージェント文字列は次のとおりです。

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; AskTB5.6)
1
Stefan Kendall

この倫理を議論することなく、たとえばgooglebotのようにヘッダーを変更できますか、またはgooglebotもブロックされますか?

0
Steve Robillard

どうやら、robots.txt少なくともこの記事は言う 。そのため、フィルターを無視するためにいくつかのコードを削除する必要があります。

0
BrunoLM