Python网页解析库:用requests-html爬取网页

Python网页解析库:用requests-html爬取网页,第1张

Python 中可以进行网页解析的库有很多,常见的有 BeautifulSoup 和 lxml 等。在网上玩爬虫的文章通常都是介绍 BeautifulSoup 这个库,我平常也是常用这个库,最近用 Xpath 用得比较多,使用 BeautifulSoup 就不大习惯,很久之前就知道 Reitz 大神出了一个叫 Requests-HTML 的库,一直没有兴趣看,这回可算歹着机会用一下了。

使用 pip install requests-html 安装,上手和 Reitz 的其他库一样,轻松简单:

这个库是在 requests 库上实现的,r 得到的结果是 Response 对象下面的一个子类,多个一个 html 的属性。所以 requests 库的响应对象可以进行什么 *** 作,这个 r 也都可以。如果需要解析网页,直接获取响应对象的 html 属性:

不得不膜拜 Reitz 大神太会组装技术了。实际上 HTMLSession 是继承自 requestsSession 这个核心类,然后将 requestsSession 类里的 requests 方法改写,返回自己的一个 HTMLResponse 对象,这个类又是继承自 requestsResponse,只是多加了一个 _from_response 的方法来构造实例:

之后在 HTMLResponse 里定义属性方法 html,就可以通过 html 属性访问了,实现也就是组装 PyQuery 来干。核心的解析类也大多是使用 PyQuery 和 lxml 来做解析,简化了名称,挺讨巧的。

元素定位可以选择两种方式:

方法名非常简单,符合 Python 优雅的风格,这里不妨对这两种方式简单的说明:

定位到元素以后势必要获取元素里面的内容和属性相关数据,获取文本:

获取元素的属性:

还可以通过模式来匹配对应的内容:

这个功能看起来比较鸡肋,可以深入研究优化一下,说不定能在 github 上混个提交。

除了一些基础 *** 作,这个库还提供了一些人性化的 *** 作。比如一键获取网页的所有超链接,这对于整站爬虫应该是个福音,URL 管理比较方便:

内容页面通常都是分页的,一次抓取不了太多,这个库可以获取分页信息:

结果如下:

通过迭代器实现了智能发现分页,这个迭代器里面会用一个叫 _next 的方法,贴一段源码感受下:

通过查找 a 标签里面是否含有指定的文本来判断是不是有下一页,通常我们的下一页都会通过 下一页 或者 加载更多 来引导,他就是利用这个标志来进行判断。默认的以列表形式存在全局: ['next','more','older'] 。我个人认为这种方式非常不灵活,几乎没有扩展性。 感兴趣的可以往 github 上提交代码优化。

也许是考虑到了现在 js 的一些异步加载,这个库支持 js 运行时,官方说明如下:

使用非常简单,直接调用以下方法:

第一次使用的时候会下载 Chromium,不过国内你懂的,自己想办法去下吧,就不要等它自己下载了。render 函数可以使用 js 脚本来 *** 作页面,滚动 *** 作单独做了参数。这对于上拉加载等新式页面是非常友好的。

有时候需要处理很多请求,显然,一个一个去处理是要花费很多时间的

我们就需要用到并发的方式,python并发请求的方法很多,从简单到复杂。

接口参数狠简单,headers、body,带上cookie就好了

因为是查询一组数据,所有先把查询对象变量化(可以写到excel里去读,这里就不介绍了,提供这个思路)

构造头信息,直接复制

执行请求步骤,这一步是核心内容

git地址:>

利用 pip 安装

运行结果

结果

结果

1requests默认自带的Accept-Encoding导致或者新浪默认发送的就是压缩之后的网页

2但是为什么contentread()没有问题,因为requests,自带解压压缩网页的功能

3当收到一个响应时,Requests 会猜测响应的编码方式,用于在你调用responsetext 方法时对响应进行解码。Requests 首先在 >

之前给大家介绍了Python爬虫库requests的发送请求传参等使用方法,在requests模块中,它的 *** 作方法可以有很多,比如获取响应内容、响应状态码、响应头等相关信息,下面一起来学习这篇有关“Python爬虫库requests如何获取响应内容?requests模块可以获取到哪些响应内容?”的文章吧,希望对大家的学习有更多的帮助。

我们在使用模块之前,都会对它进行导入 *** 作,requests模块也不例外,导入的方法如下:

import requests

一、获取响应的内容

在Python不同的类型中,响应的内容也会有所不同,而在我们对网页发送一个请求的时候,服务器就会给我们返回响应的内容,并且使用requests它就会对我们的这个内容进行自动解码 *** 作。

1、文本响应内容

Requests库中,它可以对一个文本的响应进行获取,代码如下:

r = requestsget('>

你好,

获取某个url请求的响应,现在python比较受欢迎的库就是requests了,我就拿requests这个库给你举个简单的例子吧:

requests库最简单的功能应该就是获取某个url请求了,说白了就是使到某个页面的源码, 我在本地搭了个web服务器,在根目录下有一个examplehtml文件,我们在浏览器中访问这个页面会显示 "Hello Friend":

examplehtml文件内容:

访问该文件浏览器的输出:

-------------

接下来我们就使用python的requests库来获取examplehtml的内容:

从上到下四个红框的意思:

导入requests库;

使用requests库的get()方法访问url: >

使用response对象的text属性来获取刚刚访问url的响应内容;

因为responsetext输出的内容没有格式化,所以这里又使用print()函数打印一下,这样看起来更清晰一点

最后我们可以再导入像re这样的正则库去responsetext中拿到我们想得到的内容

一点点建议:

requests库很常用,但建议先稍系统的学一下该库常用的方法和属性,有一个大概的了解,再去找简单的例子练练手,一点点找感觉这样会好一点像requests官方文档应该有中文的,把tutorial看完了简单的一些 *** 作就不在话下了如果你没有学习相应要用的库,然后就按自己的想法去 *** 作,步步都是坎,这样不仅耗时长,而且长时间没有进展会很打击积极性的

希望对你有帮助,欢迎追问

以上就是关于Python网页解析库:用requests-html爬取网页全部的内容,包括:Python网页解析库:用requests-html爬取网页、python go语言版本的requests(grequests)、20.Python使用Requests请求网页等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9325940.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存