全棧 - 8 爬蟲 使用 urllib2 獲取資料

張巨集倫發表於2017-02-06

這是全棧資料工程師養成攻略系列教程的第八期:8 爬蟲 使用urllib2獲取資料。

我們知道,Http請求主要有GET和POST兩種。對於一個url,既可以使用瀏覽器去訪問,也可以使用程式碼去請求。

Urllib2

我們主要使用的是Python2.7中的urllib2,官方文件在這裡:docs.python.org/2/library/u…。如果閒官方文件太長太囉嗦,就跟著我一起操作吧~

GET請求

kaoshi.edu.sina.com.cn/college/sco… 為例,我們來實踐下,如何發起GET請求,主要程式碼如下,所返回的 result 中即包含了網頁的內容。

# 匯入需要的庫
import urllib2
import urllib

# 定義一個字串變數,儲存要訪問的連結
url = 'http://kaoshi.edu.sina.com.cn/college/scorelist?tab=batch&wl=1&local=2&batch=&syear=2013'
# 發起請求
request = urllib2.Request(url=url)
# 開啟連線
response = urllib2.urlopen(request, timeout=20)
# 讀取返回內容
result = response.read()複製程式碼

POST請求

shuju.wdzj.com/plat-info-t… 為例,我們來實踐下,如何發起POST請求,主要程式碼如下,所返回的 result 中即包含了請求的資料。

# 匯入需要的庫
import urllib2
import urllib

# 定義一個字串變數,儲存要訪問的連結
url = 'http://shuju.wdzj.com/plat-info-target.html'

# 將引數進行編碼,以字典形式組織引數
data = urllib.urlencode({
    'target1': 19, 
    'target2': 20, 
    'type': 1, 
    'wdzjPlatId': 59
    })
# 發起請求
request = urllib2.Request(url)
# 建立一個opener
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
# 開啟連線
response = opener.open(request, data)
# 讀取返回內容
result = response.read()複製程式碼

處理返回結果

url主要有Html和API兩類,前者以字串形式返回經渲染後的複雜頁面,後者同樣以字串形式返回json格式資料,因此我們需要對讀取的 result 採取不同的處理方法。

Html

當返回結果是Html頁面的文字內容時,需要藉助一些工具進行解析,將純文字轉為結構化的Html物件。最常用的工具是 BeautifulSoup,它也是一個Python中的一個包,提供瞭解析Html文字、查詢和選擇Html元素、提取元素內容和屬性等功能。考慮到BeautifulSoup的使用涉及到html和css等內容,我們先跳過這一塊,等後面介紹了相關基礎再回過頭來講解。

API

當返回結果是json格式的字串時,可以使用Python中的 json 模組,方便地將json字串載入為Python中的字典,再進行後續處理。

import json
# result是剛才讀取的返回結果,是一個json格式的字串
result = json.loads(result)
# result現在是一個字典了
print type(result)複製程式碼

視訊連結:使用urllib2獲取資料

如果覺得文章不錯,不妨點一下左下方的喜歡~

相關文章