總結最近學習python爬蟲遇到的問題(selenium+Chrome,urllib,requests)
阿新 • • 發佈:2018-12-26
最近學習了一下爬蟲,興趣使然吧!(注:以下均在python3的環境下實驗)
1.基本庫,先說一下基本庫有,urllib和requests兩個庫:
基本庫的作用是:傳送頁面請求,處理異常,解析連結,分析Robots協議。
基本用法urllib有:
2,解析庫 解析庫有:Xpath,Beautiful Soup,pyquery,正則表示式 解析庫的主要作用是:處理基本庫提交過來的頁面資料,進行解析,獲取需要的內容對頁面進行加工整理。 使用Xpath需要安裝lxml,其用法在於根據標籤獲得需要的href或者text,還能對網頁url路徑解析
nodename 選取此節點的所有子節點
/ 從當前節點直接選取子節點
// 重定向節點,可以從任意位置開始(
用的很多 )
. 選取當前節點
.. 選取當前節點的父節點
@ 選取屬性
Beautiful Soup,pyquery也是類似,定義標籤,然後通過find()或者find_all()通過標籤獲取文字屬性或者文字,更深一步的文字加工,或者資訊提取,需要用到正則表示式。
因為我首次接觸爬蟲就是直接用正則表示式解析的,正則表示式,算是“萬金油”型的東西,既可以進行標籤內容定位,也可以進行內容的再次加工提取。用好了,正則表示式在解析方面基本是萬能的,正則表示式裡面的東西太多就不在這裡說了。
3,高階的爬蟲selenium
selenium不同於其他的庫,selenium是呼叫真實的瀏覽器,去獲取網頁資訊,不需要設定cookie,headers這些東西。也不容易被對方伺服器中斷連線。更為強大的地方在於,selenium可以模仿使用者的鍵盤和滑鼠行為,傳送資訊指令。並且自帶的有解析網頁的方法。經過Javascript渲染的頁面selenium也可以正常解析。抓取方式非常有效。
selenium需要有本地瀏覽器支援:
支援的瀏覽器有:Chrome()#google瀏覽器,已經提供了headless模式
Firefox()#火狐瀏覽器
Edge()#windows的IE瀏覽器
PhantomJS()#以前很適合selenium的,其無頭模式大受歡迎,然而2018年3月份,開發者之間出現矛盾,專案停止更新,被封存了,最新版的selenium已經不再支援PhantomJS,而Chrome()從2017年開始提供瀏覽器的headless()(無頭模式)廣泛使用。
Safari()#蘋果的瀏覽器
用selenium+Chrome和urllib結合的方式,爬取了塔多漫畫漫畫網的漫畫,具體程式碼請在github 上下載:
https://github.com/linggood/-
from urllib.request import urlopen
Requestreq = Request(url,headers=headers)
pic_req = urlopen(req)
html = pic_req.read()
可以看出urllib可以新增標頭檔案,模擬正常的響應,但是設定cookie非常繁瑣,需要新增額外的cookie相關的庫,大部分網站現在都會設定cookie來跟蹤使用者的資料瀏覽,cookie的缺失會導致對方伺服器持續一段時間後直接斷開連線。urlopen()開啟網頁,read()讀取網頁原始碼,urllib的響應速度極快,也是非常適合小規模爬蟲的,
requests庫基本用法:
requests庫優於urllib的地方在於裡面直接有cookie,登入驗證,代理設定等等。可以在headers裡面設定cookie,傳送請求。 當然在某些場合下,如在某些圖片的處理上,urllib的效能優於requests。import requests response = requests.get(url,headers=headers) print(response.status_code) # 列印狀態碼 print(response.url) # 列印請求 urlprint(response.headers) # 列印頭資訊 print(response.cookies) # 列印cookie資訊 print(response.text) #以文字形式列印網頁原始碼 print(response.content) #以位元組流形式列印
2,解析庫 解析庫有:Xpath,Beautiful Soup,pyquery,正則表示式 解析庫的主要作用是:處理基本庫提交過來的頁面資料,進行解析,獲取需要的內容對頁面進行加工整理。 使用Xpath需要安裝lxml,其用法在於根據標籤獲得需要的href或者text,還能對網頁url路徑解析