Python 在循环时,request.get返回400响应——即使URL仍然相同
我试图在URL列表上循环,以获得所有页面的图像URL。但是,当使用循环时,请求返回400。当我测试单个URL时,它可以正常工作(200)。第一次呼叫后失败 尝试添加时间延迟,但仍然不起作用Python 在循环时,request.get返回400响应——即使URL仍然相同,python,python-3.x,python-requests,Python,Python 3.x,Python Requests,我试图在URL列表上循环,以获得所有页面的图像URL。但是,当使用循环时,请求返回400。当我测试单个URL时,它可以正常工作(200)。第一次呼叫后失败 尝试添加时间延迟,但仍然不起作用 f = open(url_file) lineList = f.readlines() print(lineList[0]) # Test i = 1 for url in lineList: print(url) # Test -- the url is the same as lineList[
f = open(url_file)
lineList = f.readlines()
print(lineList[0]) # Test
i = 1
for url in lineList:
print(url) # Test -- the url is the same as lineList[0] above
res = requests.get(url) # works when copied the printed url in but not as a variable
预期为200--错误为400使用urllib2并更改存储网页的txtfile的地址: URL的示例源: 输出:
200
200
解释
如果url\u文件
以换行符(\n
字符)作为行分隔符,则可能会导致服务器的响应不稳定。这是因为\n
不会被f.readlines()
自动从每行末尾剥离。有些服务器会忽略URL中的此字符并返回200 OK
,有些则不会
例如:
f=open(r“C:\data\1.txt”)#以换行符作为行分隔符的文本文件
URL列表=f.readlines()
打印(URL列表)
输出
['https://habr.com/en/users/\n','https://stackoverflow.com/users\n']
如果您在上面这些URL上运行requests.get()
,您将分别收到404
和400
HTTP状态代码。如果最后没有\n
,则它们是有效的现有网页-您可以自己检查
您在代码中没有注意到这些额外的\n
,因为您在每个项目上使用了print()
,而这些项目没有将此符号“显式”显示为\n
如何修复
使用splitlines()
而不是readlines()
来摆脱结尾处的\n
:
导入请求
打开(url_文件)作为f:
URL列表=f.read().splitlines()#读取不带行分隔符的文件
对于\u url列表中的url:
res=requests.get(url)
打印(res.status_代码)
使用生成器的另一个选项:
URL的示例源:
输出:
200
200
200 200
“当我测试单个URL时”这到底是什么意思?在我看来,你好像在添加URL列表。文件中的第一个可能有效,但是(例如)第二个有效吗?文件中的所有行是否都是有效的URL?能否发布行列表的示例?
import requests
import urllib.request as urllib2
print(*(requests.get(u).status_code for u in urllib2.urlopen('http://mign.pl/ver.txt').read().decode("utf-8").split("\n")))