全棧 - 8 爬蟲 使用urllib2獲取數據

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

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

Urllib2

我們主要使用的是Python2.7中的urllib2,官方文檔在這裡:20.6. urllib2 - extensible library for opening URLs - Python 2.7.13 documentation。如果閑官方文檔太長太啰嗦,就跟著我一起操作吧~

GET請求

以 高考分數線查詢_全國各地各批次高考分數線查詢_新浪教育 為例,我們來實踐下,如何發起GET請求,主要代碼如下,所返回的 result 中即包含了網頁的內容。

# 導入需要的庫nimport urllib2nimport urllibnn# 定義一個字元串變數,保存要訪問的鏈接nurl = http://kaoshi.edu.sina.com.cn/college/scorelist?tab=batch&wl=1&local=2&batch=&syear=2013n# 發起請求nrequest = urllib2.Request(url=url)n# 打開連接nresponse = urllib2.urlopen(request, timeout=20)n# 讀取返回內容nresult = response.read()n

POST請求

shuju.wdzj.com/plat-inf 為例,我們來實踐下,如何發起POST請求,主要代碼如下,所返回的 result 中即包含了請求的數據。

# 導入需要的庫nimport urllib2nimport urllibnn# 定義一個字元串變數,保存要訪問的鏈接nurl = http://shuju.wdzj.com/plat-info-target.htmlnn# 將參數進行編碼,以字典形式組織參數ndata = urllib.urlencode({n target1: 19, n target2: 20, n type: 1, n wdzjPlatId: 59n })n# 發起請求nrequest = urllib2.Request(url)n# 建立一個openernopener = urllib2.build_opener(urllib2.HTTPCookieProcessor())n# 打開連接nresponse = opener.open(request, data)n# 讀取返回內容nresult = response.read()n

處理返回結果

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

Html

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

API

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

import jsonn# result是剛才讀取的返回結果,是一個json格式的字元串nresult = json.loads(result)n# result現在是一個字典了nprint type(result)n

視頻鏈接:使用urllib2獲取數據


推薦閱讀:

tornado為什麼使用epoll的水平觸發模式,而不是邊緣觸發模式?
(Python進階必看)賴明星的Python精品圖書重磅發布!!
Python優雅地可視化數據
Python黑帽編程1.1虛擬機安裝和配置 Kali Linux 2016

TAG:全栈工程师 | 爬虫 | Python |