這是全棧數據工程師養成攻略系列教程的第八期:8 爬蟲 使用urllib2獲取數據。javascript
咱們知道,Http請求主要有GET和POST兩種。對於一個url,既可使用瀏覽器去訪問,也可使用代碼去請求。css
咱們主要使用的是Python2.7中的urllib2,官方文檔在這裏:docs.python.org/2/library/u…。若是閒官方文檔太長太囉嗦,就跟着我一塊兒操做吧~html
以 kaoshi.edu.sina.com.cn/college/sco… 爲例,咱們來實踐下,如何發起GET請求,主要代碼以下,所返回的 result
中即包含了網頁的內容。java
# 導入須要的庫
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()複製代碼
以 shuju.wdzj.com/plat-info-t… 爲例,咱們來實踐下,如何發起POST請求,主要代碼以下,所返回的 result
中即包含了請求的數據。python
# 導入須要的庫
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
採起不一樣的處理方法。json
當返回結果是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獲取數據less