python request html_只在python3.6以上 requests-html

先看下这个包的新特性:

190408853_1_20200513051133991

手动敲黑板)划重点,要考,必考内容!!!

全面支持解析JavaScript!

CSS 选择器 (jQuery风格, 感谢PyQuery).

XPath 选择器, for the faint at heart.

自定义user-agent (就像一个真正的web浏览器).

自动追踪重定向.

连接池与cookie持久化.

令人欣喜的请求体验,魔法般的解析页面.

接触过爬虫用的最多的包无非就是requests, urllib包,我们再使用这些包的时候显示,用requests包去获取响应,然后再利用pyquery或者bs4,xpath再去整理提取我们需要是目标数据。也就是下面两步:

import requests

from pyquery import PyQuery as pq

#获取网页

html = requests.get()

#解析网页

doc = pq(html)但是!!!!!!

在requests-html里面只需要一步就可以完成而且可以直接进行js渲染!!!

requests的作者Kenneth Reitz 开发的requests-html 爬虫包 是基于现有的框架 PyQuery、Requests、lxml、beautifulsoup4等库进行了二次封装,作者将Requests的简单,便捷,强大又做了一次升级。这里是github地址

下面看下这个非常强大的工具。注意这里只在python3.6以上使用

安装pip install requests-html

使用教程

GET请求网址JD网站:

from requests_html import HTMLSession

#启动

session = HTMLSession()

#获取

jd= session.get('https://www.jd.com/')

# 获取网页内的所有链接

link_list = jd.html.links

# 获取页面上所欲偶的链接,以绝对路径的方式

ab_link_list = jd.html.absolute_links

在交互环境下测试,输出结果太多我们简单截取一部分

这是.links返回的结果,结果是一个set类型数据{'//a.jd.com/',

'//anzhuang.jd.com',

'//art.jd.com',

...

'//z.jd.com/',

'//z.jd.com/sceneIndex.html?from=jrscyn_20162'}

这是绝对路径返回的结果,同样的是set类型,但是自动添加了协议,更加方便的取到连接

获取对象

它封装了很多解析库,所以很多用法得到了保留,先看下下面的使用demo:

from requests_html import HTMLSession

session = HTMLSession()

r = session.get('https://search.jd.com/Search?keyword=x1&enc=utf-8&wq=x1&pvid=add52cb63f7e4887b5ba29406a5756ba')

link_list = r.html.find('.gl-item')

for i in link_list:

print(i.text)

结果如下:¥13999.00

联想ThinkPad

X1

Carbon 2018(0JCD)14英寸轻薄笔记本电脑(i7-8550U 8G 512GSSD 背光键盘 FHD)黑色

1.5万+条评价

自营

对比 关注 加入购物车

广告

¥9999.00

.....

相信通过上面你已经看出来了上面使用的是css选择器,我们介绍几个常用的使用方法。关于css选择的用法可以参考以前的一篇文章爬虫解析库--pyquery以及css选择器的使用或者查看网站教程请移步这里了解更多

from requests_html import HTMLSession

session = HTMLSession()

r = session.get('https://python.org/')通过css选择器选取一个Element对象

node = r.html.find('#about', first=True') #里面是css选择器内容获取一个Element对象内的文本内容

node_text = node.text获取一个Element对象的所有attributes

node_attrs = node.attrs渲染出一个Element对象的HTML内容:

node_html = node.html获取Element对象内的特定子Element对象,返回列表:

node.find('a')在获取的页面中查找文本

node.html.search('something{}something')[0] # 这个大括号里面是相当于替代的词类似于正则里的.也就是所有匹配可以设定开头和结尾中间的大括号里的内容也就是我们想要取出来的文字同时也支持XPath

node.html.xpath('a')你也可以获取到只包含某些文本的Element对象

node.html.find('a', containing='something')

下面就是重磅炸弹了!!!高能预警!!!

r = session.get('http://python-requests.org/')

r.html.render()

pirnt(r.html.search('Python 2 will retire in only {months} months!')['months'])

注意,当你第一次调用render()方法时,代码将会自动下载Chromium,并保存在你的家目录下(如:~/.pyppeteer/)。它只会下载这一次。

还有正在开发的智能分页系统这里还没有完善不过多介绍不使用Requests库 你不需要Requests库也可以使用requests-html

from requests_html import HTML

doc = """"""

html = HTML(html=doc)

print(html.links)同样你不需要Requests库也可以渲染JavaScript页面

# ^^ 接上边代码继续 ^^

script = """

() => {

return {

width: document.documentElement.clientWidth,

height: document.documentElement.clientHeight,

deviceScaleFactor: window.devicePixelRatio,

}

}

"""

val = html.render(script=script, reload=False)

print(val)

print(html.html)

比较实用的方法user_agentrequests_html.user_agent(style=None)

返回一个指定风格的合法的用户代理,默认是Chrome风格的用户代理HTML Sessions

这些sessions用于构造http请求。class requests_html.HTMLSession(mock_browser=True)

它是一个可被销毁的session,可用于cookie持久化和连接池,以及其他地方。

查看官方文档获取更多api使用方法

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值