如何仅将网页URL写入TXT文件?解决写入HTML内容的异常问题
解决方法:仅提取并写入URL到TXT文件
你的代码存在两个核心问题:
- 定义了
urls = []列表,但没有把遍历到的URL存入其中,只是做了打印输出; - 后续将
urls变量重新赋值为文件对象,最终写入的是整个soup对应的HTML内容,而非目标URL列表。
以下是修正后的代码:
import requests from bs4 import BeautifulSoup headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'} url = 'https://www.snapdeal.com/' reqs = requests.get(url, headers=headers) soup = BeautifulSoup(reqs.text, 'html.parser') # 收集有效URL,过滤空链接 urls = [] for link in soup.find_all('a'): href = link.get('href') if href: # 跳过无href属性的a标签 # 可选:将相对路径转为完整绝对URL # if not href.startswith('http'): # href = requests.compat.urljoin(url, href) urls.append(href) print(href) # 写入URL到TXT文件 file_path = r'/run/user/759001103/gvfs/smb-share:server=192.168.0.112,share=corporate%20share/Corporate Share/Systems and Infrastructure/Engineering/jbot tests/multicats.txt' with open(file_path, "w") as f: # 每个URL单独占一行 f.write('\n'.join(urls))
关键修改说明:
- 新增了将
href存入urls列表的逻辑,并过滤掉空链接,避免无效内容写入; - 使用
with语句管理文件操作,无需手动调用close(),更安全可靠; - 通过
'\n'.join(urls)将列表中的URL用换行符拼接,保证写入文件后每个URL单独一行; - 注释中提供了将相对路径转为绝对URL的可选逻辑,若页面存在非完整路径的链接可启用。
内容的提问来源于stack exchange,提问作者sammyb62
相关产品推荐
相关产品推荐

