2011-08-06 11 views
2

urllib2とBeautifulSoupを使用して、http://www.nseindia.comというWebサイトをスクラップしようとしています。残念ながら、私はPythonを通してページにアクセスしようとすると403 Forbiddenを取得し続けます。私はそれがユーザーエージェントの問題だと思っていましたが、それを変更することは助けになりませんでした。それから私はそれがクッキーと関係があるかもしれないと思ったが、明らかにクッキーとのリンクを通ってページをロードすることはうまく動作する。 urllibを介して要求をブロックしている可能性がありますか?Pythonを使用したWebスクラブ

答えて

9

http://www.nseindia.com/は何らかの理由でAcceptヘッダーを必要とするようです。これは動作するはずです:Acceptヘッダーなしの要求を拒否

import urllib2 
r = urllib2.Request('http://www.nseindia.com/') 
r.add_header('Accept', '*/*') 
r.add_header('User-Agent', 'My scraping program <[email protected]>') 
opener = urllib2.build_opener() 
content = opener.open(r).read() 

が正しくありません。 RFC 2616は明らかに何のAcceptヘッダーフィールドが存在しない場合、 クライアントは、すべてのメディアタイプを受け入れることが想定される

を述べています。

+0

nice answer。好奇心のために、どうやってこれを発見しましたか? – RoundTower

+5

@RoundTower私は(Chromiumによる)作業要求を取得し、全く同じヘッダをPythonで追加しました。それがうまくいけば、私はHTTPヘッダーをすべて削除するようになりました。 – phihag

+0

@phihag - Chromiumで働くリクエストをどうやって捉えましたか? Chromeでこれを行うことはできますか? – avi

関連する問題