如何编写循环遍历TXT文件中的URL列表实现批量数据抓取
问题原因
你现有代码的核心问题是页面请求、解析逻辑写在了URL遍历循环的外部,循环仅会逐行覆盖url变量值,最终仅会处理TXT文件的最后一行URL。
修改后的完整代码
from bs4 import BeautifulSoup from urllib.request import urlopen import requests import pandas as pd import numpy as np import json import matplotlib.pyplot as plt from bs4 import Comment import re import rispy # 用于写入ris文件 import time # 可选,用于控制请求频率 # 初始化列表存储所有页面的提取结果,可根据实际需求调整 all_data = [] # 此处替换为你实际存储URL的TXT文件路径 with open(r'F:\Python\Python-FilePy-Thesis-DownLoad/Thesis2.txt', 'r', encoding='utf-8') as f: for line in f: url = line.strip() # 跳过空行 if not url: continue try: # 增加超时设置,避免长时间卡住 html = requests.get(url, timeout=10).text soup = BeautifulSoup(html, "html.parser") # ---------------------- # 此处替换为你原来单页面的信息提取逻辑 # 示例:假设提取页面标题、正文等 # page_title = soup.title.string if soup.title else '' # 提取完成后把结果追加到总列表 # all_data.append({'url': url, 'title': page_title, 其他字段...}) # ---------------------- # 可选:打印进度 print(f"{url} 处理完成") # 可选:控制请求频率,避免触发反爬,单位为秒 # time.sleep(2) except Exception as e: print(f"{url} 处理失败,错误信息:{str(e)}") continue # 全部爬取完成后统一导出数据,示例为存为csv,你也可以根据需求改为存ris等格式 if all_data: df = pd.DataFrame(all_data) df.to_csv('爬取结果.csv', index=False, encoding='utf-8-sig')
核心修改说明
- 缩进调整:将页面请求、解析、数据提取的逻辑全部缩进放入URL遍历循环内部,保证每个URL都被单独处理
- 异常捕获:增加了请求异常捕获逻辑,单个URL访问/解析失败不会中断整个爬取任务
- 数据汇总:新增了全局存储列表,所有页面的提取结果会统一汇总后导出,避免单页结果被覆盖
注意事项
- 可根据你的实际单页提取逻辑替换代码中注释标记的对应位置
- 请根据目标站点的反爬规则合理调整请求频率
- 文件路径前加
r是为了避免Windows路径的转义字符问题
内容的提问来源于stack exchange,提问作者M. Zain Aldin
相关产品推荐
相关产品推荐

