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

使用Python和Beautiful Soup读取TXT批量抓取多网页数据报错求助

解决URL循环抓取时的"unknown url type"错误

嘿,我一眼就发现你代码里的问题啦!你现在的问题出在读取URL文件的方式不对,导致循环的时候拿到的不是完整的URL,而是单个字符,这才触发了那个奇怪的错误。

错误原因分析

你用了urls = f.read(),这会把整个urls.txt文件的内容一次性读成一个大字符串。然后for url in urls会逐个遍历这个字符串里的每个字符——比如你的URL是https://example.com,循环时会先拿到h,再拿到t,以此类推。把单个字符传给urlopen,它当然识别不出这是合法的URL类型,自然就报错了。

修正后的代码

你需要按行读取文件里的URL,有两种简单的方式:

方式1:遍历文件对象本身(推荐)

文件对象本身就是可迭代的,直接循环它就能逐行读取:

from urllib2 import urlopen
from bs4 import BeautifulSoup as soup

with open('urls.txt', 'r') as f:
    # 逐行读取文件,自动处理换行
    for url in f:
        # 去掉每行末尾的换行符和前后空白(比如空行的情况)
        clean_url = url.strip()
        # 跳过空行,避免处理无效内容
        if not clean_url:
            continue
        try:
            uClient = urlopen(clean_url)
            page_html = uClient.read()
            uClient.close()
            page_soup = soup(page_html, "html.parser")
            # 这里写你的表格抓取逻辑
            print(f"成功处理URL: {clean_url}")
        except Exception as e:
            print(f"处理URL {clean_url} 时出错: {str(e)}")

方式2:用readlines()读取所有行

这种方式会把所有行读到一个列表里,再循环列表:

from urllib2 import urlopen
from bs4 import BeautifulSoup as soup

with open('urls.txt', 'r') as f:
    # 读取所有行,返回列表
    urls = f.readlines()
    for url in urls:
        clean_url = url.strip()
        if not clean_url:
            continue
        try:
            uClient = urlopen(clean_url)
            page_html = uClient.read()
            uClient.close()
            page_soup = soup(page_html, "html.parser")
            # 表格抓取逻辑
            print(f"成功处理URL: {clean_url}")
        except Exception as e:
            print(f"处理URL {clean_url} 时出错: {str(e)}")

额外注意事项

  • 一定要用strip()处理每行的内容,因为文件里的每行末尾都会有换行符\n,直接传给urlopen也会导致URL无效。
  • 添加try-except块可以捕获单个URL处理失败的情况,不会因为某一个URL出错就导致整个程序崩溃。
  • 如果你的urls.txt里有空白行,记得用if not clean_url: continue跳过,避免处理空字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:21:06