歡迎光臨
每天分享高質量文章

爬蟲大神,又出新招


來源:菜鳥學Python

ID:cainiao_xueyuan

粉絲獨白

幾乎所有玩爬蟲的人,一定會用requests庫,這個庫的作者是大名鼎鼎的Kenneth Reitz 。牛逼的一塌糊塗,最近我瀏覽它的網站,發現他又出新招,一個把爬蟲下載器和解析器聯合在一起的庫,對爬蟲界又是一大福音啊,一起來學習一下吧.


圖片來自:https://www.kennethreitz.org/photos

01

Requests-Html

這個庫它是requests庫的姊妹篇,一般來說我們爬蟲,我會直接在下載完網頁之後,再去安裝一些解析庫來解析網頁,解析庫又有很多種,增加了我們的學習成本。


有沒有一種庫把這兩者融合在一起,並且方便的提供給我們用。但是這個庫直接內建了html網頁的解析,相當於是自帶酒水,非常方便,號稱是給人類用的網頁解析庫。

目前這個庫已經收穫了7500個贊,323fork,相當牛逼!



02

這個庫裡都有啥

我們只需要用pip 直接install 即可。pip install requests-html ,這個庫它內建了requests庫,pyquery庫,bs庫,還有一些編碼的庫。最牛的是,它竟然把隨機代理庫fake-useragent也整合進來了!

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


都內建了哪些牛逼的功能:


  • 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官網網頁

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

簡單吧,我們也不需要管什麼http的請求頭,也不需要管什麼cookie,更不需要管代理angent.直接初始化一個HTMLSession()類的物件,就可以簡簡單單的解析網頁的內容。一邊輕鬆喝杯茶,一邊直接呼叫r物件裡面的方法,比如提取所有網頁裡面的超連結。


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']

裡面有很多有用的功能函式,比如find,search,search_all功能,非常方便!上邊我們解析了Python官網,接著我們解析官網裡面的about :


想要找到about元素裡面的文字內容,我們只用find一行程式碼就可以搞定搞定

about = r.html.find('#about', first=True)
print (about.text)

>>
About Applications Quotes Getting Started Help Python Brochure

#about 是表示網頁審查裡面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物件已經把各種解析庫的物件控制代碼都完成了初始化,比如大名鼎鼎的pyquery庫的解析(css解析器),lxml庫的解析。


直接用doc=about.pq,這裡的doc其實就是把css解析的內容解析出來,我們可以非常方便的處理. 




整個requests_html庫相當於一個中間層,把複雜的解析網頁的這些繁瑣的步驟,再次的封裝了,裡面還有牛逼的功能,比如支援js頁面的動態解析,內建了強大的chromium引擎和非同步的解析session(AsyncHTMLSession),這個裡面用的是Python非常牛逼的Asyncio庫。


總之有了這個requests_html,媽媽再也不用擔心我學不會爬蟲了更多使用方法可以參考:https://github.com/kennethreitz/requests-html

《Python人工智慧和全棧開發》2018年07月23日即將在北京開課,120天衝擊Python年薪30萬,改變速約~~~~

*宣告:推送內容及圖片來源於網路,部分內容會有所改動,版權歸原作者所有,如來源資訊有誤或侵犯權益,請聯絡我們刪除或授權事宜。

– END –


更多Python好文請點選【閱讀原文】哦

↓↓↓

贊(0)

分享創造快樂