链载Ai

标题: 爬虫新宠Crawlee:解锁数据抓取与自动化的超能力 [打印本页]

作者: 链载Ai    时间: 5 小时前
标题: 爬虫新宠Crawlee:解锁数据抓取与自动化的超能力









感谢您抽出

.

.

阅读本文

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;">一、Crawlee:爬虫界的明日之星

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size:14px;margin:0.1em auto 0.5em;border-radius:8px;box-shadow:rgba(0, 0, 0, 0.1) 0px 4px 8px;width:100%;" title="null"/>

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.04em;color: rgb(63, 63, 63);">在数据驱动的时代,网络爬虫和浏览器自动化工具成为了获取信息的得力助手。从学术研究的数据收集,到商业领域的市场情报分析,再到搜索引擎的数据索引,这些工具都发挥着不可或缺的作用。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 2px;border-radius: 4px;">Crawlee作为一款下一代网络爬虫与浏览器自动化工具,正逐渐崭露头角,以其强大的功能和卓越的性能,为开发者们带来了全新的体验。它不仅能够轻松应对复杂的网络环境和反爬虫机制,还提供了简洁高效的编程接口,使得数据抓取和浏览器自动化任务变得更加简单和高效。接下来,让我们一起深入探索ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 2px;border-radius: 4px;">Crawlee的奇妙世界。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;">二、Crawlee 初相识

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding-left: 12px;color: rgb(63, 63, 63);">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: inherit;color: rgb(0, 152, 116);">Crawlee 是什么

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;color: rgb(63, 63, 63);">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size:14px;margin:0.1em auto 0.5em;border-radius:8px;box-shadow:rgba(0, 0, 0, 0.1) 0px 4px 8px;width:100%;" title="null"/>

CrawleeApify团队精心打造的一款开源网络爬虫与浏览器自动化库,它犹如一把万能钥匙,为开发者打开了通往高效数据抓取和浏览器自动化操作的大门。其设计初衷是为了简化和加速网络爬虫及浏览器自动化任务的开发过程,让开发者能够更加专注于业务逻辑的实现,而无需过多地纠结于底层的技术细节。凭借着简洁易用的APICrawlee能够帮助开发者迅速实现网页内容的抓取以及浏览器自动化操作,无论是数据挖掘、自动化测试还是网页监控等领域,它都能大显身手。

Crawlee支持多种编程语言,其中包括广泛使用的JavaScriptPythonTypeScript。这使得不同技术背景的开发者都能轻松上手,根据自己的喜好和项目需求选择合适的语言进行开发。在当今数字化时代,数据的价值不言而喻,Crawlee在数据挖掘领域发挥着重要作用,能够帮助企业从海量的网络数据中提取有价值的信息,为决策提供有力支持;在自动化测试方面,Crawlee可以模拟用户在浏览器中的各种操作,实现对网页应用的自动化测试,提高测试效率和准确性;而在网页监控领域,它能够实时监测网页的变化,及时发现并通知用户,确保网站的正常运行。

为什么选择 Crawlee

在爬虫领域,已经存在着许多优秀的框架,如ScrapyBeautifulSoupSelenium等,那为什么Crawlee能脱颖而出,吸引众多开发者的目光呢?让我们通过对比来一探究竟。

Scrapy是一款强大的Python爬虫框架,它在处理大规模数据抓取任务时表现出色,具有高效的异步处理能力和丰富的中间件扩展。然而,当面对需要与JavaScript动态交互的网页时,Scrapy就显得有些力不从心了。因为它主要侧重于传统的HTTP请求和静态网页的抓取,对于那些依赖JavaScript渲染的动态内容,很难直接获取到完整的数据。

BeautifulSoup则是一个简单易用的HTML/XML解析库,通常与Requests库配合使用。它的优势在于简单上手,能够方便地从HTMLXML文档中提取数据 。但它的功能相对较为单一,主要专注于解析网页结构,对于复杂的爬虫任务,如处理动态内容、自动扩展、代理轮换等,它无法提供全面的支持。

Selenium作为一个浏览器自动化工具,支持多种编程语言,能够模拟用户在浏览器中的操作,处理动态加载内容和复杂用户交互。不过,Selenium在性能方面存在一定的局限性,它的运行速度相对较慢,而且在处理大规模任务时,资源消耗较大。此外,Selenium缺少持久化队列和自动扩展功能,这在一定程度上限制了它在一些场景下的应用。

相比之下,Crawlee的优势就显而易见了。首先,Crawlee在处理动态内容方面具有得天独厚的优势。它基于PlaywrightPuppeteer构建,可以模拟真实用户在浏览器中的操作,如点击、滚动、输入等,能够轻松应对复杂的网页交互场景,如验证码识别、滑动验证等。这使得它在抓取那些依赖JavaScript动态加载的网页时,能够获取到完整且准确的数据。

其次,Crawlee具备自动扩展功能。它可以根据可用的系统资源自动管理并发,从而提高爬虫的效率。在处理大规模抓取任务时,能够根据任务的需求动态调整资源分配,确保任务能够高效、稳定地运行。这种自动扩展的能力,使得Crawlee在面对大量数据抓取任务时,能够充分发挥其性能优势,大大节省了开发时间和资源成本。

再者,Crawlee内置了强大的代理轮换功能。在网络爬虫过程中,使用代理服务器是绕过地理限制、避免IP被封的重要手段之一。Crawlee的代理轮换功能能够智能地管理代理,丢弃经常超时、返回网络错误或不良HTTP代码(如401403)的代理,以保持代理的健康状态,从而提高爬取的稳定性和可靠性。这一功能使得Crawlee在面对各种反爬虫机制时,能够更加灵活地应对,确保爬虫任务的顺利进行。

此外,Crawlee还提供了灵活的队列管理功能,支持多种队列类型,如优先级队列、定时队列等。开发者可以根据需求调整抓取策略,合理安排任务的执行顺序。同时,Crawlee支持将抓取到的数据存储到多种数据库和存储系统中,如MySQLMongoDBElasticsearch等,方便后续的数据处理和分析。丰富的插件生态也是Crawlee的一大亮点,活跃的社区为开发者提供了大量实用插件,如代理插件、数据分析插件等,进一步增强了Crawlee的功能,助力开发者高效完成爬虫项目。

三、Crawlee 实战:从安装到数据爬取

安装 Crawlee

在开始使用Crawlee之前,我们需要先将其安装到我们的开发环境中。Crawlee支持使用pip进行安装,pipPython的包管理工具,它可以帮助我们方便地安装、升级和管理Python包。在安装Crawlee时,我们还需要一并安装Playwright,因为Crawlee是基于Playwright构建的,Playwright提供了对浏览器自动化操作的支持。在命令行中执行以下命令:

# Crawlee 是crawleePyPI 上的软件包。此软件包包含核心功能,而其他功能则作为可选附加功能提供,以尽量减少依赖性和软件包大小。
# 你可以安装具有所有功能的 Crawlee,也可以仅选择所需的功能。要使用pip包管理器安装它
python -m pip install'crawlee[all]'
# 验证是否安装成功
python -c'import crawlee; print(crawlee.__version__)'
# 安装 Playwright
playwright install

在安装过程中,pip会自动下载Crawlee及其依赖项,并将它们安装到Python的环境中。请确保你的Python环境已经正确配置,并且网络连接正常,以避免安装过程中出现问题。如果在安装过程中遇到权限问题,可以尝试使用管理员权限运行命令行,或者使用虚拟环境来隔离项目依赖,避免对系统环境造成影响。安装完成后,我们就可以在Python项目中引入Crawlee,开始我们的数据爬取之旅了。

基本爬虫结构

在使用Crawlee进行数据爬取时,我们需要先了解其基本的爬虫结构。下面我们以爬取某网站文章列表为例,来讲解如何使用Crawlee构建一个简单的爬虫。

首先,我们需要导入Crawlee库以及相关的模块。在Python中,我们可以使用以下代码导入:

fromcrawleeimportRequest,Spider,run_spider

在这里,Request用于定义HTTP请求,Spider是爬虫的基类,我们需要继承它来创建自己的爬虫,run_spider则用于启动爬虫。

接下来,我们创建一个爬虫类,继承自Spider。在这个类中,我们需要定义一个start_requests方法,这个方法用于生成初始的请求。例如:

classArticleSpider(Spider):
asyncdefstart_requests(self):
yieldRequest(url='https://testerroad.com/articles', callback=self.parse_articles)

在这个例子中,我们生成了一个请求,并指定了一个回调函数parse_articles,用于处理请求返回的响应。

然后,我们定义parse_articles方法,这个方法用于解析响应,提取我们需要的数据。例如:

asyncdefparse_articles(self, response):
articles = response.css('div.article')
forarticleinarticles:
title = article.css('h2.title::text').get()
link = article.css('a::attr(href)').get()
yield{
'title': title,
'link': link
}

在这个方法中,我们使用response.css来选择页面中的元素,div.article表示选择所有classarticlediv元素。然后,我们通过css选择器分别提取文章的标题和链接,并将它们作为一个字典返回。这里使用yield关键字,是因为我们可能会提取到多个文章的数据,yield可以将这些数据逐个返回,而不是一次性返回所有数据,这样可以节省内存。

数据爬取实战

下面我们通过一个完整的代码示例,来展示如何使用Crawlee爬取网页内容并将爬取的数据保存,以下是一个使用crawleePlaywrightPython示例,演示如何爬取动态网页(以电商网站商品列表为例)并存储数据。

fromcrawleeimport(
PlaywrightCrawler,
Request,
RequestQueue,
Dataset,
ProxyConfiguration
)
fromplaywright.async_apiimportPage
importasyncio

'''
@Author : TesterRoad
@Time : 2025/3
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''

# 目标网站示例(请替换为实际可爬取的网站)
TARGET_URL ='https://www.testerroad.com.cn/products'

asyncdefhandle_page(page: Page, request: Request):
try:
# 等待商品列表加载完成
awaitpage.wait_for_selector('.product-item', timeout=5000)

# 获取所有商品项
product_items =awaitpage.query_selector_all('.product-item')

results = []
foriteminproduct_items:
# 提取商品数据
title =awaititem.text_content('.product-title')
price =awaititem.text_content('.price')
description =awaititem.text_content('.description')

results.append({
'title': title.strip()iftitleelseNone,
'price': float(price.replace('$',''))ifpriceelseNone,
'description': description.strip()ifdescriptionelseNone,
'url': page.url
})

# 将数据保存到数据集
awaitDataset.push_data(results)

# 处理分页(示例:查找下一页按钮)
next_button =awaitpage.query_selector('.pagination .next')
ifnext_button:
next_url =awaitnext_button.get_attribute('href')
ifnext_url:
awaitRequestQueue.add_request(
Request(url=page.url.split('?')[0] + next_url)
)

exceptExceptionase:
print(f'Error processing{request.url}:{str(e)}')

# 配置爬虫
asyncdefmain():
# 初始化请求队列
request_queue =awaitRequestQueue.open()
awaitrequest_queue.add_request(Request(url=TARGET_URL))

# 代理配置(可选)
proxy_config = ProxyConfiguration({
'proxyGroups': ['RESIDENTIAL']
})

# 创建爬虫实例
crawler = PlaywrightCrawler(
request_queue=request_queue,
handle_page_function=handle_page,
proxy_configuration=proxy_config,
browser_launch_options={
'headless':True, # 无头模式
'timeout':15000
},
navigation_options={
'wait_until':'domcontentloaded',
'timeout':30000
}
)

# 运行爬虫
awaitcrawler.run()

# 导出数据到JSON文件
awaitDataset.export_to_json('products.json')

if__name__ =='__main__':
asyncio.run(main())

代码解析

  1. 1.依赖导入






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5