爬蟲三大庫簡介
requests庫
requests: 讓 http 服務人類。
requests庫的作用就是請求**獲取網頁資料。
簡單的使用示例:
部分結果如下圖:
開啟瀏覽器,進入在空白處右鍵,在如下所示的彈出選單中,選擇"檢視網頁原始碼"選項。
我們在新彈出的頁面中看到,先前**print(res.text)返回的結果就是網頁的源**。
有時候爬蟲程式為了更好地抓取資料,需要加入請求頭來偽裝成瀏覽器。
在瀏覽器器中,我們開啟開發者工具(一般快捷鍵是f12),並重新整理網頁後找到user-agent進行複製。如下圖所示。
請求頭的使用
requests庫不僅有get()方法,還有post()等方法。post()方法用於提交表單來進行爬取需要登陸才能獲得資料的**資料。
錯誤和異常
在使用requests庫請求時,可能並不會很順利,有時候我們可能會遇到一些情況,這時requests庫會丟擲錯誤或者異常,requests庫的錯誤和異常主要有以下4種。
requests丟擲乙個connectionerror異常,原因為網路問題(如dns查詢失敗、拒絕連線等)。
response.raise_for_status()丟擲乙個httperror異常,原因未http請求返回了不成功的狀態碼。
requests丟擲乙個timeout異常,原因為請求超時。
requests丟擲乙個toomanyredirects異常,原因為請求超過了設定的最大重定向次數。
所有的requests顯示丟擲的異常都繼承自requests.exceptions.requestexception,我們可以通過異常捕獲try來避免異常發生導致需要重新執行爬蟲程式重頭開始爬取資料。
try方法使用示例:
beautifulsoup庫
beautifulsoup庫是乙個非常流行的python模組。通過beautifulsoup庫可以輕鬆地解析requests庫請求的網頁,並把網頁源**解析為soup文件,以便資料的提取。
beautifulsoup庫示例
beautifulsoup簡單使用示例:
執行結果如下圖所示,看上去與requests庫請求返回的網頁源**類似,但通過beautifulsoup庫解析得到的soup文件按照標準縮排格式的結構輸出,為結構化的資料,為資料的過濾提取提供了方便。
解析器beautifulsoup庫除了支援python標準庫中的html解析器外,還支援一些第三方的解析器。
解析器使用方法
優點缺點
python標準庫
beautifulsoup(markup,"html.parser")
ptyhon的內建標準庫執行速度適中,文件容錯能力強
python2.7.3 or python3.2.2前的版本中文件容錯能力差
lxml html解析器
beautifulsoup(markup,"lxml")
速度快文件容錯能力強
需要安裝c語言庫
lxml xml解析器
beautifulsoup(markup,["lxml","xml"])
beautifulsoup(markup,"xml")
速度快唯一支援xml的解析器
需要安裝c語言庫
htm5lib
beautifulsoup(makup,"html5lib")
最好的容錯性
以瀏覽器的方式解析文件
生成html5格式的文件
速度慢不依賴外部擴充套件
ps:beautifulsoup庫官方推薦使用lxml作為解析器,因為效率高。
soup文件元素定位
解析得到的soup文件可以使用find()和find_all()方法以及selector()方法定位需要的元素。find()和find_all()方法用法相似,beautifulsoup文件中對這兩個方法的定義是:
1.find_all()方法
2.find()方法
find()方法與find_all()方法類似,只是find_all()方法返回的是文件中符合條件的所有tag,是乙個集合(class 'bs4.element.resultset'),find()方法返回的是乙個tag(class 'bs4.element.tag')。
3.selector()方法
(1) 滑鼠定位到想要提取的資料位置,右擊,在彈出的快捷選單中選擇「檢查」命令。
(2) 在網頁源**中右擊所選元素。
(3) 在彈出的快捷選單中選擇copy selector。便可得到需要傳遞給soup.selector的引數。
ps: li:nth-child(1)在python中執行會報錯,需改為li:nth-of-type(1)。
lxml庫
lxml庫是基於libxml2這乙個xml解析庫的python封裝。該模組使用c語言編寫,解析速度比beautifulsoup庫更快。
python的lxml庫簡介 lxml庫
lxml 是 乙個html xml的解析器,主要的功能是如何解析和提取 html xml 資料。lxml和正則一樣,也是用 c 實現的,是一款高效能的 python html xml 解析器,我們可以利用之前學習的xpath語法,來快速的定位特定元素以及節點資訊。需要安裝c語言庫,可使用 pip 安...
Python 之lxml解析庫
一 xpath常用規則 二 解析html檔案 from lxml import etree 讀取html檔案進行解析 defparse html file html etree.parse test.html parser etree.htmlparser print etree.tostring ...
python常見庫的安裝(填lxml庫安裝的坑)
lxml庫 如果使用 pip3 install lxml windows系統安裝時10個最少8個會出錯,因為lxml庫是c語言實現的,即使安裝了visual c 2015,還是會有新的錯誤出現。pipinstall lxml 3 6.0 cp35 cp35m win32 whl 如果是直接用cmd命...