Python基础入门 Day109 构建你的第一个网页爬虫

75次阅读
没有评论

共计 1984 个字符,预计需要花费 5 分钟才能阅读完成。

在前几节中,我们学习了使用 requests 模块获取网页内容,并通过 BeautifulSoup 对 HTML 进行解析。今天,我们将把这些知识整合起来,编写一个功能完整的网页爬虫,用来自动抓取网页中的标题、链接等数据。

一、什么是网页爬虫
网页爬虫(Web Crawler)是一种程序,用来自动访问网页并提取需要的信息。它的核心步骤包括:

  1. 发送 HTTP 请求获取网页内容;
  2. 解析 HTML 结构提取目标数据;
  3. 将数据保存或处理。

Python 的 requestsBeautifulSoup 模块非常适合实现这些功能。

二、爬取目标示例
假设我们想抓取一个新闻网站的标题和链接(这里以示例网站 https://news.ycombinator.com/ 为例)。

三、实现思路

  1. 使用 requests.get() 获取网页 HTML;
  2. 使用 BeautifulSoup 解析网页;
  3. 提取文章标题与对应链接;
  4. 保存结果到本地文件。

四、代码实现

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 规则。

十、小结
通过本节的学习,我们实现了一个完整的网页爬虫程序,掌握了以下要点:

  1. 使用 requests 模块获取网页数据;
  2. 使用 BeautifulSoup 提取网页结构化信息;
  3. 结合循环、异常处理和延迟机制实现稳定爬取;
  4. 将结果保存为 .txt.csv 文件。

下一节,我们将继续学习如何将爬取的数据进行清洗、结构化处理,并导入数据库,以实现更自动化的数据采集流程。

正文完
 0
评论(没有评论)