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

Python读取txt链接搜网页关键词存TXT时报No scheme supplied错误

报错原因

你看到的No scheme supplied报错核心触发点是传参错误:

  • 循环遍历文件对象list_of_pages时,你取到的单个链接存放在page_link变量里,但调用requests.get()时传入的是整个文件对象list_of_pages,而非单个链接。requests会尝试把传入的文件对象转成字符串当URL解析,自然识别不到http/https协议头,就抛出了这个报错。

除此之外你的代码还存在其他会导致运行异常的问题:

  • 读取文件行时没有去除首尾的换行符、空白字符,拼接后的URL会带多余字符导致请求失败
  • 逻辑中出现未定义的url变量和无意义的POST请求,和你要实现的需求完全无关
  • 匹配到关键词时写入的是请求响应对象的字符串,而非原始链接;未匹配到关键词时response变量未定义,会触发NameError
  • 打开文件时未显式指定编码,默认用系统cp1250编码读取可能出现乱码,且没有手动关闭文件的逻辑,容易出现资源泄漏
  • 请求网页时没有设置超时、异常捕获,碰到链接失效、反爬拦截时会直接中断程序
修复后可直接运行的代码
import requests

# 要搜索的关键词
TARGET_WORD = "Word"
# 请求头模拟普通浏览器,避免被基础反爬拦截
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

# 用with上下文管理器自动处理文件关闭,显式指定utf8编码
with open('import.txt', 'r', encoding='utf-8') as f_in, open('output.txt', 'w', encoding='utf-8') as f_out:
    # 逐行读取链接,去除首尾空白、换行
    for line in f_in:
        page_link = line.strip()
        # 跳过空行
        if not page_link:
            continue
        try:
            # 传入正确的单个链接变量,设置超时时间
            res = requests.get(page_link, headers=HEADERS, timeout=10)
            # 自动根据页面头设置编码,避免乱码导致关键词匹配失败
            res.encoding = res.apparent_encoding
            # 判断关键词是否存在于页面文本中
            if TARGET_WORD in res.text:
                # 把符合要求的链接写入输出文件
                f_out.write(page_link + "\n")
                print(f"匹配成功,已保存链接:{page_link}")
        except Exception as e:
            print(f"请求链接{page_link}出错:{str(e)}")
            continue
代码说明
  • 用with语句管理文件读写,不需要手动调用close,程序自动释放文件资源
  • 逐行读取链接后用strip()去掉换行、空格,跳过空行避免无效请求
  • 增加了基础请求头和超时设置,降低被反爬拦截、程序卡死的概率
  • 加了异常捕获,单个链接请求失败不会中断整个程序
  • 匹配到关键词后直接写入原始链接,完全符合需求
  • 输出文件用w模式打开,不需要额外调用truncate清空,打开时自动覆盖旧内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:36:20