ChatGPT 网页抓取:分步指南
自 2022 年发布以来,ChatGPT 立即成为任何查询的热门选择。聊天机器人可以帮助您集思广益、编写和编辑文本或代码等等。因此,使用 ChatGPT 进行网页抓取也是明智之举。
如果您正在寻找信息,Google 等搜索引擎会为您提供巨大帮助,但找到正确答案可能需要很长时间。另一方面,ChatGPT 简化了此过程。它经过大量数据的训练,可以总结、为复杂问题提供可理解的答案并回答后续问题,这使其非常适合许多任务,包括网页抓取。
ChatGPT 虽然并不完美,但它可以编写简单的代码,并解释其背后的逻辑。对于试图学习的初学者或希望提高和测试技能的经验丰富的抓取爱好者来说,它是一款出色的支持工具。所以,让我们学习使用 ChatGPT 进行网页抓取的所有基础知识,并尝试构建一个简单的网页抓取工具。
什么是 ChatGPT 网页抓取
ChatGPT 网络抓取 是使用 ChatGPT 编写的代码自动从网站收集数据的过程。但如果 ChatGPT 是一个聊天机器人,它在这个等式中究竟起什么作用?基本上,您可以要求 ChatGPT 为您构建一个抓取工具,用于您想要从中获取数据的特定网站。您需要做的就是给出指令,收集某些数据点供 ChatGPT 使用,然后运行代码。
如何使用 ChatGPT 执行网页抓取任务
ChatGPT 本身并不是一个抓取工具,它不能直接抓取网站数据,但它可以根据你给出的指示帮助你编写一个简单的抓取工具(或改进旧的抓取工具)。不过,虽然你不需要很多关于网页抓取或自己编写代码的知识,但知道如何创建一个好的提示还是很有用的。
使用 ChatGPT 进行数据抓取:分步指南
让我们看看如何使用 ChatGPT 进行网页抓取。在本分步指南中,我们将使用一个喜欢被抓取的网站 – https://books.toscrape.com/.
该网站是一个沙盒环境,专门用于练习您的技能和测试抓取工具。这是一个安全的地方,可以进行不同的抓取实验,而不必担心违反服务条款或 robots.txt 文件。还有其他类似于 books.toscrape.com 的沙盒网站,但为了进行此实验,让我们使用这个。
我们为您准备了一个沙盒列表。
让我们创建一个 蟒蛇刮刀 从页面中提取书名及其价格。我们将使用 Python,因为它是一种初学者友好的编程语言,语法简单,擅长处理网页抓取等任务。我们还将使用两个 Python 库来协助,即用于处理 HTML 请求的 Requests 和用于解析(清理)提取数据的 Beautiful Soup。
我们稍后会将提取的数据保存为 CSV——一种简单的文本格式,允许您稍后打开、编辑、操作和移动数据。
步骤 1:安装准备工作
在直接开始网页抓取之前,您需要先做几件事。
- 创建 ChatGPT 帐户。 ChatGPT 要求用户在使用该服务之前登录。因此,首先,登录您现有的帐户,或者,如果您还没有帐户,请单击“注册”并创建帐户。
- 获取一个文本编辑器。 要执行代码,您需要一个文本编辑器。您的计算机上已经预装了一个文本编辑器(MacOS 上的 TextEdit 或 Windows 上的 Notepad),但您可以使用任何第三方编辑器,如 Notepad++ 或 Visual Studio Code。此类文本编辑器往往具有更高级的功能,并且通常会用不同的颜色突出显示功能以提高可读性。但是,额外的功能可能不是必需的,因此使用哪种工具完全取决于您。
- 安装最新的 Python 版本。 如果您使用旧版本的 MacOS(12.3 或更早版本)或 Linux,则您的设备上可能已预装 Python。如果没有,请从官方网站下载 Python 并将其安装到您的计算机上。
- 安装必要的库。 然后,运行以下命令安装 Requests 和 BeautifulSoup
pip install requests beautifulsoup4在终端中(在 MacOS 上搜索终端或在 Windows 上搜索命令提示符)。
第 2 步:找到要抓取的元素
现在,是时候从目标网站收集一些有关您要抓取的元素的信息了。具体来说,就是定义书名和定价的 CSS 选择器。ChatGPT 需要这些信息来构建一个针对这些精确元素的抓取工具。
访问 https://books.toscrape.com/。您将立即看到书籍列表。要获取抓取工具的元素,我们需要使用“检查元素”。最简单的方法是右键单击其中一个书名,然后选择“检查”。此操作将打开浏览器的开发人员工具,您将在那里看到网站的 HTML 代码。
然后,找到书名元素。将鼠标悬停在代码上会突出显示它定义的区域,因此您应该很容易找到它。找到元素后,右键单击它,选择“复制”,然后单击“复制选择器”。
接下来,将复制的选择器粘贴到某个地方保存(桌面便签或文本编辑器),因为我们下一步会用到它。复制并记下书价的选择器。此时,您已经收集了编写 ChatGPT 提示所需的所有信息。
步骤 3:准备 ChatGPT 提示
现在,让我们为 ChatGPT 编写一个提示,以创建网络抓取工具。一个好的经验法则是编写一个清晰、解释清楚的提示,其中包含关键字和短语,概述聊天机器人需要知道的所有内容。
| 提示问题 | ChatGPT 说明 |
| ChatGPT 需要做什么? | 编写一个网络爬虫,提取目标网站中所有书籍的书名和价格。 |
| 目标 URL 是什么? | 目标网站是:https://books.toscrape.com/ |
| 它应该使用什么编程语言? | 使用 Python 编程语言 |
| 它应该使用哪些库? | 使用以下库: - 要求 – 美麗的汤 |
| 需要抓取哪些元素? | 定义的 CSS 选择器为:
|
| 输出要求是什么? | 将标题和价格保存在 CSV 文件中。 |
写得好的提示可以确保响应不容易出错。考虑一下手头的任务以及需要回答哪些问题才能构建一个完全符合我们需求的抓取工具。您的答案将为 ChatGPT 提供说明。 现在,您需要做的就是向 ChatGPT 提供这些指令并获得响应!结果如下:
import requests
from bs4 import BeautifulSoup
import csv
# Define the URL of the target website
url = "https://books.toscrape.com/"
# Send a GET request to the website
response = requests.get(url)
# Check if the request was successful
if response.status_code == 200:
# Parse the HTML content using BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')
# Find all book containers on the page
books = soup.select('#default > div > div > div > div > section > div:nth-child(2) > ol > li')
# Prepare a list to hold the titles and prices
books_data = []
for book in books:
# Extract the title using the specified CSS selector
title = book.select_one('article > h3 > a')['title']
# Extract the price using the specified CSS selector
price = book.select_one('article > div.product_price > p.price_color').text
# Append the extracted data to the list
books_data.append([title, price])
# Define the CSV file to save the data
csv_file = "books.csv"
# Save the data to a CSV file
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(["Title", "Price"]) # Write the header
writer.writerows(books_data) # Write the data rows
print(f"Data successfully saved to {csv_file}")
else:
print(f"Failed to retrieve the page. Status code: {response.status_code}")
步骤 4:检查并测试代码
即使您对使用 Python 编写代码一无所知,我也强烈建议您在 ChatGPT 生成代码后检查一下。花点时间检查您的提示是否清晰、是否包含所有必要信息,以及 ChatGPT 是否遵循了您的所有指示。
例如,你能发现这里的错误吗?
当你尝试运行此代码时,它会显示错误。那是因为我忘了提到 ChatGPT 必须导入 BeautifulSoup 才能进行数据解析。
如果您运行代码时发现某些功能不起作用,您可以向 ChatGPT 寻求帮助 - 只需通过要求查看和编辑代码来编写新提示即可。务必仔细检查您的要求,如果您在尝试运行命令时看到错误消息,请定义它们。如有必要,您始终可以向提示添加额外信息。
步骤 5:检查解析的数据
在我们的提示中,我们要求 ChatGPT 将数据保存在 CSV 文件中。因此,ChatGPT 生成的抓取工具在完成抓取和解析后应该能够执行此操作。打开保存的文件后,您的结果应类似于以下内容:
如果可以,恭喜你,你成功使用 ChatGPT 进行网页抓取!如果没有,请返回第 4 步并排除故障。常见错误包括:忘记将 CSV 导入抓取工具、提取了太多数据(这里不应该出现这种情况)或者系统内存不足。
现在,您可以尝试进一步实验:重写您的抓取程序,以仅从特定类别中提取图书评分或书名。您可能还注意到,此抓取程序仅抓取了第一页。尝试要求 ChatGPT 改进您的抓取程序,以便能够从所有 50 页中抓取书名和价格。您练习得越多,您对抓取逻辑的理解就会越深刻。
一旦你有信心了,你可以尝试高级数据检索。例如,你可以让 ChatGPT 使用以下代码编写动态内容抓取工具: 硒。您可以使用它从 Expedia 或 Skyscanner 等网站抓取机票价格。
但是,请始终记住,实际的网站比沙盒更棘手。此外,网站很少喜欢被抓取。例如,抓取亚马逊是可能的,但要复杂得多。不过,无论您选择下一个抓取哪个网站,请始终尊重其服务条款和 robots.txt 文件、数据保护法,并始终遵循 良好的抓取习惯.
我们列出了一系列想法供您尝试。
ChatGPT 网页抓取的高级技术
我们抓取的网站旨在测试抓取工具,因此我们没有遇到任何 路障 比如 CAPTCHA 或 GOTCHAS。此外,我们抓取的所有数据都是简单的 HTML 内容。
但是,如果您需要抓取使用基于 JavaScript 的动态生成内容的网站,该怎么办?那么阻止抓取工具提取数据的机器人保护系统怎么办?为了解决这个问题,您需要一些更高级的工具。但别担心——ChatGPT 仍然能够帮助您。
处理动态内容
如果您打算进行一些高级抓取,那么仅处理常规 HTML 内容的简单网页抓取工具可能不够用。如今大多数网站都使用 JavaScript 来加载内容。它让您享受无限滚动和无限加载等功能。然而,这些元素对于简单的抓取工具来说太难掌握了。
尝试将鼠标悬停在下面的代理服务器图标上。虽然您可以这样做并查看有关图像的一些额外信息,但简单的抓取工具却做不到。
有几种方法可以抓取动态内容。一种是使用无头浏览器,它可以用抓取工具执行 JavaScript。另一种是使用可以处理和抓取网站动态内容的预构建工具。
使用无头浏览器
A 无头浏览器 帮助抓取工具“浏览”网页。基本上,它就是您用来阅读本文的常规浏览器,但没有图形用户界面。因此,您无需单击按钮或在 URL 栏中输入内容,而是通过编写代码以编程方式与浏览器交互。
传统网页抓取 方法依赖于发送 HTTP 请求,因此它们只能检索静态信息 - 文本、图像、多媒体。不幸的是,这意味着像弹出窗口这样的动态元素被抛在后面。在这种情况下,无头浏览器可以通过渲染 JavaScript 来执行它 - 就像真实用户的浏览器一样。这允许从动态元素中抓取数据。您可以使用 ChatGPT 来帮助您为无头浏览器(如 Selenium、Playwright、Puppeteer 或任何其他浏览器)编写代码。
使用 Selenium 编写网页抓取提示
我们可以使用与之前相同的提示,并对其进行修改。我们不再使用 Requests 和 Beautiful Soup,而是让 ChatGPT 使用 Selenium(一个用于自动化 Web 浏览器的强大 Python 库)。这次,让我们使用另一个沙盒 - https://quotes.toscrape.com。这次我们将抓取引文和它们的作者。
步骤 1。 安装必要的库。
- 运行该命令
pip install selenium在终端上访问图书馆。 - 下载 Chrome 网络驱动程序。这个基于 Chrome 的网络驱动程序是您可以使用 Selenium 控制的无头浏览器。
注意:您必须为本次抓取实验复制不同的 CSS 选择器。在本例中,重复相同步骤(使用“检查元素”并复制数据)以获取引文和作者的选择器。
步骤 2。 写下你的提示。它看起来应该像这样:
请用 Selenium 为我编写一个 Python 网页抓取工具。该抓取工具应从目标网站中提取引文和作者。
目标网站:https://quotes.toscrape.com/
CSS 选择器:
- 主体 > div > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span.text
- 主体 > div > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span:nth-child(2) > small
输出:将所有引文和作者保存在 CSV 文件中。
ChatGPT 生成的代码在代码编辑器中应如下所示。请注意语法与我们之前编写的语法有何不同:
from selenium import webdriver
from selenium.webdriver.common.by import By
import csv
# Set up the web driver (ensure the driver is in your PATH or specify the path)
driver = webdriver.Chrome()
# URL to scrape
url = "https://quotes.toscrape.com/"
# Open the URL
driver.get(url)
# Create lists to store quotes and authors
quotes_list = []
authors_list = []
# Locate the quotes using the provided CSS selector
quotes = driver.find_elements(By.CSS_SELECTOR, "body > div > div:nth-child(2) > div.col-md-8 > div > span.text")
authors = driver.find_elements(By.CSS_SELECTOR, "body > div > div:nth-child(2) > div.col-md-8 > div > span:nth-child(2) > small")
# Extract the text and append it to the lists
for quote, author in zip(quotes, authors):
quotes_list.append(quote.text)
authors_list.append(author.text)
# Close the web driver
driver.quit()
# Save the quotes and authors to a CSV file
with open("quotes.csv", mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(["Quote", "Author"])
for quote, author in zip(quotes_list, authors_list):
writer.writerow([quote, author])
print("Scraping completed and saved to quotes.csv")
步骤 3。 找到您的 CSV 文件并打开它。 您的结果应放在一个整洁的表格中。
使用预构建工具
您无需使用 ChatGPT 从头构建网页抓取工具,就可以获得 现成的刮刀 帮助您完成抓取项目。
首先,您可以选择非抓取选项——一些提供商提供来自各个行业的预先抓取的数据集。您无需自己构建抓取工具、提取、清理和解析数据,而是可以检查是否有适合您用例的准备好的详细数据集。如果没有适合您用例的数据集,并且您仍然需要自己抓取数据,请尝试使用无代码抓取工具。这些工具需要您与网站进行交互,但它们会将您的点击转换为抓取逻辑。它们的工作原理是让您像普通用户一样浏览、点击和滚动网站,同时根据您的交互提取数据。
您还可以得到 网页抓取 API or 基于代理的 API。这些工具可以处理任何数量的抓取,并设计用于大多数现代网站。它们可以处理 JavaScript 内容、创建唯一指纹、解析提取的数据、管理代理、绕过反抓取系统等。但是,它们需要一些编程知识才能设置和运行,但您可以使用 ChatGPT 来帮助您。
此外,您可以注册以使用目标网站的 API 进行抓取。API 让您可以轻松获取特定且结构化的数据,而无需获取整个 HTML 文档、解析和处理 JavaScript 元素和反抓取措施。然后,您可以使用 Python 发送请求 - ChatGPT 也可以帮助您编写它们。重要的是要记住,并非所有网站都提供 API,它们可能会限制您可以访问的数据,而且它们往往需要付费。
避免防抓取措施
虽然 books.toscrape.com 等网站喜欢被抓取,但大多数网站并不喜欢。他们不会给你一张通行证让你四处查看并收集数据,而是实施反机器人措施。CAPTCHA 和服务,如 Cloudflare 保护它们免受恶意机器人的攻击。不过,如果您的目标网站实施了这些措施,也不会失去一切。
网站需要人工流量,因为这可以带来收入。然而,机器人流量会使服务器超载,阻止真人访问网站。如果你想成功抓取数据,你需要让你的抓取工具看起来像真人。
使用代理
伪造浏览器指纹
您是否注意到,即使您没有登录,网站也知道您在访问他们的网站?这是因为您的浏览器指纹会显示一些有关您的信息。
指纹是某些数据点的集合,包括屏幕分辨率、操作系统、已安装的字体、时区、已保存的 Cookie,它们有助于在网络上识别您。像您这样的普通用户拥有非常详细的指纹,这些指纹虽然独特,但看起来仍然很典型。然而,自动机器人的浏览器指纹往往要么缺少类似人类的信息,如 Cookie 或精确的用户代理字符串,要么不一致,因此它们很显眼。
在构建抓取工具时,找到伪造浏览器指纹的方法很重要,这样它才能融入其中。例如,有些 Python 库可以通过调整或旋转用户代理字符串来更改指纹,或者修改屏幕分辨率和时区等参数。反检测浏览器也很有用 - 它们允许您使用自己的数字指纹创建单独的浏览环境,而无需将它们相互关联。
使用 ChatGPT 进行网页抓取的其他技巧
- 不要期望它是完美的。 尽管经过大量数据的训练,ChatGPT 仍然是一个自动化程序,而不是开发人员。即使你的提示非常精彩,它也可能提供不准确的信息或代码。
- 像对待初级专家一样对待 ChatGPT。将聊天机器人视为一名能力强但刚刚进入该领域的新手专家。确保给出明确的指示,并始终仔细检查结果(和您的查询!)。
- 重新措辞、重申并重新生成答案。 ChatGPT 之所以如此受欢迎,是因为它非常灵活。如果你对它提供的答案不满意,你可以给出额外的说明或完全重新生成问题,直到你喜欢这个答案。例如,如果你决定让你的抓取工具 Node.js 而不是 Python,您可以要求重新创建它。
- 问后续问题。 假设 ChatGPT 帮助您用 Python 编写了一个网页抓取工具,但您不明白某些函数的含义。不要害怕问“X 是什么?”或“Y 做什么?”,以便更好地了解自己在做什么。通过实际理解输出,您将能够知道它是否正确。
结语
虽然 ChatGPT 无法帮你抓取网站数据,但它是一款很棒的工具,可以帮助你开始进行网页抓取。虽然它本身不是抓取工具,但它可以根据你的查询生成代码。即使你自己不会写代码,使用聊天机器人也可以成为网页抓取的第一步,但重要的是要记住,它是一个自动化程序,可能会提供不准确的信息。