动态爬虫神器-requests_html初探

今天凑时间研究了下requests_html模块,它是requests模块作者开发的另一款爬虫神器。此模块主要结合了xpath网页源码获取功能,以及pyppeteer网页动态渲染功能。后者方便我们获取js动态渲染的源代码,而前者方便从源代码中获取想要的内容。

 

模块下载安装


					
1

					
pip install requests-html

注意目前只支持python3.6版本

模块基础用法


					
1
2
3
4
5
6
7

					
from requests_html import HTMLSession
 
url = "http://sec.didichuxing.com/present"
 
session = HTMLSession()
r = session.get(url)
print(r.html.html) # 输出网页源码

其他response方法


					
1
2
3
4
5
6
7
8

					
print(r.html.url) # 输出当前url
print(r.html.links) # 输入页面中的link(原生样式)
print(r.html.absolute_links) # 输入页面中的link(绝对链接)
print(r.html)
print(r.html.text) # 输出源码中的字符
print(r.html.html) # 输出源码
 
print(dir(r.html)) # 输入所有方法,可查看所有response方法

 

动态渲染页面

requests-html模块提供了render()方法,用于动态渲染网页。当第一次执行render方法时,会自动下载Chromium(无头浏览器)到~/.pyppeteer/目录下,如下图所示: 蓝域动态爬虫神器
使用非常简单,只需要在response中调用render方法:


					
1
2
3
4
5
6
7
8

					
from requests_html import HTMLSession
 
url = "http://sec.didichuxing.com/present"
 
session = HTMLSession()
r = session.get(url)
r.html.render() # 动态渲染页面
print(r.html.html) # 输出源码

 

实例演示

这里以http://sec.didichuxing.com/present 网站为例,可以先利用浏览器查看网页源码: 蓝域动态爬虫神器
从上图中可以看到,此网页内容主要为js动态渲染而来,我们先尝试不用动态渲染的方式获取网页源码


					
1
2
3
4
5
6
7

					
from requests_html import HTMLSession
 
url = "http://sec.didichuxing.com/present"
session = HTMLSession()
r = session.get(url)
# r.html.render() # 动态渲染页面
print(r.html.html)

 

输出: 蓝域动态爬虫神器
然后加上render方法


					
1
2
3
4
5
6
7

					
from requests_html import HTMLSession
 
url = "http://sec.didichuxing.com/present"
session = HTMLSession()
r = session.get(url)
r.html.render() # 动态渲染页面
print(r.html.html)

 

输出: 蓝域动态爬虫神器

可以看到网页上的内容被动态渲染出来了,简直方便。

异步

request_html同样支持异步,具体使用方法:


					
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

					
>>> from requests_html import AsyncHTMLSession
>>> asession = AsyncHTMLSession()
>>> async def get_pythonorg():
... r = await asession.get('https://python.org/')
... return r
...
>>> async def get_reddit():
... r = await asession.get('https://reddit.com/')
... return r
...
>>> async def get_google():
... r = await asession.get('https://google.com/')
... return r
...
>>> results = asession.run(get_pythonorg, get_reddit, get_google)
>>> results # check the requests all returned a 200 (success) code
[<Response [200]>, <Response [200]>, <Response [200]>]
>>> # Each item in the results list is a response object and can be interacted with as such
>>> for result in results:
... print(result.html.url)
...
https://www.python.org/
https://www.google.com/
https://www.reddit.com/

 

说明:关于requests_html模块暂时没有研究太多,日后用到了再补充!!!

以上就是蓝域安全网小编为大家分享的动态爬虫神器-requests_html初探
如果您喜欢本篇文章转载请注明本站文章链接地址:http://www.yemogege.cn/wzaq-stgz/360.html

更多相关文章阅读:

SQLmap注入神器 怎么用?SQLmap注入神器 怎么用?

版权保护: 本文由admin所发布,转载请保留本文链接: http://www.yemogege.cn/wzaq-stgz/360.html

免责声明:蓝域安全网所发布的一切渗透技术视频文章,逆向脱壳病毒分析教程,以及相关实用源码仅限用于学习和研究目的
请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除! 

侵权删帖/违法举报/投稿等事物联系邮箱:yemogege@vip.qq.com 网站地图