python爬蟲新庫:requests-html析二,一個庫頂2個用

爬蟲三步走:

  1. 發(fā)送請求獲取網(wǎng)頁HTML
  2. 解釋網(wǎng)頁HTML,得到數(shù)據(jù)或連接
  3. 下載或保存數(shù)據(jù)
    現(xiàn)有的資料基本上都是每一步用一個庫惫周。

大白學(xué)習(xí)爬蟲第一步時钥勋,用得最多的庫還是requests,第二步時會用BeautifulSoup庫科阎。
現(xiàn)在requests作者出一個新的庫:requests-html述吸,它可以幫你用一個庫,完成爬蟲的第一步與第二步锣笨,使得寫代碼與運行也簡便與快捷多了蝌矛。

requests-html只支持Python 3.6及更新的版本,所以使用老版本的Python的同學(xué)需要更新一下Python版本了错英。

安裝:

pip install requests-html

使用

requests-html庫核心是學(xué)習(xí)其HTML類

第一步:獲取網(wǎng)頁HTML:

from requests_html import HTMLSession

session = HTMLSession()
r = session.get("http://www.reibang.com")

#第一步:獲取網(wǎng)頁HTML:
print(r.html.html)

#打印出簡書的HTML網(wǎng)頁代碼

第二步:解釋網(wǎng)頁HTML,得到數(shù)據(jù)或連接

links和 absolute_links兩個屬性分別返回HTML對象所包含的所有鏈接和絕對鏈接(均不包含錨點)入撒。

from requests_html import HTMLSession

session = HTMLSession()
r = session.get("http://www.reibang.com")

#第一步:獲取網(wǎng)頁HTML:
#print(r.html.html)

#打印出簡書的HTML網(wǎng)頁代碼

#第二步:解釋網(wǎng)頁HTML,得到數(shù)據(jù)或連接
#返回的數(shù)據(jù)是一個set集合
print("links返回的數(shù)據(jù)類型:"+ str(type(r.html.links)))
for html in r.html.links:
    print(html)

print("-" * 30)

print("absolute_links返回的數(shù)據(jù)類型:"+     str(type(r.html.absolute_links)))
for html in r.html.links:
    print(html)

以下是打印結(jié)果:

links返回的數(shù)據(jù)類型:<class 'set'>
http://www.reibang.com/p/5510d62f613d?utm_medium=index-banner&utm_source=desktop
/p/e3e0734f2d52
/p/c22ed25a7094#comments
/u/c0b66cf61400
http://www.reibang.com/p/a37929ad1994?utm_medium=index-banner&utm_source=desktop
http://218.242.124.22:8081/businessCheck/verifKey.do?showType=extShow&serial=9031000020171107081457000002158769-SAIC_SHOW_310000-20171115131223587837&signData=MEQCIADWZ5aTcBeER5SOVp0ly+ElvKnwtjczum6Gi6wZ7/wWAiB9MAPM22hp947ZaBobux5PDkd0lfqoCOkVV7zjCYME6g==
/p/c22ed25a7094
/u/530f5d6d4108
/sign_up
/mobile/club


absolute_links返回的數(shù)據(jù)類型:<class 'set'>
http://www.reibang.com/p/5510d62f613d?utm_medium=index-banner&utm_source=desktop
http://www.reibang.com/p/5d6f22ebacd2#comments
http://www.reibang.com/mobile/club

獲取元素

request-html支持CSS選擇器語法來選取HTML元素。
CSS選擇器語法椭岩,它需要使用HTML的find函數(shù)茅逮,該函數(shù)有5個參數(shù),作用如下:

  • selector判哥,要用的CSS選擇器献雅;
  • clean,布爾值塌计,如果為真會忽略HTML中style和script標(biāo)簽造成的影響(原文是sanitize惩琉,大概這么理解);
  • containing,如果設(shè)置該屬性夺荒,會返回包含該屬性文本的標(biāo)簽瞒渠;
  • first,布爾值技扼,如果為真會返回第一個元素伍玖,否則會返回滿足條件的元素列表;
  • _encoding剿吻,編碼格式窍箍。

以下一行代碼就可以獲取元素,取其text屬性就可以得到元素的內(nèi)容丽旅,過程中少了加載BeautifulSoup庫椰棘,寫代碼也更方便了。

from requests_html import HTMLSession

session = HTMLSession()
r = session.get("http://www.reibang.com")

#獲取首頁span元素的內(nèi)容:首頁
print(r.html.find("span.menu-text",first=True).text)
#打娱稀:首頁

處理JavaScript

有些網(wǎng)站是使用JavaScript渲染的邪狞,這樣的網(wǎng)站爬取到的結(jié)果只有一堆JS代碼,這樣的網(wǎng)站requests-html也可以處理茅撞,關(guān)鍵一步就是在HTML結(jié)果上調(diào)用一下render函數(shù)帆卓,它會在用戶目錄(默認(rèn)是 ~/.pyppeteer/)中下載一個chromium巨朦,然后用它來執(zhí)行JS代碼。

from requests_html import HTMLSession
session = HTMLSession()
r = session.get('http://python-requests.org/')
r.html.render()
[W:pyppeteer.chromium_downloader] start chromium download.
Download  may take a few minutes.
[W:pyppeteer.chromium_downloader] chromium download done.
[W:pyppeteer.chromium_downloader] chromium extracted to: C:\Users\xxxx\.pyppeteer\local-chromium\571375
r.html.search('Python 2 will retire in only {months} months!')['months']
'<time>25</time>'

render函數(shù)還有一些參數(shù)剑令,順便介紹一下(這些參數(shù)有的還有默認(rèn)值糊啡,直接看源代碼方法參數(shù)列表即可):

retries: 加載頁面失敗的次數(shù)

  • script: 頁面上需要執(zhí)行的JS腳本(可選)
  • wait: 加載頁面錢的等待時間(秒),防止超時(可選)
  • scrolldown: 頁面向下滾動的次數(shù)
  • sleep: 在頁面初次渲染之后的等待時間
  • reload: 如果為假吁津,那么頁面不會從瀏覽器中加載棚蓄,而是從內(nèi)存中加載
  • keep_page: 如果為真,允許你用 r.html.page訪問頁面

PS: 這個庫更似是將2個庫合為一個庫來使用碍脏,不管怎樣梭依,它給我們節(jié)省了時間,加快了代碼運行速度潮酒,甚是好用。

大白python.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邪蛔,一起剝皮案震驚了整個濱河市急黎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侧到,老刑警劉巖勃教,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異匠抗,居然都是意外死亡故源,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門汞贸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绳军,“玉大人,你說我怎么就攤上這事矢腻∶偶荩” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵多柑,是天一觀的道長奶是。 經(jīng)常有香客問我,道長竣灌,這世上最難降的妖魔是什么聂沙? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮初嘹,結(jié)果婚禮上及汉,老公的妹妹穿的比我還像新娘。我一直安慰自己屯烦,他們只是感情好豁生,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布兔毒。 她就那樣靜靜地躺著,像睡著了一般甸箱。 火紅的嫁衣襯著肌膚如雪育叁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天芍殖,我揣著相機與錄音豪嗽,去河邊找鬼。 笑死豌骏,一個胖子當(dāng)著我的面吹牛龟梦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播窃躲,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼计贰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蒂窒?” 一聲冷哼從身側(cè)響起躁倒,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洒琢,沒想到半個月后秧秉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡衰抑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年象迎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呛踊。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡砾淌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谭网,到底是詐尸還是另有隱情拇舀,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布蜻底,位于F島的核電站骄崩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏薄辅。R本人自食惡果不足惜要拂,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望站楚。 院中可真熱鬧脱惰,春花似錦、人聲如沸窿春。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蔚润,卻和暖如春磅氨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嫡纠。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工烦租, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人除盏。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓叉橱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親者蠕。 傳聞我的和親對象是個殘疾皇子窃祝,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

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