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

Python基础爬虫无法从文本文件读取URL输入问题求助

解决从文本文件读取URL给urllib.request.urlopen时的AttributeError问题

嘿,我来帮你搞定这个问题!你遇到的AttributeError本质是个小疏忽——urllib.request.urlopen()需要的是字符串格式的URL地址,但你直接把open()返回的文件对象(也就是那个_io.TextIOWrapper)传进去了,这个对象根本没有urlopen要找的type属性,所以才会报错。

先看看你原来的错误信息,就是因为这个原因:

Traceback (most recent call last):
File "scrape.py", line 8, in
data = urllib.request.urlopen(url).read()
File "/usr/lib/python3.6/urllib/request.py", line 223, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.6/urllib/request.py", line 518, in open
protocol = req.type
AttributeError: '_io.TextIOWrapper' object has no attribute 'type'

下面是修复后的代码,我还做了一些实用优化:

import re
import urllib.request

# 读取文件中的URL:打开文件后要读取内容,还要清理多余的换行/空格
with open('input.txt', 'r') as url_file:
    # 读取第一行并去除首尾空白(包括换行符),确保URL是干净的字符串
    url = url_file.readline().strip()

# 现在url是合法的字符串URL,可以正常传给urlopen了
data = urllib.request.urlopen(url).read()
data1 = data.decode("utf8")
print(data1)

# 用with语句写入文件,自动关闭,更安全
with open('output.txt' , 'w') as output_file:
    output_file.write(data1)

几个需要注意的关键点:

  • 一定要从文件对象里读取内容(用read()/readline()),不能直接把文件对象传给urlopen
  • strip()很重要!文本文件里的URL后面大概率会有换行符\n,直接用的话会导致URL无效,这个方法能帮你去掉首尾的空白字符
  • 推荐用with语句操作文件,它会在代码块结束后自动关闭文件,比手动调用close()更靠谱,避免资源泄漏

如果你的input.txt里有多行URL,可以这样批量处理:

import re
import urllib.request

with open('input.txt', 'r') as url_file:
    # 过滤空行,把每行的URL都清理干净
    urls = [line.strip() for line in url_file if line.strip()]

for url in urls:
    try:
        data = urllib.request.urlopen(url).read()
        data1 = data.decode("utf8")
        print(f"成功爬取 {url}")
        # 可以把每个URL的内容写到不同文件,或者追加到同一个文件
        with open(f'{url.split("//")[-1].split("/")[0]}_output.txt' , 'w') as output_file:
            output_file.write(data1)
    except Exception as e:
        print(f"爬取 {url} 失败: {str(e)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:50:42