You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python新手求助:抓取网页链接并保存至CSV的代码实现

帮你搞定网页链接抓取并保存到CSV的问题

嘿,作为纯新手能写出这些代码已经超棒啦!我来一步步帮你完成这个作业~

首先,你已经完成了请求网页的第一步,接下来我们需要解析页面提取链接,再把这些链接整理成列表写入CSV。下面是完整的实现方案:

步骤拆解

    1. 完善网页请求与HTML解析
    1. 提取页面中的所有链接(处理相对链接)
    1. 将链接列表写入CSV文件

完整代码(带注释)

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin  # 用来处理相对链接转绝对链接
import csv

# 目标网站链接
search_link = "https://www.census.gov/programs-surveys/popest.html"

try:
    # 发送请求获取网页内容
    r = requests.get(search_link)
    r.raise_for_status()  # 如果请求失败(比如404、500),抛出异常提醒
    
    # 解析HTML页面
    soup = BeautifulSoup(r.text, 'html.parser')
    
    # 提取所有带href属性的<a>标签,整理成绝对链接列表
    links_list = []
    for a_tag in soup.find_all('a', href=True):
        # 把相对链接转换成完整的绝对链接
        full_link = urljoin(search_link, a_tag['href'])
        links_list.append(full_link)
    
    # 将链接列表写入CSV文件
    with open('census_links.csv', 'w', newline='', encoding='utf-8') as csvfile:
        # 创建CSV写入对象
        writer = csv.writer(csvfile)
        # 写入表头
        writer.writerow(['网页链接'])
        # 逐行写入每个链接
        for link in links_list:
            writer.writerow([link])
    
    print("链接已成功保存到census_links.csv文件!")

except requests.exceptions.RequestException as e:
    print(f"请求网页时出错:{e}")
except Exception as e:
    print(f"处理过程中出错:{e}")

关键细节解释

  • 处理相对链接:页面里很多链接是相对路径(比如/about.html),用urljoin可以把它和原网站域名拼接成完整的绝对链接,避免保存无效链接。
  • 异常处理:加入try-except可以捕获请求失败、文件写入失败等问题,让程序更健壮,也方便你排查错误。
  • 编码设置:写入CSV时指定encoding='utf-8',避免中文或特殊字符出现乱码。

如果你的需求是把整个网页的HTML内容保存到CSV(而不是链接),可以简化成这样:

import requests
import csv

search_link = "https://www.census.gov/programs-surveys/popest.html"

try:
    r = requests.get(search_link)
    r.raise_for_status()
    
    with open('page_html.csv', 'w', newline='', encoding='utf-8') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(['HTML内容'])
        # 把HTML内容作为一行写入(注意HTML内容可能很长,CSV里显示会换行,但数据是完整的)
        writer.writerow([r.text])
    
    print("HTML内容已保存到page_html.csv文件!")
except requests.exceptions.RequestException as e:
    print(f"请求出错:{e}")

这样应该就能完美完成你的作业啦~

内容的提问来源于stack exchange,提问作者ZFrench

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:29:47