使用 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 ❤️

相关推荐
长三角智造观察12 小时前
中小制造ERP+MES选型避坑:对接集成VS原生一体化,深度对比TCO与落地痛点
大数据·人工智能·制造
weixin_3077791315 小时前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
一水鉴天18 小时前
映射、哈希表与哈斯图:计算机科学的三种基线 20261003(元宝)
开发语言·人工智能
Frank_refuel19 小时前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
海绵宝宝转agent19 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭19 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
小小龙学IT19 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
Wang's Blog19 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
Elastic 中国社区官方博客20 小时前
将你自己的密钥用于现有 Elastic Cloud 部署
大数据·数据库·elasticsearch·全文检索
2601_9620715720 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python