Python爬虫仅解析URL列表最后一项的问题及改进需求
问题解决:遍历所有URL并解析提取信息
原代码的核心问题是请求和解析逻辑在for循环之外,循环仅不断覆盖url变量,最终只处理列表中的最后一个URL。以下是修复后的代码及关键说明:
修复后代码
import requests from bs4 import BeautifulSoup def news(): # 使用with语句自动管理文件资源,避免手动关闭 with open('list.txt', 'r') as linksFile: linksList = linksFile.readlines() # 打开输出文件,追加模式写入 with open("Websites.txt", "a") as f: for link in linksList: # 去除URL中的换行符、首尾空白,避免请求无效地址 url = link.strip() if not url: # 跳过空行 continue try: # 发送GET请求,主动抛出HTTP错误 resp = requests.get(url) resp.raise_for_status() print(f"成功打开网页: {url}") print(f"正在处理 {url} 的内容...") soup = BeautifulSoup(resp.text, 'html.parser') # 定位目标div容器 target_div = soup.find("div", {"class": "m-exhibitor-entry__item__body__contacts__additional__website"}) if target_div: # 遍历所有a标签,提取有效文本并写入 for a_tag in target_div.findAll("a"): website_text = a_tag.text.strip() if website_text: f.write(website_text + "\n") print(f"{url} 的内容已成功保存\n") else: print(f"{url} 未找到目标内容区域\n") except requests.exceptions.RequestException as e: print(f"访问 {url} 出错: {str(e)}\n") news()
关键修改说明
- 循环逻辑调整:将请求、解析、写入的全部逻辑移入
for link in linksList循环内部,确保每个URL都被依次处理 - URL格式清理:用
strip()去除读取时附带的换行符和空白字符,避免请求https://xxx.com\n这类无效地址 - 资源安全管理:全程使用
with语句操作文件,无需手动调用close(),防止资源泄漏 - 异常容错处理:捕获请求过程中的网络错误、HTTP状态错误,避免单个URL失败导致整个程序崩溃
- 空值过滤:跳过空行和空文本内容,避免写入无效数据
- 状态提示优化:增加每个URL的处理日志,方便追踪执行进度
内容的提问来源于stack exchange,提问作者Farm Projects
相关产品推荐
相关产品推荐

