【小白學(xué)爬蟲連載(11)】--pyquery庫詳解

歡迎關(guān)注哈希大數(shù)據(jù)公眾號【哈希大數(shù)據(jù)】

前面的分享如何獲取免費(fèi)高匿代理IP代碼中我們用到了pyquery這個(gè)解析庫,這個(gè)庫在之前的分享中還不曾講到,前面我們主要用的是beautiful soup解析庫聘惦,如果你比較喜歡用CSS選擇器硼被,如果你對jQuery有所了解志衍,可以選擇使用pyquery,它的語法相對更為簡單问芬。下面我們看看該如何使用它吧!

本次分享將從以下四個(gè)方面介紹pyquery庫:

  1. 如何安裝pyquery

  2. 如何初始化

  3. 如何查找節(jié)點(diǎn)寿桨、獲取信息

如何安裝pyquery

Windows系統(tǒng) 利用win + R快捷鍵打開運(yùn)行窗口此衅,輸入cmd點(diǎn)擊確定,打開命令行,然后直接輸入:pip install pyquery炕柔,等待完成安裝后在命令行中輸入python酌泰,然后輸入import pyquery檢查是否安裝成功,如下圖輸入import pyquery后沒有出現(xiàn)問題就說明安裝成功匕累。

image
image
image

如何初始化

pyquery提供了多種初始化方法例如:直接傳入字符串陵刹,傳入U(xiǎn)RL,傳入文件名欢嘿,傳入lxml等衰琐。對于爬蟲來說我們很少的時(shí)候使用傳入U(xiǎn)RL的方式,更多的是使用傳入由requests或其他HTTP庫請求URL得到的response炼蹦。例如:

from pyquery import PyQuery as pq# 出入U(xiǎn)RLdoc = pq(url='https://www.baidu.com/')# 傳入字符串的形式import requestsr = requests.get('https://www.baidu.com/')html = r.textdoc = pq(html)

因?yàn)檎埱髐rl涉及到user-agent羡宙,cookies,檢查是否成功返回等各種問題掐隐,所以還是交給專業(yè)的HTTP庫去做比較好狗热。

如何查找節(jié)點(diǎn)、獲取信息

1.基本CSS選擇器

我們可以利用class虑省、id匿刮、標(biāo)簽名稱或者是一個(gè)序列的方式定位到某個(gè)標(biāo)簽。

例如:

from pyquery import PyQuery as pq# 傳入字符串的形式html_doc = """<html><head><title>The Dormouse's story</title></head><p class="title"><b>The Dormouse's story</b></p><p class="story">Once upon a time there were three little sisters; and their names were<a  class="sister" id="link1">Elsie</a>,<a  class="sister" id="link2">Lacie</a> and<a  class="sister" id="link3">Tillie</a>;and they lived at the bottom of a well.</p><p class="story">...</p>"""doc = pq(html_doc)title = doc('.title')#選擇class為title的所有標(biāo)簽探颈,及其子孫標(biāo)簽print(title)link1 = doc('html .story #link1')#選擇所有html標(biāo)簽下的所有class為story的標(biāo)簽下的所有id為link1的標(biāo)簽熟丸。print(link1)

查找子節(jié)點(diǎn)

查找子節(jié)點(diǎn)需要用到find()方法,傳入的參數(shù)是CSS選擇器伪节,我們還是以上面的HTML為例光羞。

doc = pq(html_doc)title = doc('.title')#選擇class為title的所有標(biāo)簽,及其子孫標(biāo)簽print(title)title_b = title.find('b')#找到b子標(biāo)簽

遍歷

PyQuery的選擇結(jié)果可能是多個(gè)節(jié)點(diǎn)怀大,可能是單個(gè)節(jié)點(diǎn)纱兑,類型都是PyQuery類型,并沒有返回像BeautifulSoup一樣的列表化借。對于多個(gè)節(jié)點(diǎn)的結(jié)果萍启,我們需要調(diào)用items()方法獲取一個(gè)列表。

doc = pq(html_doc)names = doc('.story a').items()for name in names:    print(name)

獲取屬性屏鳍、文本勘纯、HTML等信息

提取到某個(gè)PyQuery類型的節(jié)點(diǎn)之后,我們可以調(diào)用attr()方法來獲取屬性钓瞭。

doc = pq(html_doc)name = doc('.story #link1')print(name.attr('href'))

我們可以調(diào)用text()方法來獲取標(biāo)簽內(nèi)的所有文本驳遵,例如:

doc = pq(html_doc)text = doc('.story')print(text.text())

這里我們將p標(biāo)簽的子標(biāo)簽a中的文本也獲取出來了,有時(shí)候需要這樣山涡,但有時(shí)候我們只想獲取其自身的text堤结,不想得到其子標(biāo)簽的text這時(shí)候我們需要remove函數(shù)的幫助唆迁。

doc = pq(html_doc)text = doc('.story')text.find('a').remove()print(text.text())

這時(shí)候就將a標(biāo)簽剔除掉了,只留下p標(biāo)簽的內(nèi)容竞穷。

pyquery利用class唐责、id、標(biāo)簽名稱返回符合條件的所有元素瘾带,但有時(shí)候我們只需要第一個(gè)或最后一個(gè)或其中幾個(gè)鼠哥。這時(shí)候我們利用偽類選擇器就十分方便了。

2.偽類選擇器

| p:first-child | 選擇屬于父元素的第一個(gè)子元素的每個(gè) <p> 元素看政。 |
| p:last-child | 選擇屬于其父元素最后一個(gè)子元素每個(gè) <p> 元素朴恳。 |
| a[src^="htpps"] | 選擇其 src 屬性值以 "https" 開頭的每個(gè) <a> 元素。 |
| a[src*="htpps"] | 選擇其 src 屬性中包含 "abc" 子串的每個(gè) <a> 元素允蚣。 |

更多偽選擇器的用法可以參考:http://www.w3school.com.cn/cssref/css_selectors.asp小結(jié)

本次分享主要介紹了pyquery的安裝于颖、初始化以及查找節(jié)點(diǎn)獲取信息的方法,pyquery相對于beautiful soup庫語法更為簡單嚷兔,而且對于熟悉jQuery的朋友來說是零門檻森渐。但pyquery有時(shí)候會(huì)出現(xiàn)解析不出內(nèi)容的情況,這也是之前沒給大家介紹的原因冒晰,不過這種情況畢竟很少同衣,為了快速搞定爬取任務(wù),很多時(shí)候pyquery是不錯(cuò)的選擇翩剪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市彩郊,隨后出現(xiàn)的幾起案子前弯,更是在濱河造成了極大的恐慌,老刑警劉巖秫逝,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恕出,死亡現(xiàn)場離奇詭異,居然都是意外死亡违帆,警方通過查閱死者的電腦和手機(jī)浙巫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刷后,“玉大人的畴,你說我怎么就攤上這事〕⒌ǎ” “怎么了丧裁?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長含衔。 經(jīng)常有香客問我煎娇,道長二庵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任缓呛,我火速辦了婚禮催享,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哟绊。我一直安慰自己因妙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布匿情。 她就那樣靜靜地躺著兰迫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炬称。 梳的紋絲不亂的頭發(fā)上汁果,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天,我揣著相機(jī)與錄音玲躯,去河邊找鬼据德。 笑死,一個(gè)胖子當(dāng)著我的面吹牛跷车,可吹牛的內(nèi)容都是我干的棘利。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼朽缴,長吁一口氣:“原來是場噩夢啊……” “哼善玫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起密强,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤茅郎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后或渤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體系冗,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年薪鹦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掌敬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,973評論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡池磁,死狀恐怖奔害,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情地熄,我是刑警寧澤舀武,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站离斩,受9級特大地震影響银舱,放射性物質(zhì)發(fā)生泄漏瘪匿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一寻馏、第九天 我趴在偏房一處隱蔽的房頂上張望棋弥。 院中可真熱鬧,春花似錦诚欠、人聲如沸顽染。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粉寞。三九已至,卻和暖如春左腔,著一層夾襖步出監(jiān)牢的瞬間唧垦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工液样, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留振亮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓鞭莽,卻偏偏與公主長得像坊秸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子澎怒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理褒搔,服務(wù)發(fā)現(xiàn),斷路器喷面,智...
    卡卡羅2017閱讀 134,720評論 18 139
  • 理學(xué)院 17數(shù)本3班 楊代穎 在《禮記》中有這樣的一句話星瘾,讓如今剛進(jìn)入大學(xué)的我刻苦銘心——學(xué)然后知不足。如此平凡...
    6呵呵6閱讀 352評論 0 0
  • 我的家鄉(xiāng)在美麗的嵊泗列島乖酬,嵊泗是全國唯一的國家級列島風(fēng)景名勝區(qū)死相,素有“海上仙山”的美譽(yù)融求。 所有全國各地去這里的交通...
    燕妮在職場閱讀 1,052評論 2 4
  • 是的咬像,今天早餐中午開始了。 望著窗外生宛,冷的讓人內(nèi)心發(fā)緊县昂,最近兩天很多事情,在瘋狂的漩渦中陷舅,不斷提醒自己保持一份安靜...
    心源寶貝閱讀 131評論 0 0