Python中使用urlopen解析URL列表时遇字符串读取错误问题
解决urllib无法识别列表中URL的问题
兄弟,你这问题我太熟了!看你打印出来的URL格式是['premierleague.com/players/3861/player/overview#'],明显是从CSV读出来的每行数据被当成了列表,而不是单独的字符串,urllib的urlopen要的是纯字符串URL,自然会报错。
问题根源
当你用csv.reader读取CSV时,每次循环拿到的row其实是一个列表(哪怕每行只有一个URL),比如:
import csv with open('urls.csv', 'r') as f: reader = csv.reader(f) for row in reader: print(row) # 输出就是 ['xxx.com/xxx'] 这种列表格式
直接把这个列表传给urlopen,它肯定不认啊!
两步解决问题
1. 提取列表中的字符串元素
循环时不要直接用row,而是取row[0],这样就能拿到纯字符串URL了:
import csv from urllib.request import urlopen with open('urls.csv', 'r') as f: reader = csv.reader(f) for row in reader: # 提取列表里的第一个元素,拿到纯字符串URL url = row[0] # 别忘了补全HTTP/HTTPS前缀!很多人栽在这 if not url.startswith(('http://', 'https://')): url = f'https://{url}' try: response = urlopen(url) text = response.read().decode('utf-8') # 这里处理你要的文本内容 print(f"成功获取{url}的内容") except Exception as e: print(f"处理{url}时出错: {str(e)}")
2. 额外检查:URL是否完整
你打印的URL没有http://或https://前缀,这也是urlopen报错的常见原因!一定要补全,不然urllib会把它当成本地路径,肯定找不到。
为什么转字符串没用?
你之前尝试转字符串的话,得到的会是"['premierleague.com/xxx']"这种带括号和引号的字符串,这根本不是有效的URL,当然还是会报错。所以核心是要从列表里把真正的URL字符串取出来,而不是把整个列表转成字符串。
内容的提问来源于stack exchange,提问作者Michal A.
相关产品推荐
相关产品推荐

