2017-03-02 42 views
1

我正在爬取一些網頁並解析其中的一些數據,但其中一個網站似乎阻止了我的請求。使用Python 3和urllib.requests的代碼版本工作正常。我的問題是我需要使用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.Request的urllib2.urlopen可以正常工作的方式。

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分:) –

相關問題