如何正确格式化代码以获得预期追加输出?HTML链接代码问题求助
问题排查与修复方案
我看了你的代码,主要有两个关键问题导致输出不符合预期:
1. 字符串格式化错误,无法正确插入URL
你在拼接<a>标签的时候,用了"{link}"但没有正确解析这个变量——因为你是用字符串拼接的方式,不是格式化语法,所以{link}会被当作纯文本输出,而不是替换成实际的链接内容。另外,如果你想在链接的文本部分也显示URL(也就是你说的"插入两次URL"),需要明确获取href的值并同时用在href属性和文本内容里。
2. 列表直接写入文件会保留列表格式
你的links是一个列表,直接用format写入文件的话,会输出类似['<a ...>', '<a ...>']的列表字符串,而不是每个链接单独的HTML元素。需要把列表拼接成一个完整的HTML字符串再写入。
修正后的代码
from bs4 import BeautifulSoup import re ####### Parse for <a> tags and save ############ with open("page1.html", 'r') as htmlb: soup2 = BeautifulSoup(htmlb, 'lxml') links = [] # 用f-string来正确格式化字符串,同时把URL同时放在href和文本位置 for link in soup2.findAll('a', attrs={'href': re.compile("^https://")}): url = link.get('href') links.append(f'<a href="{url}">{url}</a><br>') # 这里的time.sleep(.1)没有实际作用,可以去掉 with open("page-2.html", 'w') as html: # 用join把列表里的每个链接元素拼接成一个字符串,换行分隔 html.write('\n'.join(links))
额外说明
- 如果你不想把URL作为链接文本,而是想显示原HTML里
<a>标签的文本内容,可以把{url}换成{link.text.strip()},这样会显示链接原本的文字。 - 确保已经安装了
bs4和lxml库,如果没装的话可以用pip install beautifulsoup4 lxml安装。
内容的提问来源于stack exchange,提问作者Linuxuser00
相关产品推荐
相关产品推荐

