python自动化爬虫框架_python接口自动化28-requests-html爬虫框架

本文介绍了requests-html,一个由requests库作者推出的Python爬虫框架。它集成了CSS选择器和XPath,支持JavaScript渲染,能方便地解析HTML并获取网页链接。通过实例展示了如何获取网页链接、使用XPath和CSS定位元素以及使用各种方法操作元素。
摘要由CSDN通过智能技术生成

前言

requests库的好,只有用过的人才知道,最近这个库的作者又出了一个好用的爬虫框架requests-html。之前解析html页面用过了lxml和bs4,

requests-html集成了一些常用爬虫库的优点,依然是为人类服务:HTML Parsing for Humans。

目前只支持python3.6

相关安装包版本

requests 2.22.0

requests-html 0.10.0

requests-toolbelt 0.8.0

环境准备

pip install requests-html==0.10.0

该库旨在使解析HTML(例如,抓取Web)尽可能简单直观, 有以下优势:

完整的JavaScript支持!

CSS Selectors(又名jQuery风格,感谢PyQuery)。

XPath Selectors,对于胆小的人来说。

模拟用户代理(如真实的Web浏览器)。

自动跟踪重定向。

连接池和cookie持久性。

令人欣喜的请求体验,具有神奇的解析能力。

异步支持

抓页面url地址

先发个get请求,返回response对象,通过r.html.links获取页面的全部链接,包含一些相对路径的地址,如果只想获取绝对路径的地址,可以用r.html.absolute_links

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)

运行结果, 返回内容太多,省略了一部分:

{'http://pycon.blogspot.com/', '/community/', 'http://python.org/dev/peps/', '/events/python-events/831/', , 'http://www.scipy.org'}

{'http://pycon.blogspot.com/', 'https://www.python.org/dev/', 'https://wiki.qt.io/PySide', 'https://www.python.org/events/python-events/817/'}

从返回的结果可以看出,返回的是set集合,会自动的去除重复的链接地址

xpath定位

用过lxml库的小伙伴应该知道https://www.cnblogs.com/yoyoketang/p/9661273.html,lxml可以支持xpath查找元素对象,requests-html也可以完美的支持xpath

接下来我需要获取目标网站:https://www.cnblogs.com/yoyoketang/tag/django/, 获取所有的文章标题,xpath语法:.//*[@id='myposts']/div/div/a

0586d1b004daf2adc01d2d99ec318ea8.png

参考代码

from requests_html import HTMLSession

session = HTMLSession()

r = session.get('https://www.cnblogs.com/yoyoketang/tag/django/')

# 只获取第一个

f = r.html.xpath(".//*[@id='myposts']/div/div/a", first=True).text

print(f)

# 获取全部

all = r.html.xpath(".//*[@id='myposts']/div/div/a")

for i in all:

print(i.text) # 获取文本

print(i.absolute_links) # 获取链接

运行结果

python测试开发django-49.allow_tags和mark_safe

python测试开发django-49.allow_tags和mark_safe

{'https://www.cnblogs.com/yoyoketang/p/10659137.html'}

python测试开发django-48.xadmin上传图片django-stdimage

{'https://www.cnblogs.com/yoyoketang/p/10655601.html'}

python测试开发django-47.xadmin上传图片和文件

{'https://www.cnblogs.com/yoyoketang/p/10653878.html'}

xpath方法返回是一个list,加上 first=True参数返回第一个结果

css定位支持

requests-html同样支持CSS Selector的方法,把上面案例用css定位也可以实现同样效果

from requests_html import HTMLSession

session = HTMLSession()

r = session.get('https://www.cnblogs.com/yoyoketang/tag/django/')

# 只获取第一个 css语法

f = r.html.find(".PostList>div>a", first=True).text

print(f)

# 获取全部 css语法

all = r.html.find(".PostList>div>a")

for i in all:

print(i.text) # 获取文本

print(i.absolute_links) # 获取链接

其它方法

from requests_html import HTMLSession

session = HTMLSession()

r = session.get('https://www.cnblogs.com/yoyoketang/tag/django/')

about = r.html.find(".PostList>div", first=True)

# 1.获取文本

print(about.text)

# 2.获取html内容

print(about.html)

# 3.获取全部属性

print(about.attrs)

# 4.获取链接

print(about.absolute_links )

# 5.搜索文字

print(about.search('python测试开发{}和mark_safe')[0])

# 6.继续定位子元素

print(about.find('a')) # 返回list element对象

# 7.containing 模糊匹配 只包含'django'文本的对象

a = about.find('a', containing='django')

print(a)

运行结果

python测试开发django-49.allow_tags和mark_safe

{'class': ('postTitl2',)}

{'https://www.cnblogs.com/yoyoketang/p/10659137.html'}

django-49.allow_tags

[]

[]

这些只是一些基本的功能,requests-html还可以支持JavaScript渲染页面,看下一篇python接口自动化29-requests-html支持JavaScript渲染页面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值