前言: 今天為大家?guī)淼膬?nèi)容,是五步教會你用python爬蟲神器PyQuery?。▋?nèi)含詳細(xì)步驟和代碼),在這里還是要啰嗦下,為了有更好的觀賞性,大部分代碼用圖片的方式呈現(xiàn)出來!喜歡的話不忘點贊關(guān)注不迷路哦! PyQuery庫官方文檔
初始化為PyQuery對象 相當(dāng)于BeautifulSoup庫的初識化方法,將html轉(zhuǎn)化為BeautifulSoup對象。 bsObj = BeautifulSoup(html, 'html.parser') PyQuery庫也要有自己的初始化。 1 將字符串初始化 from pyquery import PyQuery as pq #初始化為PyQuery對象doc = pq(html)print(type(doc))print(doc) 返回 2 將html文件初始化 #filename參數(shù)為html文件路徑 test_html = pq(filename = 'test.html')print(type(test_html))print(test_html) 返回 3 對網(wǎng)址響應(yīng)進(jìn)行初始化 response = pq(url = 'https://www.baidu.com') print(type(response))print(response) 返回 提示:接下來就是自行發(fā)揮了,具體操作很簡單就不做多介紹了! 然后,接著往下看! 二、常用的CCS選擇器 打印id為container的標(biāo)簽 print(doc('#container')) print(type(doc('#container'))) 返回 打印class為object-1的標(biāo)簽 print(doc('.object-1')) 返回 打印標(biāo)簽名為body的標(biāo)簽 print(doc('body')) 返回 多種css選擇器使用 print(doc('html #container')) 返回 三、偽類選擇器 偽類nth 返回 contains #找到含有Python的li標(biāo)簽 print(pseudo_doc('li:contains('Python')'))#找到含有好的li標(biāo)簽print(pseudo_doc('li:contains('好')')) 返回 四、查找標(biāo)簽 按照條件在Pyquery對象中查找符合條件的標(biāo)簽,類似于BeautifulSoup中的find方法。 打印id=container的標(biāo)簽 print(doc.find('#container')) 返回 返回 2 子輩標(biāo)簽-children方法 #id=container的標(biāo)簽的子輩標(biāo)簽 container = doc.find('#container')print(container.children()) 返回 3 父輩標(biāo)簽-parent方法 object_2 = doc.find('.object-2') print(object_2.parent()) 返回 4 兄弟標(biāo)簽-siblings方法 object_2 = doc.find('.object-2') print(object_2.siblings()) 返回 五、獲取標(biāo)簽的信息 定位到目標(biāo)標(biāo)簽后,我們需要標(biāo)簽內(nèi)部的文本或者屬性值,這時候需要進(jìn)行提取文本或?qū)傩灾挡僮?/p> 1 標(biāo)簽屬性值的提取 .attr() 傳入 標(biāo)簽的屬性名,返回屬性值 object_2 = doc.find('.object-2') print(object_2.attr('class')) 返回 object-2 2 標(biāo)簽內(nèi)的文本 .text() 返回 簡單好用的 PyQuery Hello World! Python 大法 好 返回 Python Hello World! Python 大法 好 tips:如果我只想獲得Hello World這個,不想得到其他的文本,可以使用remove方法將li標(biāo)簽去掉,然后再使用text方法 container = docs.find('#container') container.remove('li')print(container.text()) 返回 Hello World! pyquery一些自定義的用法 訪問網(wǎng)址 PyQuery與BeautifulSoup對比,我們會發(fā)現(xiàn)PyQuery可以對網(wǎng)址發(fā)起請求。 比如 from pyquery import PyQuery PyQuery(url = 'https://www.baidu.com') opener參數(shù) 這是PyQuery對百度網(wǎng)址進(jìn)行請求,并將請求返回的響應(yīng)數(shù)據(jù)處理為PyQuery對象。一般pyquery庫會默認(rèn)調(diào)用urllib庫,如果想使用selenium或者requests庫,可以自定義PyQuery的opener參數(shù)。 opener參數(shù)作用是告訴pyquery用什么請求庫對網(wǎng)址發(fā)起請求。常見的請求庫如urllib、requests、selenium。這里我們自定義一個selenium的opener。 這時候我們就能對PyQuery對象進(jìn)行操作,提取有用的信息。具體請看上次的分享,如果想了解更多的功能,pyquery文檔寫的不怎么詳細(xì),好在基本跟jQuery功能吻合,我們?nèi)绻胗煤胮yquery,需要查看jQuery文檔。 cookies、headers 在requests用法中,一般為了訪問網(wǎng)址更加真實,模仿成瀏覽器。一般我們需要傳入headers,必要的時候還需要傳入cookies參數(shù)。而pyquery庫就有這功能,也能偽裝瀏覽器。 讓你的selenium帶上pyquery功能 讓driver訪問的網(wǎng)址得到的網(wǎng)頁直接變?yōu)镻yQuery對象,更方便提取數(shù)據(jù) 返回 著作權(quán)歸作者所有
|
|