In this Article
许多人认为,ChatGPT、Gemini 等人工智能工具替我们完成了太多工作,正在取代人类的劳动,甚至改变了我们的思考和决策方式。这也让人们担忧就业与创造力的未来。但人工智能真的是被高估的威胁吗?还是说,只要合理使用,它只是帮助我们的小助手?
以网页抓取为例。传统上,构建网页抓取工具需要扎实的编程知识、细致的观察力和调试能力。借助 ChatGPT,即使是初学者也能在几秒内生成可直接使用的抓取脚本;专业人士则可将重复的编码任务交给人工智能,从而节省数小时。人工智能并非取代开发人员,而是能减少日常重复工作的强大生产力工具。
对于需要收集数据的研究人员、监测竞争对手的企业,以及学习 Python 的学生来说,网页抓取都很有用。将 ChatGPT 编写和解释代码的能力与 Python 抓取库结合起来,任何人都能构建高效、快速的爬虫。
您入门所需的关键工具
在开始用 Python 抓取 Amazon 页面之前,先确认开发环境已正确配置。您需要:
- Visual Studio Code(或任何其他代码编辑器)
请从 官方网站,按照您操作系统对应的说明完成安装。随后打开 VS Code,点击侧栏中的扩展图标并安装 Python 扩展。通过选择文件 – 打开文件夹,打开要创建项目的文件夹。然后新建一个 Python 文件,例如:scraping_gpt_test.py
- Python 及其库(Requests、BeautifulSoup)
如果计算机尚未安装 Python 3.x,可从以下网址下载:https://www.python.org/。运行以下任一命令,检查 Python 是否已安装:
python --version
python3 --version
有些系统仍将 python 指向 Python 2,因此请使用 python3(以及 pip3)以确保运行的是 Python 3。如需使用 Python 库,先通过以下任一命令安装 pip:
python -m ensurepip
python3 -m ensurepip
接着,在电脑上打开终端,使用以下命令安装 Python 库:
pip install requests beautifulsoup4
pip3 install requests beautifulsoup4
按 Enter 键后,即可确认它们是否安装成功。
- ChatGPT 账户
创建免费或付费的 OpenAI 账户即可访问 ChatGPT,用它来编写、调试和改进抓取脚本。
- DataImpulse 代理
我们将使用代理凭据配置代理。您可在 DataImpulse dashboard 中所选套餐的详情页查看所需信息。
您也可以从的“基础 URL 示例”部分复制正确的配置信息。
- 您想要抓取的网站
本教程以 Wikipedia 及其按人口排列的国家列表为例。请记得在代码中将其替换为您的目标网站。
👉 请始终遵守规则:在抓取前查看网站的服务条款及 robots.txt 文件,确保抓取过程安全且合乎规范。
ChatGPT 能生成 Python 抓取代码吗?一起来测试
1. 检查目标页面,找到需要抓取的元素。
右键点击所需元素,例如国家或地区名称、人口数量,并在浏览器中选择检查。这会打开Developer Tools面板。将鼠标悬停在高亮显示的 HTML 上,确认选中了正确的元素。
2. 保存这些元素的 HTML 代码。
找到元素后,右键点击面板中的 HTML,然后复制CSS 选择器。
3. 向 ChatGPT 提供详细提示。
编写一个提示,其中包括:
- 目标 URL;
- 您复制的选择器;
- 您想要使用的库(例如, requests, BeautifulSoup);
请说明需要使用代理和请求头,但不要向 ChatGPT 提供您的凭据。
将以下提示粘贴到 ChatGPT:
“使用 Python、Beautiful Soup 和 Requests 库创建网页抓取工具。导入 time。目标网站:
https://en.wikipedia.org/wiki/List_of_countries_and_dependencies_by_population
目标:抓取目标页面上的国家及其人口数量。使用 DataImpulse 代理提供额外保护。添加请求头。
这些是 CSS 选择器:
- Country: #mw-content-text > div.mw-content-ltr.mw-parser-output > table > tbody > tr:nth-child(2) > td:nth-child(1) > a
- Population: #mw-content-text > div.mw-content-ltr.mw-parser-output > table > tbody > tr:nth-child(2) > td:nth-child(2)
输出:将所有抓取的数据保存在 CSV 文件中。
附加说明:删除输出 CSV 中不需要的符号。”
以下是 ChatGPT 的回复:
- 检查并运行最终代码。
将脚本复制到编辑器中并运行。若选择器或格式与页面不符,可能需要调试。使用代理时,请始终添加User-Agent 标头,以保证稳定访问。添加 import time 后,便可在请求之间设置延迟(time.sleep()),有助于控制请求频率。代码如下:
import requests
from bs4 import BeautifulSoup
import csv
import re
import time
# DataImpulse proxy configuration
PROXY = "http://username:[email protected]:8000"
proxies = {
"http": PROXY,
"https": PROXY
}
url = "https://en.wikipedia.org/wiki/List_of_countries_and_dependencies_by_population"
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/119.0.0.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
}
# Try with retry logic
for attempt in range(3):
try:
response = requests.get(url, headers=headers, proxies=proxies, timeout=15)
response.raise_for_status()
break
except requests.exceptions.HTTPError as e:
print(f"Attempt {attempt+1}: HTTP error {e}. Retrying...")
time.sleep(2)
else:
raise SystemExit("Failed to fetch the page after retries.")
soup = BeautifulSoup(response.text, "html.parser")
# Locate the first wikitable
table = soup.find("table", {"class": "wikitable"})
rows = table.find_all("tr")
data = []
for row in rows[1:]: # skip header row
cols = row.find_all("td")
if len(cols) >= 2:
country = cols[0].get_text(strip=True)
population = cols[1].get_text(strip=True)
# Clean unwanted symbols
population = re.sub(r"\[.*?\]", "", population) # remove [1], [note] etc.
population = population.replace(",", "").replace("\xa0", " ").strip()
data.append([country, population])
# Save results to CSV
with open("countries_population.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["Country", "Population"])
writer.writerows(data)
print("Scraping completed. Data saved to countries_population.csv")
脚本运行后,VS Code 终端会显示:
现在打开countries_population.csv文件,里面会显示包含国家及其人口数据的结构化表格。大功告成!
常见问题
抓取过程未必总能如预期进行。以下是一些常见问题:
- 403 客户端错误: 有些网站会拦截看起来并非来自真实浏览器的请求。请始终添加 User-Agent 等请求头,尤其是在使用代理时。
- 阻止 IP 或速率限制: 频繁请求可能暴露您的 IP,网站可能拒绝访问或要求验证。使用住宅代理(快速可靠,来自真实家庭设备)或移动代理(动态且不易被检测,来自移动运营商)可减少验证带来的中断。
- 超时或响应缓慢:网站或网络连接可能较慢,导致请求失败。在time.sleep()之间添加延迟,并实现重试逻辑。
- 损坏的 CSS 选择器:网站经常调整布局,已保存的选择器可能会失效。请在浏览器中重新检查元素,并更新脚本中的选择器。
- 杂乱的数据:HTML 中可能包含多余符号、空值或异常格式。保存到 CSV 前,请在 Python 中清理数据,例如删除特殊字符或去除首尾空格。
人工智能辅助网络抓取有未来吗?
答案很简单:有。ChatGPT 等 AI 工具不会取代开发人员,而是在增强他们的能力。这类工具可以处理重复的编码工作、快速生成抓取脚本,并为常见错误提供解决方案。人工智能辅助的网页抓取可帮助专业人员更高效地工作,将精力放在更高层次的分析上,而非手动编码。当然,保持平衡仍然很重要。
当然,即使有人工智能辅助,负责任地抓取依然很重要。请使用可靠的代理,遵守速率限制和网站服务条款,以合乎道德地开展抓取。
*本教程仅供学习参考,旨在演示网页抓取技术。其目的并非鼓励或指导任何人违反网站服务条款或适用法律进行抓取。请始终确保您的抓取活动合乎道德、合法,并尊重网站规则。










