Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在循环时,request.get返回400响应——即使URL仍然相同_Python_Python 3.x_Python Requests - Fatal编程技术网

Python 在循环时,request.get返回400响应——即使URL仍然相同

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[

我试图在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[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")))