【问题标题】:Web Scraping: Page exists but getting 404 using requests/urllibWeb Scraping:页面存在但使用 requests/urllib 获取 404
【发布时间】:2017-10-20 06:14:12
【问题描述】:

我正在尝试抓取以下页面: http://usbcdirectory.com/listing/1-us-black-chambers

我正在使用 python 3.5.0

这是我的代码:

urllib.request.urlopen('http://usbcdirectory.com/listing/1-us-black-chambers')

使用上面我得到 404 not found 错误。但是,当我从浏览器打开时,页面存在。

我尝试搜索这个问题的解决方案,在这里我发现了什么:

1) 将 urllib 更改为 requests :我已经这样做了,并且在状态码中出现 404 错误

>>>requests.get('http://usbcdirectory.com/listing/1-us-black-chambers')

Request <404>

2) 我检查了我的链接是正确的

3) 我试图找出页面是否是使用 javascript 生成的。我相信不是。

这里的网页有什么问题?他们是否以某种方式阻止了抓取,或者这是 url 的问题?

【问题讨论】:

    标签: python-3.x web-scraping


    【解决方案1】:

    如您所料,他们可能会阻止您的请求。您可以传递自定义标头来模拟您的请求,更像是来自真实浏览器的请求:

    import requests
    
    url = 'http://usbcdirectory.com/listing/1-us-black-chambers'
    headers = {'Accept': 'text/html'}
    response = requests.get(url, headers=headers)
    print(response.status_code)
    

    【讨论】:

    • @Ritiek,您提供的解决方案有效。这是一个不错的发现。为此+1。顺便说一句,你能告诉我为什么它不起作用headers={'User-Agent':'Mozilla/5.0'}?通常这是我们在传递这样的标题时模拟浏览器所做的。然而,它没有成功,但你的成功了。
    • @Topto 通常取决于网站要阻止什么样的网络请求。您可以使用mitmproxy 拦截浏览器传递的所有标头,并将它们复制到您的代码中,直到它正常工作为止。
    • @Ritiek,非常感谢。您建议的解决方案有效。
    • @MayankMittal 如果可行,请接受此答案。
    • @SIM 我发现如果我将 User-Agent 设置为“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36”对我来说效果很好。
    猜你喜欢
    • 2018-04-02
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    相关资源
    最近更新 更多