返回顶部
首页 > 资讯 > 后端开发 > Python >Python用requests-html爬取网页的实现
  • 653
分享到

Python用requests-html爬取网页的实现

2024-04-02 19:04:59 653人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录1. 开始2. 原理3. 元素定位CSS 选择器4. CSS 简单规则5. Xpath简单规则6. 人性化操作7. 加载 js8. 总结1. 开始 python 中可以进行网页解

1. 开始

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

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

from requests_html import HTMLSession
session = HTMLSession()

r = session.get('https://www.Python.org/jobs/')

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

r.html

2. 原理

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

class HTMLSession(requests.Session):
    # 重写 request 方法,返回 HTMLResponse 构造
    def request(self, *args, **kwargs) -> HTMLResponse:
        r = super(HTMLSession, self).request(*args, **kwargs)
        return HTMLResponse._from_response(r, self)
class HTMLResponse(requests.Response):
	# 构造器
    @claSSMethod
    def _from_response(cls, response, session: UNIOn['HTMLSession', 'AsyncHTMLSession']):
        html_r = cls(session=session)
        html_r.__dict__.update(response.__dict__)
        return html_r

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

3. 元素定位

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

css 选择器

  • css选择器
  • xpath
# css 获取有多少个职位
jobs = r.html.find("h1.call-to-action")
# xpath 获取
jobs = r.html.xpath("//h1[@class='call-to-action']")

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

4. CSS 简单规则

  • 标签名 h1
  • id 使用 #id 表示
  • class 使用 .class_name 表示
  • 谓语表示:h1[prop=value]

5. Xpath简单规则

  • 路径 // 或者 /
  • 标签名
  • 谓语 [@prop=value]
  • 轴定位 名称::元素名[谓语]

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

jobs.text
jobs.full_text

获取元素的属性:

attrs = jobs.attrs
value = attrs.get("key")

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

## 找某些内容匹配
r.html.search("Python {}")
r.html.search_all()

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

6. 人性化操作

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

r.html.absolute_links
r.html.links

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

print(r.html)
# 比较一下
for url in r.html:
    print(url)

结果如下:

# print(r.html)
<HTML url='Https://www.python.org/jobs/'>
# for
<HTML url='https://www.python.org/jobs/'>
<HTML url='https://www.python.org/jobs/?page=2'>
<HTML url='https://www.python.org/jobs/?page=3'>
<HTML url='https://www.python.org/jobs/?page=4'>
<HTML url='https://www.python.org/jobs/?page=5'>

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

def get_next():
	candidates = self.find('a', containing=next_symbol)

	for candidate in candidates:
		if candidate.attrs.get('href'):
			# Support 'next' rel (e.g. reddit).
			if 'next' in candidate.attrs.get('rel', []):
				return candidate.attrs['href']

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

7. 加载 js

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

Reloads the response in Chromium, and replaces HTML content
with an updated version, with javascript executed.

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

r.html.render()

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

8. 总结

Reitz 大神设计出来的东西还是一如既往的简单好用,自己不多做,大多用别人的东西组装,简化 api。真是够人性。不过有的地方还是优化空间,希望有兴趣和精力的童鞋去 github 上关注一下这个项目

到此这篇关于Python用requests-html爬取网页的实现的文章就介绍到这了,更多相关Python requests-html爬取内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python用requests-html爬取网页的实现

本文链接: https://lsjlt.com/news/119491.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python用requests-html爬取网页的实现
    目录1. 开始2. 原理3. 元素定位css 选择器4. CSS 简单规则5. Xpath简单规则6. 人性化操作7. 加载 js8. 总结1. 开始 Python 中可以进行网页解...
    99+
    2024-04-02
  • Python用requests模块实现动态网页爬虫
    目录前言开发工具环境搭建总结前言 Python爬虫实战,requests模块,Python实现动态网页爬虫 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块:...
    99+
    2024-04-02
  • Python怎么用requests模块实现动态网页爬虫
    小编给大家分享一下Python怎么用requests模块实现动态网页爬虫,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!开发工具Python版本: 3.6.4相关模块:urllib模块;random模块;requests模块...
    99+
    2023-06-29
  • Python爬虫之使用BeautifulSoup和Requests抓取网页数据
    目录一、简介二、网络爬虫的基本概念三、Beautiful Soup 和 Requests 库简介四、选择一个目标网站五、使用 Requests 获取网页内容六、使用 Beautifu...
    99+
    2023-05-14
    Python爬虫 使用BeautifulSoup和Requests Python爬虫抓取网页数据
  • 利用requests+BeautifulSoup爬取网页关键信息
    一、requests库基础知识Requests的方法  requests库的response对象二、爬取网站所需信息访问网站,如图1-1所示:图1-1点击子页面,审查网页元素,部分内容如图1-2所示:图1-2实现代码如下...
    99+
    2023-06-02
  • python爬虫之利用Selenium+Requests爬取拉勾网
    目录一、前言二、分析url三、获取所有城市和页数四、生成params参数五、获取数据六、总结一、前言 利用selenium+requests访问页面爬取拉勾网招聘信息 二、分析url...
    99+
    2024-04-02
  • Python爬虫之怎么使用BeautifulSoup和Requests抓取网页数据
    这篇文章主要介绍了Python爬虫之怎么使用BeautifulSoup和Requests抓取网页数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python爬虫之怎么使用BeautifulSoup和Reque...
    99+
    2023-07-05
  • 怎么用Web Scraping爬取HTML网页
    这篇文章主要讲解了“怎么用Web Scraping爬取HTML网页”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Web Scraping爬取HTML网...
    99+
    2024-04-02
  • Python 爬取网页中JavaScri
    当我们进行网页爬虫时,我们会利用一定的规则从返回的 HTML 数据中提取出有效的信息。但是如果网页中含有 JavaScript 代码,我们必须经过渲染处理才能获得原始数据。此时,如果我们仍采用常规方法从中抓取数据,那么我们将一无所获。那么...
    99+
    2023-01-30
    网页 Python JavaScri
  • 使用 Python 爬取网页数据
    1. 使用 urllib.request 获取网页 urllib 是 Python 內建的 HTTP 库, 使用 urllib 可以只需要很简单的步骤就能高效采集数据; 配合 Beautiful 等 HTML 解析库, 可以编写出用于采集...
    99+
    2023-01-31
    网页 数据 Python
  • Python实战使用Selenium爬取网页数据
    目录一. 什么是Selenium?二. 安装Selenium三. 爬取网页数据四. 模拟用户交互五. 处理动态加载内容1. 显式等待2. 隐式等待六. 小结一. 什么是Seleniu...
    99+
    2023-05-18
    Python Selenium爬取网页数据 Python Selenium
  • Python Requests爬虫中如何求取关键词页面
    小编给大家分享一下Python Requests爬虫中如何求取关键词页面,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!需求:爬取搜狗首页的页面数据imp...
    99+
    2023-06-29
  • Python 基于Selenium实现动态网页信息的爬取
    目录一、Selenium介绍与配置1.Selenium简介2. Selenium+Python环境配置二、网页自动化测试1.启动浏览器并打开百度搜索2.定位元素三、爬取动态网页的名人...
    99+
    2024-04-02
  • Python爬取求职网requests库和BeautifulSoup库使用详解
    目录一、requests库1、requests简介2、安装requests库3、使用requests获取网页数据 我们先导入模块4、总结requests的一些方法二、Beautifu...
    99+
    2024-04-02
  • 如何用python爬取网页数据
    要用Python爬取网页数据,可以使用Python的一些库和模块,例如requests、BeautifulSoup和Scrapy等。...
    99+
    2023-10-12
    python
  • python爬虫入门实战之爬取网页图片
    本篇文章给大家带来了关于Python的相关知识,其中主要整理了爬取网页图片的相关问题,要想高效的获取数据,爬虫是非常好用的,而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程,下面一起来看一下,希望对...
    99+
    2022-07-11
    python
  • Python 爬虫:如何用 BeautifulSoup 爬取网页数据
    在网络时代,数据是最宝贵的资源之一。而爬虫技术就是一种获取数据的重要手段。Python 作为一门高效、易学、易用的编程语言,自然成为了爬虫技术的首选语言之一。而 BeautifulSoup 则是 Py...
    99+
    2023-10-23
    python 爬虫 beautifulsoup
  • python 爬取豆瓣网页的示例
    目录python 语法简要介绍爬取网页解析网页储存网页python作为一种已经广泛传播且相对易学的解释型语言,现如今在各方面都有着广泛的应用。而爬虫则是其最为我们耳熟能详的应用,今天...
    99+
    2024-04-02
  • python爬取网页的操作步骤
    小编给大家分享一下python爬取网页的操作步骤,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!之前在网上也写了不少关于爬虫爬取网页的代码,最近还是想把写的爬虫记录...
    99+
    2023-06-07
  • 使用python爬取网页版QQ空间
    这期内容当中小编将会给大家带来有关使用python爬取网页版QQ空间,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。各类图表的实现效果爬取的说说内容个性化说说内容词云图每年发表说说总数柱状图、每年点赞和评论...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作