虫虫Python精选Python

python爬虫新库:requests-html,一个库顶2个用

2019-08-02  本文已影响5人  大白python

爬虫三步走:

  1. 发送请求获取网页HTML
  2. 解释网页HTML,得到数据或连接
  3. 下载或保存数据
    现有的资料基本上都是每一步用一个库。

大白学习爬虫第一步时,用得最多的库还是requests,第二步时会用BeautifulSoup库。
现在requests作者出一个新的库:requests-html,它可以帮你用一个库,完成爬虫的第一步与第二步,使得写代码与运行也简便与快捷多了。

requests-html只支持Python 3.6及更新的版本,所以使用老版本的Python的同学需要更新一下Python版本了。

安装:

pip install requests-html

使用

requests-html库核心是学习其HTML类

第一步:获取网页HTML:

from requests_html import HTMLSession

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

#第一步:获取网页HTML:
print(r.html.html)

#打印出简书的HTML网页代码

第二步:解释网页HTML,得到数据或连接

links和 absolute_links两个属性分别返回HTML对象所包含的所有链接和绝对链接(均不包含锚点)。

from requests_html import HTMLSession

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

#第一步:获取网页HTML:
#print(r.html.html)

#打印出简书的HTML网页代码

#第二步:解释网页HTML,得到数据或连接
#返回的数据是一个set集合
print("links返回的数据类型:"+ str(type(r.html.links)))
for html in r.html.links:
    print(html)

print("-" * 30)

print("absolute_links返回的数据类型:"+     str(type(r.html.absolute_links)))
for html in r.html.links:
    print(html)

以下是打印结果:

links返回的数据类型:<class 'set'>
https://www.jianshu.com/p/5510d62f613d?utm_medium=index-banner&utm_source=desktop
/p/e3e0734f2d52
/p/c22ed25a7094#comments
/u/c0b66cf61400
https://www.jianshu.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返回的数据类型:<class 'set'>
https://www.jianshu.com/p/5510d62f613d?utm_medium=index-banner&utm_source=desktop
https://www.jianshu.com/p/5d6f22ebacd2#comments
https://www.jianshu.com/mobile/club

获取元素

request-html支持CSS选择器语法来选取HTML元素。
CSS选择器语法,它需要使用HTML的find函数,该函数有5个参数,作用如下:

以下一行代码就可以获取元素,取其text属性就可以得到元素的内容,过程中少了加载BeautifulSoup库,写代码也更方便了。

from requests_html import HTMLSession

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

#获取首页span元素的内容:首页
print(r.html.find("span.menu-text",first=True).text)
#打印:首页

处理JavaScript

有些网站是使用JavaScript渲染的,这样的网站爬取到的结果只有一堆JS代码,这样的网站requests-html也可以处理,关键一步就是在HTML结果上调用一下render函数,它会在用户目录(默认是 ~/.pyppeteer/)中下载一个chromium,然后用它来执行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函数还有一些参数,顺便介绍一下(这些参数有的还有默认值,直接看源代码方法参数列表即可):

retries: 加载页面失败的次数

PS: 这个库更似是将2个库合为一个库来使用,不管怎样,它给我们节省了时间,加快了代码运行速度,甚是好用。

大白python.png
上一篇下一篇

猜你喜欢

热点阅读