You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写循环遍历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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:45:03