使用 AutoScraper 进行网页抓取:分步教程

使用 AutoScraper 进行网页抓取:分步教程

在本教程中,我将指导你设置 AutoScraper、从网站收集数据,并将其保存为 CSV 文件以便分析。你会发现,借助 AutoScraper,网页抓取可以变得简单高效,帮助你专注于分析数据,而不是纠结代码。

什么是 AutoScraper?

AutoScraper 是一个 Python 库,可以根据你提供的示例自动学习数据结构。它结合 AI 和启发式分析来检测网页中的模式,从而简化数据提取流程。与 BeautifulSoup 或 Scrapy 等其他抓取库不同,这些库需要显式编写数据路径代码,而 AutoScraper 会理解数据结构,并学习如何独立提取类似数据。

AutoScraper 的主要优势包括:

  • 代码量极少:提供一个你想抓取的数据示例,AutoScraper 会处理其余部分。

  • 结构化数据处理: 非常适合遵循清晰格式的网站,例如产品列表或信息表格。

  • 无需手动检查 HTML: 非常适合不熟悉 HTML 结构的初学者。

适用于动态内容的 AutoScraper 替代方案

对于大量使用 JavaScript 或带有 CAPTCHA 保护的网站,可以考虑使用:

  • Selenium:自动化浏览器交互,非常适合动态内容。

  • Splash:一个支持 JavaScript 的无头浏览器解决方案。

  • 网页爬虫工具 API:从 Amazon 和 LinkedIn 等复杂网站提供结构化数据。

前提条件

要跟着操作,你需要:

  • **Python 3+**:确保你安装了最新的 Python 版本。

  • AutoScraper:通过 pip 安装(pip install autoscraper)。

  • Pandas:用于将数据保存到 CSV 文件(pip install pandas)。

让我们从设置环境开始。

设置项目

首先创建一个项目目录并设置虚拟环境。

# Create project directory

mkdir web_scraping_tutorial

cd web_scraping_tutorial

Set up virtual environment

python -m venv env

source env/bin/activate # for MacOS/Linux users

envScriptsactivate # for Windows users

接下来,安装所需库:

pip install autoscraper pandas

选择要抓取的网站

AutoScraper 在具有清晰结构化数据的网站上表现良好,例如列表或表格。在本教程中,为了便于操作,我们将从一个名为 Books to Scrape 的示例网站抓取数据,这是一个专门为测试抓取工具而设计的网站。在这里,我们将收集书名、价格和评分。

构建爬虫工具

让我们直接进入代码,使用 AutoScraper 构建第一个爬虫工具。

导入库

首先导入 AutoScraper 和 Pandas。

from autoscraper import AutoScraper

import pandas as pd

定义目标 URL 和示例数据

我们将设置 URL 并提供示例数据,AutoScraper 将用它来识别模式。在这里,我们要提取书名、价格和评分。

url = "http://books.toscrape.com/"

wanted_list = "A Light in the Attic", "£51.77", "Three"

wanted_list 包含来自网站的示例数据。AutoScraper 将从这些值中学习,以查找类似数据。

构建抓取工具

现在,创建一个爬虫工具实例,并使用 build 方法根据 wanted_list 中的示例抓取页面。

爬虫工具 = AutoScraper()

抓取工具.build(url, wanted_list)

查看结果

检查 AutoScraper 提取了哪些内容,以确保它抓取的是正确数据。

results = 爬虫.get_result_similar(url, grouped=True)

print("Keys found by the 抓取工具:", results.keys())

AutoScraper 会显示它生成的一组规则。你会看到 rule_0xs7 和 rule_1dmx 等键,用于存储提取的数据。

  1. 整理并存储数据

分配列名,并将数据整理到 Pandas DataFrame 中。

columns = "Title", "Price", "Rating"

data = {columnsi: resultslist(results.keys())\[i] for i in range(len(columns))}

df = pd.DataFrame(data)

将数据保存到 CSV

最后,将 DataFrame 保存为 CSV 文件。

df.to_csv('books_data.csv', index=False)

print("Data saved to books_data.csv")

现在,你已经拥有一个 CSV 文件,其中包含来自该网站的书名、价格和评分。

抓取分页内容

具有多个页面或"分页"的网站,会给网页抓取带来挑战。例如,Books to Scrape 有多页图书列表。下面介绍如何扩展 AutoScraper 来处理分页。

更新 URL 和示例数据

定义每个页面的 URL 模式,并更新 wanted_list 以反映来自多个页面的示例数据。

urls = f"http://books.toscrape.com/catalogue/page-{i}.html" for i in range(1, 3)

跨页面抓取数据

遍历每个页面 URL 并累积数据。

all_data = \[\]

for page_url in urls:

results = 爬虫工具.get_result_similar(page_url, grouped=True)

data = {columnsi: resultslist(results.keys())\[i] for i in range(len(columns))}

all_data.append(pd.DataFrame(data))

full_data = pd.concat(all_data, ignore_index=True)

full_data.to_csv('books_data_paginated.csv', index=False)

将 AutoScraper 用于复杂网站

AutoScraper 内置的规则编辑器非常适合复杂布局,例如包含嵌套表格的布局。让我们用一个电影列表网站来说明,我们想抓取电影标题、上映年份和评分。

定义 URL 和示例数据

设置目标 URL,并使用电影列表页面中的示例数据设置 wanted_list。

url = "https://sample-movie-site.com/movies"

wanted_list = "Inception", "2010", "8.8"

训练并修剪规则

训练 AutoScraper,然后修剪不必要的规则。

抓取工具.build(url, wanted_list)

rules_to_keep = 'rule_1kq7', 'rule_a5xp', 'rule_9vbn' # Sample rule names for data columns

爬虫.keep_rules(rules_to_keep)

抓取工具.save('movies_model.json')

使用训练好的模型提取数据

模型训练并保存后,就可以从结构相似的页面中提取数据。

爬虫工具.load('movies_model.json')

results = 抓取工具.get_result_similar(url, grouped=True)

Define columns based on rules and organize data

columns = "Title", "Year", "Rating"

data = {columnsi: resultslist(results.keys())\[i] for i in range(len(columns))}

df = pd.DataFrame(data)

df.to_csv('movies_data.csv', index=False)

AutoScraper 的常见挑战

尽管 AutoScraper 很易用,但仍可能遇到一些挑战:

JavaScript 渲染页面: AutoScraper 不处理 JavaScript,因此对于这类网站,你可能需要 Selenium 或 Playwright 等工具。

速率限制: 频繁请求可能触发速率限制,因此可以使用 ratelimit 等库来控制请求节奏。

IP 封锁:对于高流量抓取,请使用代理服务器来防止 IP 被封禁。下面是在 AutoScraper 中设置代理的方法:

request_args = {

"headers": {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"

},

"proxies": {

"http": "http://user:pass@proxyserver:port"

}

}

爬虫.build(url, wanted_list=wanted_list, request_args=request_args)

结论

AutoScraper 是一个简单直接的工具,可以让从静态网站抓取数据变得容易,即使你刚开始学习编程或不熟悉 HTML 也没问题。我在这里介绍了基础内容------如何安装和设置、处理分页,以及抓取更复杂的网站。虽然 AutoScraper 可能并不适合每一种抓取任务,但它非常适合在没有陡峭学习曲线的情况下快速收集数据。

如果你要处理大量使用 JavaScript 的网站,或使用 CAPTCHA 的网站,可以考虑将 AutoScraper 与 Selenium 搭配使用,或者切换到 Bright Data 这样的更高级工具。这完全取决于你尝试抓取的具体内容以及网站结构。

对其他网页抓取指南感兴趣?

  • 使用 Scrapy 进行网页抓取

  • 使用 Selenium 进行网页抓取

  • JavaScript 与 Python 在网页抓取中的对比

  • 使用 Python lxml 进行网页抓取

  • 使用 Excel 进行网页抓取

  • 使用 Python 进行网页抓取

  • 使用 C# 进行网页抓取

  • 抓取 Amazon 畅销商品

  • 使用 Google Sheets 进行网页抓取

  • 为网页抓取绕过 Cloudflare

  • 请求限速指南

如需阅读其他精彩文章,请访问我的个人主页 --- Data Journal ❤️

相关推荐
chaoyuanl1 小时前
超元力主题乐园飞行影院:把景区文化做成可持续更新的沉浸体验
大数据·3d·xr·娱乐·mr
FanetheDivine1 小时前
学习python 1.搭建python环境
python
yume_sibai1 小时前
12-Rust 性能优化指南(性能分析 + 内存优化 + SIMD + 并发优化 + 编译器优化 + 基准测试)
开发语言·性能优化·rust
萧瑟余晖1 小时前
Hibernate 核心原理与架构详解
开发语言·架构·hibernate
爱喝水的鱼丶1 小时前
SAP-ABAP:SAP MM 模块物料主数据批量导入与增强开发:字段扩展、校验逻辑与批量导入工具开发
开发语言·性能优化·sap·abap·增强·经验交流·mm
geovindu1 小时前
rust:Builder Pattern
开发语言·设计模式·rust·建造者模式
白远山1 小时前
健身场馆无人自动化解决方案:从架构到落地实践
java·开发语言·数据库·数据挖掘·需求分析
虎虎(_ _)。゜zzZ2 小时前
SQLAlchemy入门教程
数据库·后端·python·sql·ai·sqlalchemy
林澈在路上2 小时前
游戏场景背景音乐定制AI软件哪款好 2026对比推荐
大数据·人工智能·aigc·音视频