篆体字作品 | 篆体字知识 | 加入收藏 篆体字转换器软件可转换多种篆体字在线预览 网页版 V2.0
篆体字转换器

当前位置:篆体字网 > 知识库 >

chromeium

时间:2024-01-04 11:34:28 编辑:篆字君 来源:篆体字网

二 安装

安装requests-html非常简单,一行命令即可做到。需要注意一点就是,requests-html只支持Python 3.6或以上的版本,所以使用老版本的Python的同学需要更新一下Python版本了。

#pip3 install requests-html

三 如何使用requests-html?

在我们学爬虫程序的时候用得最多的请求库就是requests与urllib,但问题是这些包只给我们提供了如何去目标站点发送请求,然后获取响应数据,接着再利用bs4或xpath解析库才能提取我们需要的数据。

以往爬虫的请求与解析

而在requests-html里面只需要一步就可以完成而且可以直接进行js渲染!requests的作者Kenneth Reitz 开发的requests-html 爬虫包 是基于现有的框架 PyQuery、Requests、lxml、beautifulsoup4等库进行了二次封装,作者将Requests的简单,便捷,强大又做了一次升级。

requests-html和其他解析HTML库最大的不同点在于HTML解析库一般都是专用的,所以我们需要用另一个HTTP库先把网页下载下来,然后传给那些HTML解析库。而requests-html自带了这个功能,所以在爬取网页等方面非常方便。

1、基本使用

from requests_html import HTMLSession

# 获取请求对象
session=HTMLSession()

# 往新浪新闻主页发送get请求
sina=session.get('https://news.sina.com.cn/')
# print(sina.status_code)
sina.encoding="utf-8'

# 获取响应文本信息,与requests无区别

print(sina.text)

2、获取链接(links与abolute_links)

links返回的结果absolute_links返回的结果

from requests_html import HTMLSession

# 获取请求对象
session=HTMLSession()

# 往京东主页发送get请求
jd=session.get('https://jd.com/')

# 得到京东主页所有的链接,返回的是一个set集合
print(jd.html.links)
print('*' * 1000)

# 若获取的链接中有相对路径,我们还可以通过absolute_links获取所有绝对链接
print(jd.html.absolute_links)

3、CSS选择器与XPATH

request-html支持CSS选择器和XPATH两种语法来选取HTML元素。首先先来看看CSS选择器语法,它需要使用HTML的find函数来查找元素。

'''  CSS选择器 and XPATH   1.通过css选择器选取一个Element对象   2.获取一个Element对象内的文本内容   3.获取一个Element对象的所有attributes    4.渲染出一个Element对象的HTML内容   5.获取Element对象内的特定子Element对象,返回列表   6.在获取的页面中通过search查找文本    7.支持XPath    8.获取到只包含某些文本的Element对象'''

view code

四 支持JavaScript

支持JavaScript是我觉得作者更新后最为牛逼的一个地方,但是需要在第一次执行render的时候下载chromeium,然后通过它来执行js代码。

1、render的使用

from requests_html import HTMLSession

session=HTMLSession()

url="http://www.win4000.com/'

obj=session.get(url)

obj.encoding="utf-8'

obj.html.render()

注意:第一次运行render()方法时,它会将Chromium下载到您的主目录中(例如~/.pyppeteer/)。这种情况只发生一次。

2、 下载Chromeium问题

因为是从国外的站点下载几分钟才3%,实在是太慢了。所以我们需要通过国内的镜像去下载!需要做以下几步:

手动下载Chrome
先去国内源下载自己需要的版本,地址:https://npm.taobao.org/mirrors/chromium-browser-snapshots/

修改chromeium_downloader.py文件
下载后之后解压后,进入python安装目录下的\Lib\site-packages\pyppeteer目录, 并打开chromium_downloader.py文件。

View Code

五 自定义User-Agent

有些网站会使用User-Agent来识别客户端类型,有时候需要伪造UA来实现某些操作。如果查看文档的话会发现上的很多请求方法都有一个额外的参数,这个参数用来向底层的请求传递额外参数。我们先向网站发送一个请求,看看返回的网站信息。

from requests_html import HTMLSession# pprint可以把数据打印得更整齐from pprint import pprintimport jsonget_url="http://httpbin.org/get'

session=HTMLSession()

# 返回的是当前系统的headers信息
res=session.get(get_url)
pprint(json.loads(res.html.html))

# 可以在发送请求的时候更换user-agent
ua="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0'
post_url="http://httpbin.org/get'
res=session.get(post_url, headers={'user-agent': ua})
pprint(json.loads(res.html.html))
# 如果你有需要可以在header中修改其他参数。

六 模拟表单提交(POST)

一整套的HTTP方法,包括get、post、delete等, 对应HTTP中各个方法。

# 表单登录r=session.post('http://httpbin.org/post', data={'username': 'tank_jam', 'password': 'tank9527'})pprint(json.loads(r.html.html))''' # 打印结果{'args': {}, 'data': '', 'files': {}, 'form': {'password': 'tank9527', 'username': 'tank_jam'}, 'headers': {'Accept': '**', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'close', 'Host': 'httpbin.org', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) ' 'AppleWebKit/603.3.8 (KHTML, like Gecko) ' 'Version/10.1.2 Safari/603.3.8'}, 'origin': '110.18.237.233', 'url': 'http://httpbin.org/get'}

可以看到UA是requests-html自带的UA,下面换一个UA:

ua="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0'r=session.get('http://httpbin.org/get', headers={'user-agent': ua})pprint(json.loads(r.html.html))

可以看到UA确实发生了变化:

{'args': {}, 'headers': {'Accept': '**', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'close', 'Content-Length': '29', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) ' 'AppleWebKit/603.3.8 (KHTML, like Gecko) ' 'Version/10.1.2 Safari/603.3.8'}, 'json': None, 'origin': '110.18.237.233', 'url': 'http://httpbin.org/post'}

如果有上传文件的需要,做法也是类似的。如果了解过requests库的同学可能对这里的做法比较熟悉,没有错,这其实就是requests的用法。requests-html通过暴露的方法,让我们可以对请求进行定制,将额外参数直接传递给底层的requests方法。所以如果有什么疑问的话,直接去看requests文档就好了。

Copyright:2021-2023 篆体字转换器 www.dddtedu.com All rights reserved.