0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個(gè)把爬蟲下載器和解析器聯(lián)合在一起的庫

馬哥Linux運(yùn)維 ? 來源:未知 ? 作者:李倩 ? 2018-05-13 10:56 ? 次閱讀

幾乎所有玩爬蟲的人,一定會(huì)用requests庫,這個(gè)庫的作者是大名鼎鼎的Kenneth Reitz 。牛逼的一塌糊涂,最近我瀏覽它的網(wǎng)站,發(fā)現(xiàn)他又出新招,一個(gè)把爬蟲下載器和解析器聯(lián)合在一起的庫,對(duì)爬蟲界又是一大福音啊,一起來學(xué)習(xí)一下吧.

01

Requests-Html

這個(gè)庫它是requests庫的姊妹篇,一般來說我們爬蟲,我會(huì)直接在下載完網(wǎng)頁之后,再去安裝一些解析庫來解析網(wǎng)頁,解析庫又有很多種,增加了我們的學(xué)習(xí)成本。

有沒有一種庫把這兩者融合在一起,并且方便的提供給我們用。但是這個(gè)庫直接內(nèi)置了html網(wǎng)頁的解析,相當(dāng)于是自帶酒水,非常方便,號(hào)稱是給人類用的網(wǎng)頁解析庫。

目前這個(gè)庫已經(jīng)收獲了7500個(gè)贊,323fork,相當(dāng)牛逼!

02

這個(gè)庫里都有啥

我們只需要用pip 直接install 即可。pip install requests-html,這個(gè)庫它內(nèi)置了requests庫,pyquery庫,bs庫,還有一些編碼的庫。最牛的是,它竟然把隨機(jī)代理庫fake-useragent也集成進(jìn)來了!

# what packages are required for this module to be executed?

都內(nèi)置了哪些牛逼的功能:

Full JavaScript support!

CSS Selectors(a.k.a jQuery-style, thanks to PyQuery).

XPath Selectors, for the faint at heart.

Mocked user-agent (like a real web browser).

Automatic following of redirects.

Connection–pooling and cookie persistence.

The Requests experience you know and love, with magical parsing abilities.

03

如何用這個(gè)庫

1).比如我們爬取一個(gè)Python官網(wǎng)網(wǎng)頁

>>/about/quotes//about/success/#software-developmenthttps://mail.python.org/mailman/listinfo/python-dev/downloads/release/python-365//community/logos//community/sigs///jobs.python.orghttp://tornadoweb.orghttps://github.com/python/pythondotorg/issues/about/gettingstarted/...

簡(jiǎn)單吧,我們也不需要管什么http的請(qǐng)求頭,也不需要管什么cookie,更不需要管代理angent.直接初始化一個(gè)HTMLSession()類的對(duì)象,就可以簡(jiǎn)簡(jiǎn)單單的解析網(wǎng)頁的內(nèi)容。一邊輕松喝杯茶,一邊直接調(diào)用r對(duì)象里面的方法,比如提取所有網(wǎng)頁里面的超鏈接。

2).看一下HTMLSession對(duì)象里面都有哪些好的方法:

print ([e for e in dir(r.html) if not e.startswith('_')])>>['absolute_links', 'add_next_symbol', 'base_url', 'default_encoding', 'element', 'encoding', 'find', 'full_text', 'html', 'links', 'lxml', 'next_symbol', 'page', 'pq', 'raw_html', 'render', 'search', 'search_all','session', 'skip_anchors', 'text', 'url', 'xpath']

里面有很多有用的功能函數(shù),比如find,search,search_all功能,非常方便!上邊我們解析了Python官網(wǎng),接著我們解析官網(wǎng)里面的about :

想要找到about元素里面的文本內(nèi)容,我們只用find一行代碼就可以搞定搞定

about = r.html.find('#about', first=True)print (about.text)>>About Applications Quotes Getting Started Help Python Brochure

#about 是表示網(wǎng)頁審查里面id為about (css方式提取),first置為true表示,如果取的元素是一個(gè)list,我們只返回第一個(gè)元素。

想讀取about里面的attr:

print (about.attrs)>>{'id': 'about', 'class': ('tier-1', 'element-1'), 'aria-haspopup': 'true'}

想讀取about里面的鏈接:

about.find('a')>>

最牛逼的是這About對(duì)象已經(jīng)把各種解析庫的對(duì)象句柄都完成了初始化,比如大名鼎鼎的pyquery庫的解析(css解析器),lxml庫的解析。

直接用doc=about.pq,這里的doc其實(shí)就是把css解析的內(nèi)容解析出來,我們可以非常方便的處理.

整個(gè)requests_html庫相當(dāng)于一個(gè)中間層,把復(fù)雜的解析網(wǎng)頁的這些繁瑣的步驟,再次的封裝了,里面還有牛逼的功能,比如支持js頁面的動(dòng)態(tài)解析,內(nèi)置了強(qiáng)大的chromium引擎和異步的解析session(AsyncHTMLSession),這個(gè)里面用的是Python非常牛逼的Asyncio庫。

總之有了這個(gè)requests_html,媽媽再也不用擔(dān)心我學(xué)不會(huì)爬蟲了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4333

    瀏覽量

    62721
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84787

原文標(biāo)題:爬蟲大神,又出新招

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    想學(xué)習(xí)下如何個(gè)程序合在一起

    在下新手,剛?cè)氲?,想學(xué)習(xí)下如何個(gè)程序合在一起?在keil里面操作!兩個(gè)程序融合需要怎樣操作呢?請(qǐng)前輩們指點(diǎn)!謝謝!
    發(fā)表于 08-02 14:56

    怎么個(gè)程序湊合在一起

    奮斗了個(gè)把星期,弄會(huì)了chaoshengbo蔽障和藍(lán)牙小車,但是不知道怎么這兩個(gè)程序湊合在一起,想請(qǐng)大神搭救一把
    發(fā)表于 09-17 21:33

    怎么主界面和子VI結(jié)合在一起

    就是做一個(gè)電梯的界面,然后我做好了一個(gè)個(gè)的功能的子VI,但是怎么調(diào)用使得運(yùn)行的時(shí)候只出現(xiàn)電梯界面,然后通過電梯界面的按鈕來調(diào)用子VI的功能,反正就是不知道怎么主界面和子VI結(jié)合在一起
    發(fā)表于 08-24 15:26

    幾個(gè)單獨(dú)的程序組合在一起

    怎樣幾個(gè)個(gè)單獨(dú)的程序組合在一起,我現(xiàn)在在做環(huán)境檢測(cè)儀,我可不可以先把溫度,濕度,噪聲等程序先單獨(dú)做,然后它們組合在一起,可以嗎,怎么組合,求大神告知
    發(fā)表于 03-23 14:22

    AD 如何屬性的焊盤組合在一起

    AD如何屬性的焊盤組合在一起
    發(fā)表于 11-16 11:43

    怎樣講maxwell與 Simplorer聯(lián)合在一起用?

    怎樣講maxwell與 Simplorer聯(lián)合在一起用?
    發(fā)表于 11-16 21:02

    請(qǐng)問ISE和Mircoblaze是如何結(jié)合在一起的?

    大家好,有人可以向我解釋下ISE和Mircoblaze是如何結(jié)合在一起的嗎?目前我已經(jīng)在ISE中用VHDL編寫了個(gè)程序,我希望在我的設(shè)計(jì)中添加
    發(fā)表于 02-19 10:59

    請(qǐng)問怎么藍(lán)牙模塊實(shí)驗(yàn)和GPS模塊實(shí)驗(yàn)整合在一起?

    現(xiàn)在已經(jīng)藍(lán)牙模塊實(shí)驗(yàn)、DS18B20實(shí)驗(yàn)和DHT11實(shí)驗(yàn)成功整合在一起了。現(xiàn)在就差GPS模塊了。請(qǐng)問GPS模塊要怎么接?我試過接在串口1,但是手機(jī)收不到GPS信息。
    發(fā)表于 03-03 23:34

    labview中模糊控制和pid是怎么結(jié)合在一起

    labview中模糊控制和pid是怎么結(jié)合在一起的?求高手解答,有簡(jiǎn)單的模糊控制和pid結(jié)合在一起的vi文件最好,
    發(fā)表于 03-13 08:04

    labview 中如何模糊控制和pid結(jié)合在一起呢?

    labview中模糊控制怎么導(dǎo)入?并且和pid結(jié)合在一起呢?有沒有相關(guān)的VI做參考,求幫助,抱拳
    發(fā)表于 03-14 10:57

    USAT和USB BooLoad能結(jié)合在一起

    嗨,有沒有可能將USAT和USB BooLoad結(jié)合在一起,以便它可以從任個(gè)電纜獲得固件?謝謝
    發(fā)表于 04-24 08:39

    51單片機(jī)中,如何兩個(gè)數(shù)組的數(shù)合在一起然后給個(gè)變量?

    51單片機(jī)中,怎么兩個(gè)數(shù)組的數(shù)合在一起然后給個(gè)變量 比如:char a[5]={01234} char b[5]={56789} char c; 怎么a[4]的數(shù)和b[3]的數(shù)
    發(fā)表于 10-31 07:34

    不同容量的電池組合在一起使用會(huì)出現(xiàn)什么問題?

    不同容量的電池組合在一起使用會(huì)出現(xiàn)什么問題?       如果將不同容量或新舊電池混在一起使用,有可能出現(xiàn)漏液,
    發(fā)表于 11-13 15:20 ?3398次閱讀

    不同容量的電池組合在一起使用會(huì)出現(xiàn)什么問題?

    不同容量的電池組合在一起使用會(huì)出現(xiàn)什么問題? 當(dāng)不同容量的電池組合在一起使用時(shí),會(huì)產(chǎn)生系列問題。這些問題不僅會(huì)影響電池組的性能,還可能導(dǎo)致電池組、電子設(shè)備和人員的安全受到威脅。因此,電池組合使用之
    的頭像 發(fā)表于 11-06 10:49 ?2714次閱讀

    將5G信號(hào)鏈與電平轉(zhuǎn)換結(jié)合在一起

    電子發(fā)燒友網(wǎng)站提供《將5G信號(hào)鏈與電平轉(zhuǎn)換結(jié)合在一起.pdf》資料免費(fèi)下載
    發(fā)表于 09-18 14:49 ?0次下載
    將5G信號(hào)鏈與電平轉(zhuǎn)換結(jié)<b class='flag-5'>合在一起</b>