python请求.status_code没有返回正确的值

时间:2014-05-04 03:56:50

标签: python web-scraping python-requests

查看此处的文档:http://docs.python-requests.org/en/latest/user/quickstart/

这应打印200,确实如此。

import requests
r = requests.get('http://souke.xdf.cn/Category/1-40-0-0.html?v=5&page=1&pagesize=50')
print r.status_code

这应打印404,但会打印200

import requests
r = requests.get('http://souke.xdf.cn/CategoryXXX/1-40-0-0.html?v=5&page=1&pagesize=50')
print r.status_code

为什么?

是否有其他方法可以识别发生404错误?

3 个答案:

答案 0 :(得分:3)

问题不在于requests,而是与您正在访问的网站有关。它正在返回200

您可以使用Chrome开发人员工具查看标题来确认这一点:

Request URL:http://souke.xdf.cn/CategoryXXX/1-40-0-0.html?v=5&page=1&pagesize=50
Request Method:GET
Status Code:200 OK

答案 1 :(得分:0)

您要查找的页面位于服务器上,因此服务器响应200 OK。 不过,您可以使用Requests的raise_for_status(),在发现服务器错误时引发异常,例如404,401等。

import requests

>>>>r = requests.get('http://something.com/404/')
>>>>print r.status_code
404
>>>>r.raise_for_status()
Traceback (most recent call last):
File "requests/models.py", line 832, in raise_for_status
raise http_error
requests.exceptions.HTTPError: 404 Client Error

答案 2 :(得分:0)

.raise_for_status()

如果不是200,则会引发错误

这比使用

更好
.status_code