共计 1984 个字符,预计需要花费 5 分钟才能阅读完成。
在前几节中,我们学习了使用 requests 模块获取网页内容,并通过 BeautifulSoup 对 HTML 进行解析。今天,我们将把这些知识整合起来,编写一个功能完整的网页爬虫,用来自动抓取网页中的标题、链接等数据。
一、什么是网页爬虫
网页爬虫(Web Crawler)是一种程序,用来自动访问网页并提取需要的信息。它的核心步骤包括:
- 发送 HTTP 请求获取网页内容;
- 解析 HTML 结构提取目标数据;
- 将数据保存或处理。
Python 的 requests 与 BeautifulSoup 模块非常适合实现这些功能。
二、爬取目标示例
假设我们想抓取一个新闻网站的标题和链接(这里以示例网站 https://news.ycombinator.com/ 为例)。
三、实现思路
- 使用
requests.get()获取网页 HTML; - 使用
BeautifulSoup解析网页; - 提取文章标题与对应链接;
- 保存结果到本地文件。
四、代码实现
import requests
from bs4 import BeautifulSoup
# 目标网页
url = "https://news.ycombinator.com/"
response = requests.get(url)
# 创建 BeautifulSoup 对象
soup = BeautifulSoup(response.text, "lxml")
# 提取所有新闻标题和链接
articles = soup.select(".titleline a")
# 输出并保存数据
with open("news_data.txt", "w", encoding="utf-8") as f:
for item in articles:
title = item.text.strip()
link = item.get("href", "")
print(f"{title} -> {link}")
f.write(f"{title} -> {link}\n")
运行后,程序会自动打印并保存网页中的新闻标题与对应链接。
五、添加异常处理
网络请求可能失败,为了提高爬虫的稳定性,我们可以加上异常捕获与状态检查:
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
except requests.RequestException as e:
print(" 请求失败:", e)
这样在遇到网络错误或超时时,程序不会崩溃,而是安全退出或重试。
六、模拟浏览器访问
有些网站会检测请求头以区分浏览器和爬虫。我们可以添加 User-Agent 模拟真实访问:
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0 Safari/537.36"
}
response = requests.get(url, headers=headers)
这能有效避免被网站屏蔽。
七、分页爬取
如果目标网站有多页数据,可以通过循环爬取:
for page in range(1, 6):
url = f"https://example.com/news?page={page}"
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "lxml")
for item in soup.select(".title a"):
print(item.text, item["href"])
通过拼接 URL 参数,就能依次抓取不同页面内容。
八、保存为 CSV 文件
为了方便后续分析,可以将结果保存为 CSV 文件:
import csv
with open("news.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow([" 标题 ", " 链接 "])
for item in articles:
writer.writerow([item.text.strip(), item["href"]])
这样我们就能在 Excel 中查看抓取结果。
九、限制访问频率
为了避免被网站封禁,应适当延迟每次请求:
import time
time.sleep(2) # 每次请求间隔 2 秒
在爬取大型网站时,建议控制访问速度,遵守网站的 robots.txt 规则。
十、小结
通过本节的学习,我们实现了一个完整的网页爬虫程序,掌握了以下要点:
- 使用
requests模块获取网页数据; - 使用
BeautifulSoup提取网页结构化信息; - 结合循环、异常处理和延迟机制实现稳定爬取;
- 将结果保存为
.txt或.csv文件。
下一节,我们将继续学习如何将爬取的数据进行清洗、结构化处理,并导入数据库,以实现更自动化的数据采集流程。