以lexfridman的官方网站为例,https://lexfridman.com/podcast/,如何批量下载网页呢?
查看网页源文件,播客transcript的链接是:
<a href="https://lexfridman.com/jared-kushner-transcript">Transcript</a>
文件标题在这里:<title>Transcript for Jared Kushner: Israel, Palestine, Hamas, Gaza, Iran, and the Middle East | Lex Fridman Podcast #399 - Lex Fridman</title>
所以,在ChatGPT中输入提示词如下:
你是一个Python编程专家,要完成一个批量下载网页的任务,具体步骤如下:
在本地电脑D盘新建一个文件夹:lexfridman-podtext;
打开网页https://lexfridman.com/podcast/,解析网页源代码;
提取网页源代码中所有<a>标签的内容;
如果<a>标签的内容为“Transcript”,就提取<a>标签的href属性值,作为网页下载地址;
然后解析这个网页源代码,提取其<title>标签内容,作为网页的文件标题名;
下载这个网页,保存到文件夹lexfridman-podtext;
注意:<title>标签内容提取后,要将其中的“: ”、“ | ”等Windows系统中不允许作为文件名的特殊符号替换为符号”-”;
每一步都要输出相关信息;
ChatGPT生成源代码如下:
import os
import requests
from bs4 import BeautifulSoup
# 函数用于清理文件名中的非法字符
def clean_filename(filename):
return filename.replace(':', '-').replace('|', '-')
# 在D盘新建文件夹
folder_path = "D:\\lexfridman-podtext"
if not os.path.exists(folder_path):
os.makedirs(folder_path)
print(f"新建文件夹:{folder_path}")
# 打开并解析网页
source_url = "https://lexfridman.com/podcast/"
print(f"打开并解析网页:{source_url}")
response = requests.get(source_url)
soup = BeautifulSoup(response.text, 'html.parser')
# 提取所有<a>标签
a_tags = soup.find_all('a')
# 遍历<a>标签,找出内容为“Transcript”的
for a_tag in a_tags:
if a_tag.text == "Transcript":
# 提取<a>标签的href属性值
href = a_tag['href']
print(f"找到Transcript网页地址:{href}")
# 打开并解析Transcript网页
transcript_response = requests.get(href)
transcript_soup = BeautifulSoup(transcript_response.text, 'html.parser')
# 提取<title>标签内容
title_tag = transcript_soup.find('title')
if title_tag:
title = clean_filename(title_tag.text)
print(f"找到Transcript网页标题:{title}")
# 下载网页并保存到文件
filename = os.path.join(folder_path, title + ".html")
with open(filename, 'w', encoding='utf-8') as f:
f.write(transcript_response.text)
print(f"网页已保存到:{filename}")
运行程序,全部网页下载保存到本地: