# | Python爬虫库 | 2024年8月2日 |
---|---|---|
1 | Requests | Kenneth Reitz 大神的成名之作,如果想读 Python 源码的话,那一定要看,感受一下什么是真正的 Pythonic 代码。最初于2012年发布。它是一个简单而优雅的HTTP库,可用于发送HTTP/1.1请求,并处理响应。Requests支持HTTP和HTTPS,可以发送GET、POST、PUT、DELETE和HEAD等请求。它还提供了方便的方法来处理HTTP头、Cookie、认证和代理等功能。Requests还支持会话对象和持久连接,以提高性能和效率。 |
2 | Requests-HTML | Requests-HTML是由Kenneth Reitz编写的Python库,最初于2018年发布。它是基于Requests和PyQuery库的HTML解析器,可以方便地从网站中提取和处理数据。Requests-HTML提供了一组API,用于发送HTTP请求、解析HTML和提取数据等操作。它支持各种HTTP请求方法、会话管理、代理设置等功能,并提供了一些方便的方法来访问和处理HTML文档中的元素和属性。 |
3 | BeautifulSoup | BeautifulSoup是由Leonard Richardson编写的Python库,最初于2004年发布。它允许用户解析和遍历HTML和XML文档,并从中提取数据。BeautifulSoup支持多种解析器,包括Python标准库中的HTML解析器和lxml解析器。它还提供了一些简单而实用的方法来遍历文档树,包括搜索和遍历标签、文本、注释和属性。此外,BeautifulSoup还具有容错能力,可以处理损坏的HTML或XML。被广泛用于数据挖掘、网络爬虫和自然语言处理等领域。 |
4 | Scrapy | 由Pablo Hoffman和其他开发者编写的Python库,最初于2008年发布。它是一个基于事件驱动的网络爬虫框架,用于快速、高效地提取结构化数据。Scrapy支持异步网络I/O和多线程,可以轻松处理数百个并发请求。它还提供了灵活的数据提取机制,包括XPath和CSS选择器等。此外,Scrapy还支持多种数据存储方式,包括CSV、JSON和XML等格式。 |
5 | Scrapy-Redis | Scrapy-Redis是由Rolando Espinoza La fuente编写的Scrapy插件,最初于2013年发布。它提供了一组API,用于将Scrapy与Redis数据库集成,实现分布式爬取和数据存储。Scrapy-Redis可以将爬取请求和数据存储到Redis中,并支持多个爬虫进程同时从Redis中获取任务和数据。它还提供了一些方便的方法来控制爬虫的并发度、优先级和重试次数等参数。 |
6 | Scrapy-Splash | Scrapy-Splash是由Scrapinghub公司开发的Scrapy插件,最初于2014年发布。它提供了一组API,用于将Scrapy与Splash浏览器渲染服务集成,实现JavaScript动态渲染页面的爬取。Scrapy-Splash可以发送HTTP请求到Splash服务,并解析Splash返回的HTML文档,支持JavaScript动态渲染的页面爬取和数据提取。它还提供了一些方便的方法来控制页面渲染、等待时间和JavaScript脚本的执行等参数。由于其支持JavaScript动态渲染的页面爬取功能,Scrapy-Splash被广泛用于爬取动态页面、处理JavaScript脚本和渲染页面等领域。 |
7 | Selenium | Selenium是由Jason Huggins编写的Python库,最初于2004年发布。它是一个自动化测试工具,可以模拟用户在浏览器中的操作。Selenium支持多种浏览器,包括Chrome、Firefox、Safari和Edge等。它提供了一组API,用于模拟用户在浏览器中的点击、输入、提交和导航等操作。此外,Selenium还支持处理JavaScript、Cookie和页面弹出窗口等功能。 |
8 | SeleniumBase | 功能全面的浏览器自动化框架。该项目是基于 Selenium 的 Python 自动化测试框架,集成了爬虫、自动化测试和生成报告等多种功能。它提供了丰富的示例,并且独特的 UC 模式,可以帮助开发者在进行浏览器自动化操作时避免被检测出来。 |
9 | helium | 基于 Selenium 的轻量级 Python 库,它通过提供更高级和易用的 API,让用 Python 编写浏览器自动化脚本变得更加简单和方便,支持 Chrome 和 Firefox 浏览器。它的主要用途是简化和加速Web自动化任务。Helium的API比Selenium更高级,可以通过用户可见的标签来引用网页元素,而不需要使用HTML ID、XPath或CSS选择器。这使得Helium脚本通常比Selenium脚本短30-50%,并且更易读、更稳定。Helium项目由Michael Herrmann开发。Michael Herrmann最初在2013年为波兰的一家IT初创公司BugFree Software开发了Helium。公司在2019年底关闭后,他将Helium开源并进行了现代化改造,使其适合开源社区使用。 |
10 | undetected-chromedriver | 一个经过优化的 Selenium WebDriver 补丁,专门用于防止浏览器自动化过程中,触发反机器人机制。它能够隐藏浏览器特征(指纹),使用起来十分方便,就像一个 Python 的第三方库一样。主要用途是: 绕过反bot系统的检测,如Distill Network、Imperva、DataDome、Botprotect.io等。 自动下载并修补Chromedriver二进制文件。 提供一个更难被检测到的自动化浏览器环境。 使用场景 该项目适用于以下场景: Web爬虫和数据采集:可以绕过网站的反爬虫措施,更容易获取数据。 自动化测试:对于有反bot检测的网站,可以更稳定地进行自动化测试。 模拟真实用户行为:在需要避免被识别为自动化程序的场景下使用。 研究和分析反bot系统:可用于研究各种反自动化技术。 需要匿名或隐蔽进行web自动化的场景。 |
11 | Html5lib | 一个用于解析HTML文档的Python库,最初由James Graham编写,于2007年发布。它支持解析HTML和XML文档,并根据HTML5规范解析和序列化文档。Html5lib提供了一个可扩展的DOM模型,支持基于事件的解析,支持处理浏览器的恶意标记,并在解析过程中尽可能地修复文档结构。它还支持流式处理,可以高效地处理大型HTML文档。 |
12 | PyQuery | PyQuery是由Martin Blais编写的Python库,最初于2008年发布。它是一个类似于jQuery的解析库,用于解析HTML和XML文档,并提供了类似于jQuery的语法来进行数据提取和操作。PyQuery支持CSS选择器和XPath表达式,可以轻松地从HTML和XML文档中提取数据。此外,PyQuery还提供了一些方便的方法来处理HTML元素,例如添加、删除和修改等操作。 |
13 | Lxml | 由Stefan Behnel和其他开发者编写的Python库,最初于2004年发布。它是一个高性能的XML和HTML解析器,采用了C语言实现,具有较高的解析速度和内存效率。Lxml提供了一组API,用于解析和操作XML和HTML文档。它支持XPath和CSS选择器等高级选择器,可以轻松地从文档中提取数据。此外,Lxml还支持XML和HTML序列化、校验和转换等功能。 |
14 | Feedparser | Feedparser是由Mark Pilgrim编写的Python库,最初于2003年发布。它是一个通用的RSS和Atom解析器,可以从这些博客、新闻和其他信息源中获取数据。Feedparser支持多种格式的RSS和Atom,包括RSS 1.0、RSS 2.0、Atom 0.3和Atom 1.0等。它提供了一组API,用于解析和处理这些格式的数据,并提供了一些方便的方法来访问和处理这些数据。 |
15 | MechanicalSoup | MechanicalSoup是由Hickford和Drew Perttula编写的Python库,最初于2017年发布。它是一个简单易用的自动化浏览器库,用于模拟用户在网站上的行为,例如提交表单、点击按钮和浏览页面等操作。MechanicalSoup使用BeautifulSoup和Requests库,可以方便地从网站中提取和处理数据。它提供了一组API,用于模拟用户在网站上的行为,并获取和处理网站中的数据。 |
16 | PySpider | 一个Python开发的强大的网络爬虫框架,由Han Fei编写。它提供了一种简单而灵活的方式来爬取各种网站,并能够处理数据提取、数据清洗和数据存储等任务。PySpider采用了异步的方式进行爬取,并且具有良好的可扩展性和可配置性。 PySpider框架提供了一个交互式的Web界面,可以用于管理和监控爬虫任务。用户可以在Web界面上添加、编辑和删除爬虫任务,并且可以查看爬虫任务的状态、日志和错误信息等。 |
17 | Pyppeteer | 由miyakogi编写的Python库,最初于2018年发布。它提供了一组API,用于调用Headless Chrome浏览器实现JavaScript动态渲染页面的爬取。Pyppeteer可以发送HTTP请求到Chrome浏览器,并解析Chrome返回的HTML文档,支持JavaScript动态渲染的页面爬取和数据提取。它还提供了一些方便的方法来控制页面渲染、等待时间和JavaScript脚本的执行等参数。 |
18 | Grab | Grab是一个Python爬虫框架,最初由Gregory Petukhov编写,于2007年发布。它支持并发爬取、代理设置、cookie处理、文件下载、JavaScript渲染等常用的爬虫功能,并提供了一组方便的API,使得爬虫开发变得更加简单和快速。Grab还支持多种网络协议,包括HTTP、FTP和SMTP等,并支持多种HTML解析器,包括lxml和BeautifulSoup等。由于其支持并发爬取、代理设置和cookie处理等功能,Grab被广泛用于爬取大量数据、爬取动态页面和爬取多个网站等领域。 |
19 | Robobrowser | RoboBrowser是一个Python库,用于模拟浏览器操作,最初由Johannes Bader编写,于2014年发布。它基于Python的Requests库和BeautifulSoup库,支持HTTP请求、表单提交、HTML解析等功能,并提供了简单易用的API,使得爬虫开发变得更加简单和快速。 |
20 | Twisted | 一个事件驱动的Python网络框架,由Glyph Lefkowitz和其他开发人员编写。它最初于2002年发布,是一个非常成熟的网络编程库。Twisted为开发人员提供了一个强大的工具集,可以轻松地编写高性能、可伸缩、异步和可重用的网络应用程序。 Twisted框架可以支持TCP、UDP、SSL/TLS、SSH、IMAP、POP3、SMTP、HTTP、XMPP等协议,可以轻松地处理各种网络应用程序。它支持异步I/O、协议实现、事件驱动、信号处理、定时器、日志、单元测试等功能。Twisted还具有非常灵活的插件架构,可以支持各种插件。 |
21 | Web2py | Web2py是一个全栈Python Web应用程序开发框架,它由Massimo Di Pierro于2007年开发。该框架旨在提供一个易于使用、安全、快速、可扩展的方式来构建Web应用程序,可以用于构建简单的网站、复杂的企业应用和大规模的互联网应用。Web2py有一个自包含的Web服务器,因此无需额外的配置即可开始开发。 Web2py支持多种数据库后端,包括MySQL、PostgreSQL、SQLite和Microsoft SQL Server。它还提供了内置的安全机制来防止SQL注入、跨站点请求伪造(CSRF)和脚本注入攻击等。Web2py还提供了一个简单易用的管理界面,可用于管理应用程序、数据库和Web服务器。 |
22 | aiohttp | 提供了一个异步HTTP客户端和服务器,使得Python开发者能够使用异步编程的方式处理HTTP请求和响应。aiohttp采用了Python 3.5+引入的协程和async/await语法,通过使用asyncio库提供的事件循环来实现异步处理。 |
23 | undetected-chromedriver | 绕过反爬检测的 Python 库。这是一个经过优化的 Selenium WebDriver 补丁,专门用于防止浏览器自动化过程中,触发反机器人机制。它能够隐藏浏览器特征(指纹),使用起来十分方便,就像一个 Python 的第三方库一样。 |
24 | crawlee-python | 一个强大而灵活的工具,用于构建可靠的网络爬虫和数据提取系统。它支持从网站提取数据,下载HTML、PDF、JPG、PNG等文件,并可用于为AI、LLMs、RAG或GPTs等应用提供数据。特点: 支持HTTP和无头浏览器爬取 自动并行爬取 使用Python类型提示,提高开发体验 自动重试和错误处理 集成代理轮换和会话管理 可配置的请求路由 持久化URL队列 可插拔的数据存储系统 支持BeautifulSoup和Playwright 支持有头和无头模式 Crawlee-Python为开发者提供了一个全面的解决方案,可以处理从简单的HTML页面到复杂的JavaScript驱动的网站。它的设计目标是帮助开发者快速构建可靠的爬虫,同时提供足够的灵活性来应对各种网络抓取挑战。 |
使用PYTHON爬虫的通常有以下几步:
发送HTTP请求:使用Python的requests库发送HTTP请求,获取目标网站的HTML页面或其他类型的数据。
解析HTML页面:使用解析库(例如BeautifulSoup或lxml)对获取的HTML页面进行解析,提取目标数据。
数据处理和存储:对提取的数据进行处理和清洗,并将其保存到本地文件或数据库中。
避免反爬虫:在爬取数据时需要遵守一些规范和约定,例如设置访问间隔、避免爬取机密信息和数据、使用真实的身份和信息进行爬取等。常用的技术包括设置请求头信息、使用代理IP、使用验证码识别技术等。
每一步都会使用到的库有:
发送HTTP请求:requests库是Python中常用的HTTP库,可以用于发送HTTP请求并获取响应。
解析HTML页面:使用BeautifulSoup库或lxml库对HTML页面进行解析,提取目标数据。其中,BeautifulSoup库是Python中最常用的HTML解析库之一,它提供了丰富的API和强大的选择器功能,能够轻松地定位HTML节点并提取所需数据。
数据处理和存储:Python自带的数据处理和存储库非常丰富,例如:pandas库可以用于数据处理和分析;numpy库可以用于数学计算和处理;sqlite3库可以用于数据库操作等等。除此之外,还有其他的一些第三方库,例如:SQLAlchemy库可以用于ORM操作,redis库可以用于缓存操作等等。
需要注意的是,不同的爬虫任务会涉及到不同的库和技术,例如:爬取动态网站时需要使用Selenium库;爬取API数据时需要使用requests库;爬取图片和视频时需要使用OpenCV库等等。因此,在具体实现时需要根据任务需求选择适合的库和技术。