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 是继承自 requests.Session 这个核心类,然后将 requests.Session 类里的 requests 方法改写,返回自己的一个 HTMLResponse 对象,这个类又是继承自 requests.Response,只是多加了一个 _from_response 的方法来构造实例:

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

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

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

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

获取元素的属性:

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

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

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

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

结果如下:

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

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

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

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

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

网络站点爬取

爬取网络站点的库Scrapy – 一个快速高级的屏幕爬取及网页采集框架。cola – 一个分布式爬虫框架。Demiurge – 基于PyQuery 的爬虫微型框架。feedparser – 通用 feed 解析器。Grab – 站点爬取框架。MechanicalSoup – 用于自动和网络站点交互的 Python 库。portia – Scrapy 可视化爬取。pyspider – 一个强大的爬虫系统。RoboBrowser – 一个简单的,Python 风格的库,用来浏览网站,而不需要一个独立安装的浏览器。

交互式解析器

交互式 Python 解析器。

IPython – 功能丰富的工具,非常有效的使用交互式 Python。

bpython- 界面丰富的 Python 解析器。

ptpython – 高级交互式Python解析器, 构建于python-prompt-toolkit 之上。

图像处理

用来 *** 作图像的库.

pillow – Pillow 是一个更加易用版的 PIL。

hmap – 图像直方图映射。

imgSeek – 一个使用视觉相似性搜索一组图片集合的项目。

nude.py – 裸体检测。

pyBarcode – 不借助 PIL 库在 Python 程序中生成条形码。

pygram – 类似 Instagram 的图像滤镜。

python-qrcode – 一个纯 Python 实现的二维码生成器。

Quads – 基于四叉树的计算机艺术。

scikit-image – 一个用于(科学)图像处理的 Python 库。

thumbor – 一个小型图像服务,具有剪裁,尺寸重设和翻转功能。

wand – MagickWand的Python 绑定。MagickWand 是 ImageMagick的 C API 。

HTTP

使用HTTP的库。

requests – 人性化的HTTP请求库。

grequests – requests 库 + gevent ,用于异步 HTTP 请求.

httplib2 – 全面的 HTTP 客户端库。

treq – 类似 requests 的Python API 构建于 Twisted HTTP 客户端之上。

urllib3 – 一个具有线程安全连接池,支持文件 post,清晰友好的 HTTP 库。

数据库

Python实现的数据库。

pickleDB – 一个简单,轻量级键值储存数据库。

PipelineDB – 流式 SQL 数据库。

TinyDB – 一个微型的,面向文档型数据库。

ZODB – 一个 Python 原生对象数据库。一个键值和对象图数据库。

Web 框架

全栈 web 框架。

Django – Python 界最流行的 web 框架。

awesome-django系列

Flask – 一个 Python 微型框架。

https://github.com/humiaozuzu/awesome-flask系列

Pyramid – 一个小巧,快速,接地气的开源Python web 框架。

awesome-pyramid系列

Bottle – 一个快速小巧,轻量级的 WSGI 微型 web 框架。

CherryPy – 一个极简的 Python web 框架,服从 HTTP/1.1 协议且具有WSGI 线程池。

TurboGears – 一个可以扩展为全栈解决方案的微型框架。

web.py – 一个 Python 的 web 框架,既简单,又强大。

web2py – 一个全栈 web 框架和平台,专注于简单易用。

Tornado – 一个web 框架和异步网络库。

HTML处理

处理 HTML和XML的库。

BeautifulSoup – 以 Python 风格的方式来对 HTML 或 XML 进行迭代,搜索和修改。

bleach – 一个基于白名单的 HTML 清理和文本链接库。

cssutils – 一个 Python 的 CSS 库。

html5lib – 一个兼容标准的 HTML 文档和片段解析及序列化库。

lxml – 一个非常快速,简单易用,功能齐全的库,用来处理 HTML 和 XML。

MarkupSafe – 为Python 实现 XML/HTML/XHTML 标记安全字符串。

pyquery – 一个解析 HTML 的库,类似 jQuery。

untangle – 将XML文档转换为Python对象,使其可以方便的访问。

xhtml2pdf – HTML/CSS 转 PDF 工具。

xmltodict – 像处理 JSON 一样处理 XML。

游戏开发

超赞的游戏开发库。

Cocos2d – cocos2d 是一个用来开发 2D 游戏, 示例和其他图形/交互应用的框架。基于 pyglet。

Panda3D – 由迪士尼开发的 3D 游戏引擎,并由卡内基梅陇娱乐技术中心负责维护。使用C++编写, 针对 Python 进行了完全的封装。

Pygame – Pygame 是一组 Python 模块,用来编写游戏。

PyOgre – Ogre 3D 渲染引擎的 Python 绑定,可以用来开发游戏和仿真程序等任何 3D 应用。

PyOpenGL – OpenGL 的 Python 绑定及其相关 APIs。

PySDL2 – SDL2 库的封装,基于 ctypes。

RenPy – 一个视觉小说(visual novel)引擎。

一、 请求库

1. requests

requests 类库是第三方库,比 Python 自带的 urllib 类库使用方便和

2. selenium

利用它执行浏览器动作,模拟 *** 作。

3. chromedriver

安装chromedriver来驱动chrome。

4. aiohttp

aiohttp是异步请求库,抓取数据时可以提升效率。

二、 解析库

1. lxml

lxml是Python的一个解析库,支持解析HTML和XML,支持XPath的解析方式,而且解析效率非常高。

2. beautifulsoup4

Beautiful Soup可以使用它更方便的从 HTML 文档中提取数据。

3. pyquery

pyquery是一个网页解析库,采用类似jquery的语法来解析HTML文档。

三、 存储库

1. mysql

2. mongodb

3. redis

四、 爬虫框架scrapy

Scrapy 是一套异步处理框架,纯python实现的爬虫框架,用来抓取网页内容以及各种图片

需要先安装scrapy基本依赖库,比如lxml、pyOpenSSL、Twisted


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

原文地址: https://outofmemory.cn/zaji/8335022.html

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

发表评论

登录后才能评论

评论列表(0条)

保存