爬蟲--urllib模組
阿新 • • 發佈:2018-12-03
一.urllib庫
概念:urllib是Python自帶的一個用於爬蟲的庫,其主要作用就是可以通過程式碼模擬瀏覽器傳送請求。其常被用到的子模組在Python3中的為urllib.request和urllib.parse,在Python2中是urllib和urllib2。
使用流程:
- 指定url
- 基於urllib的request子模組發起請求
- 獲取響應中的資料值
- 持久化儲存
爬取搜狗首頁的頁面資料
---
# 爬取搜狗首頁的頁面資料 import urllib.request # 1.指定url url = 'https://www.sogou.com/' #2.發起請求:urlopean可以根據指定的url發起請求,且返回一個響應物件 response = urllib.request.urlopen(url=url) #3.獲取頁面資料:read函式返回的就是響應物件中儲存的頁面資料(byte)-二進位制形式 page_text = response.read() #print(page_text) #4.持久化儲存 with open('./sogou.html','wb')as f: f.write(page_text) print('寫入資料成功')
補充說明:
urlopen函式原型: urllib.request.urlopen(url, data=None, timeout=<object object at 0x10af327d0>, *, cafile=None, capath=None, cadefault=False, context=None) 在上述案例中我們只使用了該函式中的第一個引數url。在日常開發中,我們能用的只有url和data這兩個引數。 url引數:指定向哪個url發起請求 data引數:可以將post請求中攜帶的引數封裝成字典的形式傳遞給該引數(暫時不需要理解,後期會講) urlopen函式返回的響應物件,相關函式呼叫介紹: response.headers():獲取響應頭資訊 response.getcode():獲取響應狀態碼 response.geturl():獲取請求的url response.read():獲取響應中的資料值(位元組型別)
爬取指定詞條所對應的頁面資料
# 需求:爬取指定詞條所對應的頁面資料 import urllib.request import urllib.parse #指定url url = 'https://www.sogou.com/web?query=' # url特性:url不可以存在非ASCII編碼的字元 word = urllib.parse.quote('人名幣') url += word # 發請求 response = urllib.request.urlopen(url=url) # 獲取頁面資料 page_text=response.read() # print(page_text) #4.持久化儲存 with open('rmb.html','wb')as f: f.write(page_text) print('寫入資料成功')
雙擊rmb.html出現頁面:
- 反爬機制:
網站檢查請求的UA,如果發現UA是爬蟲程式,則拒絕提供網站資料
- User-Agent(UA):請求載體的身份標識
- 反反爬機制:偽裝爬蟲程式請求的UA--如何通過程式碼實現
在百度瀏覽器下點選F12
然後輸入www.sogou.com
------------------------
import urllib.request #被訪問的搜狗網頁 url = 'https://www.sogou.com/' # UA偽裝 #1.自制定一個請求物件 #儲存任意的請求頭資訊 # 此處用的百度的UA headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'} #該請求物件的UA進行了成功的偽裝 request = urllib.request.Request(url=url,headers=headers) # 2.針對自定製的請求發起請求 response = urllib.request.urlopen(request) print(response.read())