python - 如果 URL 存在,则检查 Python

标签 python facebook url http-status-code-404 python-requests

关于这个主题有很多关于 SO 的问题,但没有一个能回答以下问题。使用 Python 请求检查普通 URL 可以很容易地完成,如下所示:

print requests.head('https://www.facebook.com/pixabay').status_code

状态代码 200 表示页面存在。在这种特殊情况下,它是 Facebook 上的一个粉丝页面。

使用 Facebook 上的普通用户个人资料尝试此操作也可以:
print requests.head('https://www.facebook.com/steinberger.simon').status_code

但是,尽管普通浏览器返回 200,但仍有(看似随机的)用户配置文件导致 404 状态代码:
print requests.head('https://www.facebook.com/drcarl').status_code

使用带有 User-Agent 字符串的自定义 header 或使用其他方法检查 URL 都会以同样的方式失败:
import requests, urllib, urllib2

url = 'https://www.facebook.com/drcarl'

print requests.head(url).status_code

# using an User-Agent string
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36' }
print requests.head(url, headers=headers).status_code

# using GET instead if HEAD as request method
print requests.get(url, stream=True).status_code

# using urllib
print urllib.urlopen(url).getcode()

# using urllib2
try:
    r = urllib2.urlopen(url)
    print r.getcode()
except urllib2.HTTPError as e:
    print e.code

还有其他一些 URL 示例,使用上述方法莫名其妙地失败了。其中之一是:http://www.rajivbajaj.net/
它在所有浏览器中与 200 状态代码完美配合,但对于上述所有 Python 方法会导致 403。

我正在尝试编写一个可靠的 URL 验证器,但我不明白为什么这些 URL 未通过这些测试。有任何想法吗?

最佳答案

我认为浏览器和python编写的代码的区别在于底层的HTTP请求。
python 代码应该无法工作,因为构造的 HTTP 请求与浏览器生成的请求不完全相同。

添加客户标题(使用您提供的标题)

print requests.get(url, headers=headers).status_code

它适用于我本地的 url http://www.rajivbajaj.net/ , 得到 200。

在这个例子中,我猜网站对某些用户代理做了一些特别的事情。

关于python - 如果 URL 存在,则检查 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26273941/

相关文章:

javascript - 在 JavaScript 中使用正则表达式提取 URL 的特定部分

excel - 截断Excel中@部分的电子邮件文本字符串

python - 从 pandas 数据框中提取值(value)进行数学运算的最佳方法

python - 如何将每个 Scrapy 蜘蛛项目与另一个 Scrapy 蜘蛛项目进行比较?

facebook - Android facebook 向 friend 发送挑战/应用请求

Iphone,始终将 Facebook 应用程序的受众设置为公开

url - Grails-在操作完成之前捕获URL

python - VBA 中的 HMAC-SHA1 URL 加密产生不正确的输出

php仅将数组中的变量返回到网页中

iphone - Facebook 和 Twitter 与 iPhone 应用程序的集成无法在设备上运行