幾乎所有玩爬蟲的人,一定會用requests庫,這個庫的作者是大名鼎鼎的Kenneth Reitz 。牛逼的一塌糊涂,最近我瀏覽它的網(wǎng)站,發(fā)現(xiàn)他又出新招,一個把爬蟲下載器和解析器聯(lián)合在一起的庫,對爬蟲界又是一大福音啊,一起來學習一下吧.
01
Requests-Html
這個庫它是requests庫的姊妹篇,一般來說我們爬蟲,我會直接在下載完網(wǎng)頁之后,再去安裝一些解析庫來解析網(wǎng)頁,解析庫又有很多種,增加了我們的學習成本。
有沒有一種庫把這兩者融合在一起,并且方便的提供給我們用。但是這個庫直接內(nèi)置了html網(wǎng)頁的解析,相當于是自帶酒水,非常方便,號稱是給人類用的網(wǎng)頁解析庫。

目前這個庫已經(jīng)收獲了7500個贊,323fork,相當牛逼!
02
這個庫里都有啥
我們只需要用pip 直接install 即可。pip install requests-html,這個庫它內(nèi)置了requests庫,pyquery庫,bs庫,還有一些編碼的庫。最牛的是,它竟然把隨機代理庫fake-useragent也集成進來了!
# 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
如何用這個庫
1).比如我們爬取一個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/...
簡單吧,我們也不需要管什么http的請求頭,也不需要管什么cookie,更不需要管代理angent.直接初始化一個HTMLSession()類的對象,就可以簡簡單單的解析網(wǎng)頁的內(nèi)容。一邊輕松喝杯茶,一邊直接調(diào)用r對象里面的方法,比如提取所有網(wǎng)頁里面的超鏈接。
2).看一下HTMLSession對象里面都有哪些好的方法:
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表示,如果取的元素是一個list,我們只返回第一個元素。
想讀取about里面的attr:
print (about.attrs)>>{'id': 'about', 'class': ('tier-1', 'element-1'), 'aria-haspopup': 'true'}
想讀取about里面的鏈接:
about.find('a')>>

最牛逼的是這About對象已經(jīng)把各種解析庫的對象句柄都完成了初始化,比如大名鼎鼎的pyquery庫的解析(css解析器),lxml庫的解析。
直接用doc=about.pq,這里的doc其實就是把css解析的內(nèi)容解析出來,我們可以非常方便的處理.
整個requests_html庫相當于一個中間層,把復雜的解析網(wǎng)頁的這些繁瑣的步驟,再次的封裝了,里面還有牛逼的功能,比如支持js頁面的動態(tài)解析,內(nèi)置了強大的chromium引擎和異步的解析session(AsyncHTMLSession),這個里面用的是Python非常牛逼的Asyncio庫。
總之有了這個requests_html,媽媽再也不用擔心我學不會爬蟲了。
-
函數(shù)
+關注
關注
3文章
4417瀏覽量
67501 -
python
+關注
關注
57文章
4876瀏覽量
90025
原文標題:爬蟲大神,又出新招
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
想學習一下如何把兩個程序合在一起?
怎么把主界面和子VI結(jié)合在一起
幾個單獨的程序組合在一起
請問ISE和Mircoblaze是如何結(jié)合在一起的?
請問怎么把藍牙模塊實驗和GPS模塊實驗整合在一起?
labview中模糊控制和pid是怎么結(jié)合在一起的
labview 中如何把模糊控制和pid結(jié)合在一起呢?
USAT和USB BooLoad能結(jié)合在一起嗎
51單片機中,如何把兩個數(shù)組的數(shù)合在一起然后給一個變量?
不同容量的電池組合在一起使用會出現(xiàn)什么問題?
不同容量的電池組合在一起使用會出現(xiàn)什么問題?
將5G信號鏈與電平轉(zhuǎn)換結(jié)合在一起
一個把爬蟲下載器和解析器聯(lián)合在一起的庫
評論