使用 AutoScraper 进行网络抓取

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

在本教程中,我将指导您设置 AutoScraperAutoScraper 可帮助您从网站收集数据,并将其保存到 CSV 文件,以便于分析。您会发现,有了 AutoScraper,网络抓取变得简单而高效,可以帮助您专注于分析数据而不是处理代码。

什么是 AutoScraper?

AutoScraper 是一个 Python 库,可根据您的示例自动学习数据结构。它结合使用人工智能和启发式分析来检测网页中的模式,从而简化数据提取过程。与其他刮库不同,如 BeautifulSoup 或 Scrapy在需要明确数据路径编码的情况下,AutoScraper 会解释数据结构,并学习如何独立提取类似数据。

AutoScraper 的主要优势包括

  • 最小代码: 只需提供一个您要抓取的数据示例,AutoScraper 就会处理剩下的工作。
  • 结构化数据处理 适用于格式清晰的网站,如产品列表或信息表。
  • 无手动 HTML 检测: 非常适合不熟悉 HTML 结构的初学者。

动态内容的 AutoScraper 替代方案

对于使用大量 JavaScript 或验证码保护的网站,可以考虑使用:

  • Selenium:自动浏览器交互,是动态内容的理想选择。
  • Splash:一种支持 JavaScript 的无头浏览器方案。
  • 网络抓取 API:提供来自亚马逊和 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
来源 env/bin/activate # for MacOS/Linux users
env\Scripts\activate # 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 = [《阁楼上的光》, "£51.77", "三"]

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

制作刮刀

现在,创建刮板的一个实例,并使用构建方法根据 wanted_list 中的示例刮取页面。

scraper = AutoScraper()
scraper.build(url, wanted_list)

审查结果

检查 AutoScraper 提取的内容,确保提取的数据正确无误。

results = scraper.get_result_similar(url, grouped=True)
print(爬虫找到的键:, results.keys())

AutoScraper 将显示其生成的一组规则。您将看到存储提取数据的 rule_0xs7 和 rule_1dmx 等键。

  1. 组织和存储数据

为列指定名称,并将数据整理成 Pandas DataFrame。

columns = ["Title", "Price", "Rating"]
data = {columns[i]: results[list(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 = scraper.get_result_similar(page_url, grouped=True)
data = {columns[i]: results[list(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,然后清理掉不必要的规则。

scraper.build(url, wanted_list)
rules_too_keep = ['rule_1kq7', 'rule_a5xp', 'rule_9vbn'] # Sample rule names for data columns
scraper.keep_rules(rules_too_keep)
scraper.save(movies_model.json)

使用训练模型提取数据

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

scraper.load(movies_model.json)
results = scraper.get_result_similar(url, grouped=True)
# Define columns based on rules and organize data
列 = ["Title", "Year", "Rating"]
data = {columns[i]: results[list(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"
}
}
scraper.build(url, wanted_list=wanted_list, request_args=request_args)

结论

AutoScraper 是一款直接易用的工具,即使你刚接触编程,或者不熟悉 HTML,也能轻松从静态网站抓取数据。我在这里讲解了基础内容,包括如何安装和配置、处理分页,以及抓取更复杂的网站。虽然 AutoScraper 可能并不适合所有抓取任务,但它非常适合在不需要陡峭学习曲线的情况下快速收集数据。

如果你在处理 JavaScript 依赖较重的网站,或使用 CAPTCHA 的站点,可以考虑将 AutoScraper 与 Selenium 搭配使用,或者切换到更高级的工具,例如 Bright Data。具体取决于你要抓取的内容细节以及网站结构。

类似文章