
使用 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 等键,用于存储提取的数据。
- 整理并存储数据
分配列名,并将数据整理到 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 进行网页抓取
-
使用 C# 进行网页抓取
-
抓取 Amazon 畅销商品
-
使用 Google Sheets 进行网页抓取
-
为网页抓取绕过 Cloudflare
-
请求限速指南
如需阅读其他精彩文章,请访问我的个人主页 --- Data Journal ❤️