Python新手求助:抓取网页链接并保存至CSV的代码实现
帮你搞定网页链接抓取并保存到CSV的问题
嘿,作为纯新手能写出这些代码已经超棒啦!我来一步步帮你完成这个作业~
首先,你已经完成了请求网页的第一步,接下来我们需要解析页面提取链接,再把这些链接整理成列表写入CSV。下面是完整的实现方案:
步骤拆解
- 完善网页请求与HTML解析
- 提取页面中的所有链接(处理相对链接)
- 将链接列表写入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
相关产品推荐
相关产品推荐

