最新的爬蟲工具requests-html
阿新 • • 發佈:2018-04-22
rom 聽說 {} 推薦 接口 人員 查找 python 2 日子
使用Python開發的同學一定聽說過Requsts庫,它是一個用於發送HTTP請求的測試。如比我們用Python做基於HTTP協議的接口測試,那麽一定會首選Requsts,因為它即簡單又強大。現在作者Kenneth Reitz 又開發了requests-html 用於做爬蟲。
GiHub項目地址:
https://github.com/kennethreitz/requests-html
requests-html 是基於現有的框架 PyQuery、Requests、lxml、beautifulsoup4等庫進行了二次封裝,作者將Requests設計的簡單強大的優點帶到了該項目中。
安裝:
pip install requests-html
先來看看requests的基本使用。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get(‘https://python.org/‘)
# 獲取頁面上的所有鏈接。
all_links = r.html.links
print(all_links)
# 獲取頁面上的所有鏈接,以絕對路徑的方式。
all_absolute_links = r.html.absolute_links
print(all_absolute_links)
- 小試牛刀
作為一個IT技術人員,是不是要時時關心一下科技圈的新聞,上博客園新聞頻道,抓取最新的推薦新聞。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get("https://news.cnblogs.com/n/recommend")
# 通過CSS找到新聞標簽
news = r.html.find(‘h2.news_entry > a‘, first=True)
for new in news:
print(new.text) # 獲得新聞標題
print(new.absolute_links) # 獲得新聞鏈接
執行結果:
外賣小哥擊敗北大碩士,獲《中國詩詞大會》冠軍!董卿點贊
{ ‘https://news.cnblogs.com/n/593573/‘}
一圖看懂中國科學家如何用“魔法藥水”制備幹細胞
{‘https://news.cnblogs.com/n/593572/‘}
再見Windows:你曾是我的全部
{‘https://news.cnblogs.com/n/593559/‘}
復盤摩拜賣身美團:美女創始人背後有3個男人
{‘https://news.cnblogs.com/n/593536/‘}
不要把認錯當成一種PR!
{‘https://news.cnblogs.com/n/593494/‘}
胡瑋煒的胳膊擰不過馬化騰的大腿
{‘https://news.cnblogs.com/n/593450/‘}
被廢四年奇跡逆轉!XP用戶竟越來越多
{‘https://news.cnblogs.com/n/593445/‘}
天宮一號:我這一輩子
{‘https://news.cnblogs.com/n/593414/‘}
微軟重組的背後:未來屬於“微軟”,而不只是Windows
{‘https://news.cnblogs.com/n/593375/‘}
低俗、鬼畜受限令出臺後,內容原創者的日子會好過點嗎?
{‘https://news.cnblogs.com/n/593370/‘}
《頭號玩家》:一封獻給極客的情書
{‘https://news.cnblogs.com/n/593307/‘}
翻了下Google日語輸入法愚人節作品集,這個團隊真的超有病…
{‘https://news.cnblogs.com/n/593285/‘}
C++委員會決定在C++20中棄用原始指針
{‘https://news.cnblogs.com/n/593271/‘}
一文讀懂阿裏收購餓了麽:餓了麽和美團外賣決戰之日到了
{‘https://news.cnblogs.com/n/593261/‘}
剛剛天宮一號墜落 而中國空間站即將騰飛!
{‘https://news.cnblogs.com/n/593248/‘}
小抖怡情適可而止 不要為了博眼球而去做一些危險的事情
{‘https://news.cnblogs.com/n/593238/‘}
拼多多淘寶低價阿膠背後:放馬皮牛皮 摻禁用明膠
{‘https://news.cnblogs.com/n/593232/‘}
吳曉波對話劉強東:太保守 讓我只能看著機會流走
{‘https://news.cnblogs.com/n/593176/‘}
擴展:我們可以進一步將這裏數據做持久化處理,設計出自己的“頭條”。
- 小有成就
接下來我們到網站上下載壁紙,以美桌網(www.win4000.com)為例。
from requests_html import HTMLSession
import requests
# 保存圖片到bg/目錄
def save_image(url, title):
img_response = requests.get(url)
with open(‘./bg/‘+title+‘.jpg‘, ‘wb‘) as file:
file.write(img_response.content)
# 背景圖片地址,這裏選擇1920*1080的背景圖片
url = "http://www.win4000.com/wallpaper_2358_0_10_1.html"
session = HTMLSession()
r = session.get(url)
# 查找頁面中背景圖,找到鏈接,訪問查看大圖,並獲取大圖地址
items_img = r.html.find(‘ul.clearfix > li > a‘)
for img in items_img:
img_url = img.attrs[‘href‘]
if "/wallpaper_detail" in img_url:
r = session.get(img_url)
item_img = r.html.find(‘img.pic-large‘, first=True)
url = item_img.attrs[‘src‘]
title = item_img.attrs[‘title‘]
print(url+title)
save_image(url, title)
這個網站上的圖片還是很容易獲取的,在上面的代碼塊中我加了註釋。這裏不再說明。
選擇一個CSS選擇器的元素:
>>> about = r.html.find(‘#about‘, first=True)
獲取元素的文本內容:
>>> print(about.text)
獲取元素的屬性
>>> about.attrs
{‘id‘: ‘about‘, ‘class‘: (‘tier-1‘, ‘element-1‘), ‘aria-haspopup‘: ‘true‘}
渲染出一個元素的HTML:
>>> about.html
選擇元素內的元素:
>>> about.find(‘a‘)
頁面上的文本搜索:
>>> r.html.search(‘Python is a {} language‘)[0]
更復雜的CSS選擇器的例子(從Chrome開發工具復制):
>>> r = session.get(‘https://github.com/‘)
>>> sel = ‘body > div.application-main > div.jumbotron.jumbotron-codelines > div > div > div.col-md-7.text-center.text-md-left > p‘
>>> print(r.html.find(sel, first=True).text)
它也支持:
>>> r.html.xpath(‘/html/body/div[1]/a‘)
JavaScript的支持
讓我們抓住一些文本呈現的JavaScript:
>>> r = session.get(‘http://python-requests.org‘)
>>> r.html.render()
>>> r.html.search(‘Python 2 will retire in only {months} months!‘)[‘months‘]
‘<time>25</time>‘
註意,當你第一次運行render()方法,它將downloadchromium進入你的家目錄(例如~ .pyppeteer / /)。
>>> from requests_html import HTML
>>> doc = """<a href=‘https://httpbin.org‘>"""
>>> html = HTML(html=doc)
>>> html.links
{‘https://httpbin.org‘}
最新的爬蟲工具requests-html