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

从文本文件读取URL爬取网页时的400错误与AttributeError问题

问题分析与修复:从文本文件读取URL批量爬取时的400错误与AttributeError

我来帮你拆解下问题根源和修复方法:

为什么从文本文件读取链接会出问题?

核心问题出在文件读取时的换行符和空白字符:

  • 当你用open()直接读取文件的每一行时,每行末尾会自带换行符(Windows是\r\n,Linux/macOS是\n),这些字符会被当成URL的一部分,导致你请求的是类似https://xxx.com\n的无效地址,服务器自然返回400错误。
  • 如果你的article_links.txt里有空行,读取后会得到空字符串,请求空字符串也会触发400错误,进而导致html找不到目标元素变成None,调用html.text就会抛出AttributeError。

而你单独测试或把链接手动放进列表时,肯定是去掉了这些多余字符的,所以能正常运行。

修复方案

修改代码,重点处理读取到的每行内容,同时增加基础的错误处理:

import requests
from inscriptis import get_text
from bs4 import BeautifulSoup

# 用with语句自动管理文件关闭,更安全
with open(r'C:\Users\h473\Documents\Crawling\article_links.txt', "r", encoding="utf-8") as links:
    for line in links:
        # 去掉前后空白字符(换行、空格、制表符等)
        url = line.strip()
        # 跳过空行
        if not url:
            continue
        print(f"正在处理链接: {url}")
        try:
            page = requests.get(url)
            # 检查请求是否成功,失败则抛出异常
            page.raise_for_status()
            soup = BeautifulSoup(page.text, 'lxml')
            html = soup.find(class_='article-wrap')
            if html is None:
                html = soup.find(class_='mag-article-wrap')
            # 再次检查html是否存在,避免AttributeError
            if html:
                text = get_text(html.text)
                print(text)
            else:
                print(f"警告:链接 {url} 未找到目标内容容器")
        except requests.exceptions.RequestException as e:
            print(f"请求链接 {url} 失败: {str(e)}")

关键改进点

  • 用strip()清理每行的空白字符,确保URL是干净的有效地址。
  • 增加空行判断,跳过无效的空内容,避免无意义的请求。
  • 使用with语句管理文件,避免忘记关闭文件,同时代码更简洁安全。
  • 加入page.raise_for_status()主动触发请求异常,方便捕获400/500等HTTP错误。
  • 增加html的二次判断,即使请求成功但找不到目标元素,也不会直接崩溃,而是给出明确提示。

内容的提问来源于stack exchange,提问作者Kristada673

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:57:36