以前寫的一些爬蟲都是用的正則、bs四、xpath作爲解析庫來實現,若是你對web有所涉及,而且比較喜歡css選擇器,那麼就有一個更適合的解析庫—— PyQuery。咱們就用一個很是簡單的小例子來看看css選擇器作爬蟲是怎麼樣的!css
直接pip安裝便可:pip install pyqueryhtml
安裝完成後,運行 pip show pyquery,若是出現相關信息即爲安裝完成!python
若是pip安裝失敗,能夠去官網https://pypi.org/project/pyquery/#downloads下載wheel文件,而後用pip安裝便可,注意文件名字要寫全,好比:pip install pyquery-1.2.17-py2.py3-none-any.whl ,該命令請在同一目錄下使用。web
使用數據庫
確保安裝成功後就能夠開始使用了,它和其餘庫同樣,PyQuery 初始化的時候也須要傳入 HTML 數據源來初始化一個操做對象,它的初始化方式有多種,好比直接傳入字符串,傳入 URL,傳文件名。框架
咱們用requests庫搭配來寫個簡單的抓取鳳凰新聞的小爬蟲,方便理解:scrapy
打開鳳凰網——資訊——即時新聞,咱們就以抓取這個頁面的全部新聞爲例吧!函數
這裏沒有反爬,頁數也不是不少(4頁),很是方便用來說解!分析下網頁結構後發現,全部的新聞目錄都存在於網頁源代碼中,每頁大概有60多條,咱們先來抓取一頁的標題和url試試學習
能夠看到,標題和url都在class=newsList的div下的ul->li->a標籤下(用a標籤的target屬性匹配的話太多,很差清洗),咱們能夠直接寫如代碼去獲取相關內容了,以下圖:url
前面是常規的requests庫獲取源代碼html,而後用PyQuery解析網頁源代碼,重點是後面的定位到a標籤和取出內容。
doc('.newsList ul a') 的意思是定位class屬性爲newsList的標籤下面的ul下面的a標籤,注意newsList前面有個點,表明class屬性,ul和a標籤之間有個li標籤,由於ul下的a標籤是惟一,因此省略了(ul標籤沒有省略是由於最下面翻頁部分也在這個div下,省略會有其餘內容出現,下面會單獨提取)!而後定位到a標籤後,用items()方法將全部的a標籤取出,而後遍歷取出裏面的內容。
這裏提取標籤的內容用了2個方法text()和attr():
text()方法,能夠提取出標籤下的全部文本內容,注意是全部!!!
attr()方法,取出標籤的某屬性,2中寫法均可以:new.attr.href 和new.attr('href')
而後在看翻頁,咱們只須要判斷是否存在下一頁,存在時,查找全部的標題和url,而後獲取下一頁的url,繼續查找,直到不存在下一頁,全部的頁面就都遍歷過了!爲了方便,直接作成了一個函數,來看代碼
這裏一樣的用class屬性來定位,找到它下的a標籤,而後判斷‘下一頁’是否存在a標籤的文本中,存在則取出下一頁的url,而後再次調用函數,不存在則退出!
這樣,咱們就獲得了4頁全部的title和url的內容,在來看看新聞詳情頁的狀況,全部的網頁文本內容都在id="main_content"的div下的好多p標籤中,那麼就用到了text()方法了!來看圖
這樣,咱們就取到了全部內容,整合下,最後代碼以下:
隨手寫的代碼,就不寫入文本或者數據庫什麼了,主要是學習css選擇器的使用!
到這裏PyQuery 的用法就介紹完了,固然只是用到了不多一部分,還有好多功能沒有在這裏使用,你們有興趣能夠去看看官方文檔或者教程,並且css選擇器也可使用在scrapy框架!是很是方便的一種方式!
如今學習python的人愈來愈多,不少人還在找資料,或者疑問哪本書是否有用,或者想找個能夠指導的老師,或者在尋找一塊兒學習的小夥伴,若是你也是須要資料或者須要幫助的話,能夠關注我,私信一塊兒來交流學習!