版本號:Python2.7.5,Python3改動較大,各位另尋教學。
所謂網頁抓取,就是把URL位址中指定的網路資源從網路流讀取出來,儲存到本地。
類似使用程式模擬IE瀏覽器的功能,把URL當作HTTP請求的內容傳送到伺服器端, 然後讀取伺服器端的回應資源。
在Python中,我們使用urllib2這個元件來抓取網頁。
urllib2是Python的一個獲取URLs(Uniform Resource Locators)的元件。
它以urlopen函數的形式提供了一個非常簡單的介面。
最簡單的urllib2的應用程式碼只需要四行。
我們新建一個檔案urllib2_test01.py來感受urllib2的作用:
import urllib2 response = urllib2.urlopen('http://www.baidu.com/') html = response.read() print html
按F5可以看到運行的結果:
原始碼(火狐ORGoogle瀏覽器皆可),會發現也是完全一樣的內容。 除了"http:",URL同樣可以使用"ftp:","file:"等等來替代。 urllib2用一個Request物件來映射你提出的HTTP請求。 我們新建一個檔案urllib2_test02.py來感受一下: 可以看到輸出的內容和test01是一樣的。 import urllib2
req = urllib2.Request('http://www.baidu.com')
response = urllib2.urlopen(req)
the_page = response.read()
print the_page
req = urllib2.Request('ftp://example.com/')
1.發送data表單資料
這個內容相信做過Web端的都不會陌生,
有時候你希望發送一些資料到URL(通常URL與CGI[通用網關介面]腳本,或其他WEB應用程式掛接)。
在HTTP中,這個經常使用熟知的POST請求發送。
這個通常在你提交一個HTML表單時由你的瀏覽器來做。
編碼工作使用urllib的函數而非urllib2。
import urllib import urllib2 url = 'http://www.someserver.com/register.cgi' values = {'name' : 'WHY', 'location' : 'SDU', 'language' : 'Python' } data = urllib.urlencode(values) # 编码工作 req = urllib2.Request(url, data) # 发送请求同时传data表单 response = urllib2.urlopen(req) #接受反馈的信息 the_page = response.read() #读取反馈的内容
如果沒有傳送data參數,urllib2使用GET方式的請求。
GET和POST請求的不同之處是POST請求通常有"副作用",
它們會由於某種途徑改變系統狀態(例如提交成堆垃圾到你的門口)。
import urllib2 import urllib data = {} data['name'] = 'WHY' data['location'] = 'SDU' data['language'] = 'Python' url_values = urllib.urlencode(data) print url_values name=Somebody+Here&language=Python&location=Northampton url = 'http://www.example.com/example.cgi' full_url = url + '?' + url_values data = urllib2.open(full_url)
2.設定Headers到http請求
有一些網站不喜歡被程式(非人為訪問)訪問,或發送不同版本的內容到不同的瀏覽器。
預設的urllib2把自己當作「Python-urllib/x.y」(x和y是Python主版本和次版本號,例如Python-urllib/2.7),
這個身分可能會讓網站迷惑,或乾脆不工作。
瀏覽器確認自己身分是透過User-Agent頭,當你建立了一個請求對象,你可以給他一個包含頭資料的字典。
下面的範例發送跟上面一樣的內容,但把自身模擬成Internet Explorer。
import urllib import urllib2 url = 'http://www.someserver.com/cgi-bin/register.cgi' user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' values = {'name' : 'WHY', 'location' : 'SDU', 'language' : 'Python' } headers = { 'User-Agent' : user_agent } data = urllib.urlencode(values) req = urllib2.Request(url, data, headers) response = urllib2.urlopen(req) the_page = response.read()以上就是 [Python]網路爬蟲(二):利用urllib2透過指定的URL抓取網頁內容的內容,更多相關內容請關注PHP中文網(www.php.cn)! 🎜🎜🎜🎜🎜🎜