urllib urllib 是一個用來處理網路請求的python標準庫,它包含4個模塊 urllib.request 請求模塊,用於發起網路請求 request模塊主要負責構造和發起網路請求,併在其中添加Headers,Proxy等,利用它可以模擬瀏覽器的請求發起過程 發起網路請求 、添加Heade ...
- urllib庫
- urllib3庫
- 爬蟲一般流程
urllib
urllib 是一個用來處理網路請求的python標準庫,它包含4個模塊
urllib.request 請求模塊,用於發起網路請求
request模塊主要負責構造和發起網路請求,併在其中添加Headers,Proxy等,利用它可以模擬瀏覽器的請求發起過程
發起網路請求 、添加Headers 、操作cookie 、使用代理
1、urlopen方法 一個簡單發送網路請求的方法
url:字元串格式的url
data:預設會發送GET請求,當傳入data參數時,則會發起POST請求,data參數是位元組類型、者類文件對象或可迭代對象
timeout:設置超時(以秒為單位),如果請求超過設置時間,則拋出異常。timeout沒有指定則用系統預設設置,timeout只對,http,https以及ftp連接起作用
2、Request對象
利用urlopen可以發起最基本的請求,但這幾個簡單的參數不足以構建一個完整的請求,可以利用更強大的Request對象來構建更加完整的請求
2.1、請求頭添加 兩種方式,一種可以添加多個,為字典類型,一種可以添加一個,為元組類型
通過urllib發送的請求會有一個預設的Headers:“User-Agent”:“Python-urllib/3.*”,指明請求是由urllib發送的
所以遇到一些驗證User-Agent的網站時,需要我們自定義Headers把自己偽裝起來
2.2操作cookie 在爬蟲中,對cookie的處理非常重要
cookiejar 查看cookie信息
2.3設置代理
3、Response對象
read() 獲取響應返回的數據,只能用一次 readline() 讀取一行
info() 獲取響應頭信息
geturl() 獲取訪問的url
getcode() 返回狀態碼
urllib.parse 解析模塊,用於解析URL
url中只能包含ascii字元,在實際操作過程中,get請求通過url傳遞的參數中會有大量的特殊字元,例如漢字,那麼就需要進行url編碼
字元串參數:parse.quote() 編碼 parse.unquote() 解碼
在發送請求的時候,往往會需要傳遞很多的參數,如果用字元串方法去拼接會比較麻煩,parse.urlencode()方法用來拼接字典類型的url參數
字典參數:parse.urlencode() 編碼 parse.parse_qs() 解碼
urllib.error 異常處理模塊,用於處理request引起的異常
主要包含URLError和HTTPError
URLError:是error異常模塊的基類,由request模塊產生的異常都可以用這個類來處理
HTTPError:是URLError的子類,主要包含三個屬性: Code:請求的狀態碼 reason:錯誤的原因 headers:響應的報頭
urllib.robotparse 用於解析robots.txt文件
主要負責處理爬蟲協議文件,robots.txt.的解析
robots.txt是一個協議,而不是一個命令
robots.txt是搜索引擎中訪問網站的時候要查看的第一個文件
robots.txt文件告訴蜘蛛程式在伺服器上什麼文件是可以被查看的
urllib3
發起請求:urllib3.PoolManager().request()
響應對象提供status, data,和header等屬性
JSON content
返回的json格式數據可以通過json模塊,loads()為字典數據類型
可以通過提供字典類型的參數fields來添加查詢參數
load為字典後,可以查看通過url編碼過後傳輸的參數
Binary content
響應返回的數據都是位元組類型,對於大量的數據通過stream來處理更好
ProxyManager
進行http代理操作
添加請求頭Headers
提供字典類型的參數field來傳遞form表單數據
對於二進位的數據上傳,我們用指定body的方式,設置Content-Type的請求頭
爬蟲開發流程
找到目標數據 分析請求流程 構造http請求 提取清洗數據 數據持久化