Python學(xué)習(xí),還在用正則或者bs4做爬蟲嗎?來試試css選擇器吧

之前寫的一些爬蟲都是用的正則、bs4、xpath做為解析庫來實現(xiàn),如果你對web有所涉及,并且比較喜歡css選擇器,那么就有一個更適合的解析庫—— PyQuery。我們就用一個非常簡單的小例子來看看css選擇器做爬蟲是怎么樣的!

安裝

直接pip安裝即可:pip install pyquery

安裝完成后,運行 pip show pyquery,如果出現(xiàn)相關(guān)信息即為安裝完成!

如果pip安裝失敗,可以去官網(wǎng)https://pypi.org/project/pyquery/#downloads下載wheel文件,然后用pip安裝即可,注意文件名字要寫全,比如:pip install pyquery-1.2.17-py2.py3-none-any.whl ,該命令請在同一目錄下使用。

使用

確保安裝成功后就可以開始使用了,它和其他庫一樣,PyQuery 初始化的時候也需要傳入 HTML 數(shù)據(jù)源來初始化一個操作對象,它的初始化方式有多種,比如直接傳入字符串,傳入 URL,傳文件名。

我們用requests庫搭配來寫個簡單的抓取鳳凰新聞的小爬蟲,方便理解:

打開鳳凰網(wǎng)——資訊——即時新聞,我們就以抓取這個頁面的所有新聞為例吧!

這里沒有反爬,頁數(shù)也不是很多(4頁),非常方便用來講解!分析下網(wǎng)頁結(jié)構(gòu)后發(fā)現(xiàn),所有的新聞目錄都存在于網(wǎng)頁源代碼中,每頁大概有60多條,我們先來抓取一頁的標題和url試試

可以看到,標題和url都在class=newsList的div下的ul->li->a標簽下(用a標簽的target屬性匹配的話太多,不好清洗),我們可以直接寫如代碼去獲取相關(guān)內(nèi)容了,如下圖:

python直播學(xué)習(xí)群542110741

前面是常規(guī)的requests庫獲取源代碼html,然后用PyQuery解析網(wǎng)頁源代碼,重點是后面的定位到a標簽和取出內(nèi)容。

doc('.newsList ul a') 的意思是定位class屬性為newsList的標簽下面的ul下面的a標簽,注意newsList前面有個點,代表class屬性,ul和a標簽之間有個li標簽,因為ul下的a標簽是唯一,所以省略了(ul標簽沒有省略是因為最下面翻頁部分也在這個div下,省略會有其他內(nèi)容出現(xiàn),下面會單獨提取)!然后定位到a標簽后,用items()方法將所有的a標簽取出,然后遍歷取出里面的內(nèi)容。

這里提取標簽的內(nèi)容用了2個方法text()和attr():

text()方法,可以提取出標簽下的所有文本內(nèi)容,注意是所有!??!

attr()方法,取出標簽的某屬性,2中寫法都可以:new.attr.href 和new.attr('href')

然后在看翻頁,我們只需要判斷是否存在下一頁,存在時,查找所有的標題和url,然后獲取下一頁的url,繼續(xù)查找,直到不存在下一頁,所有的頁面就都遍歷過了!為了方便,直接做成了一個函數(shù),來看代碼

這里同樣的用class屬性來定位,找到它下的a標簽,然后判斷‘下一頁’是否存在a標簽的文本中,存在則取出下一頁的url,然后再次調(diào)用函數(shù),不存在則退出!

這樣,我們就得到了4頁所有的title和url的內(nèi)容,在來看看新聞詳情頁的情況,所有的網(wǎng)頁文本內(nèi)容都在id="main_content"的div下的好多p標簽中,那么就用到了text()方法了!來看圖

這樣,我們就取到了所有內(nèi)容,整合下,最后代碼如下:

隨手寫的代碼,就不寫入文本或者數(shù)據(jù)庫什么了,主要是學(xué)習(xí)css選擇器的使用!

最后

?到這里PyQuery 的用法就介紹完了,當(dāng)然只是用到了很少一部分,還有好多功能沒有在這里使用,大家有興趣可以去看看官方文檔或者教程,而且css選擇器也可以使用在scrapy框架!是非常方便的一種方式!

現(xiàn)在學(xué)習(xí)python的人越來越多,很多人還在找資料,或者疑問哪本書是否有用,或者想找個可以指導(dǎo)的老師,或者在尋找一起學(xué)習(xí)的小伙伴,如果你也是需要資料或者需要幫助的話,可以關(guān)注我,私信一起來交流學(xué)習(xí)!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容