2017-03-02 3 views
1

私はいくつかのWebページをクロールしていて、それらのデータを解析していますが、サイトの1つが私の要求をブロックしているようです。 urllib.requestsでPython 3を使用しているコードのバージョンは正常に動作します。私の問題は、Python 2.7を使う必要があり、urllib2を使って応答を得ることができないということです。Python 2.7でurllib.requestsを再作成するにはどうすればよいですか?

これらの要求は同一ではないでしょうか?

のPython 3バージョン:

def fetch_title(url): 
    req = urllib.request.Request(
     url, 
     data=None, 
     headers={ 
      'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36' 
     } 
    ) 
    html = urllib.request.urlopen(req).read().encode('unicode-escape').decode('ascii') 

    return html 

のPython 2.7バージョン:

import urllib2 

opener = urllib2.build_opener() 
opener.addheaders = [(
      'User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36' 
     )] 
response = opener.open('http://website.com') 

print response.read() 
+0

一般的に最善の答えが*への洞察を提供し、私は両方のバージョンからの応答を得るかが、私はurllib.requestsとコンテンツの完全なページを取得し、私はurllib2のバージョン –

答えて

1

次のコードは動作するはずです、基本的にはPython 2.7で、あなたの希望のヘッダーで辞書を作成することができますし、中にあなたの要求をフォーマットurllib2.urlopenを使用してurllib2.Requestを使用して正しく動作する方法。

import urllib2 

def fetch_title(url): 
    my_headers = { 
     "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36" 
    } 
    return urllib2.urlopen(urllib2.Request(url, headers=my_headers)).read() 
+0

とサイトのブロックされたバージョンを取得なぜ*または*どのように*何かが動作します。答えはいいですが、あなたは少し説明をして教育するのに大いに役立つことができます。一種の「魚を釣る人を教える」こと。 –

+0

お返事ありがとう、ありがとうございます。 10ポイントあります:) –

関連する問題