【问题标题】:Python requests.get only responds if I don't specify page numberPython requests.get 仅在我未指定页码时响应
【发布时间】:2021-06-02 01:24:03
【问题描述】:

我正在使用请求和漂亮的汤用 python 抓取网络数据。我发现我正在抓取的 2 个网站只有在我没有指定页码的情况下才会响应。

以下代码有效,并允许我提取所需的数据:

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)}

r = requests.get('https://www.milkround.com/jobs/graduate-software-engineer', headers = headers)
soup = BeautifulSoup(r.content, 'html5lib')
table = soup.find('div', attrs = {'class':'col-xs-12 job-results clearfix'})

但是,如果我更改链接以指定页码,例如:

r = requests.get('https://www.milkround.com/jobs/graduate-software-engineer?page=2', headers = headers)

然后请求永远不会响应。没有错误代码,控制台只是无限期地等待。这是什么原因造成的,我该如何解决?

编辑:我手动以隐身模式打开了该网站。似乎在使用页码打开时,我得到了“拒绝访问”响应,但如果我刷新页面,它会让我进入?

【问题讨论】:

标签: python html beautifulsoup


【解决方案1】:

那是因为如果您看到,您无法从外部访问网站上的页码。因此,如果您已登录并拥有某种 cookie,请将其添加到您的标题中。

我刚刚在网站上查看的是您尝试访问错误的 URI。没有页码。您是否添加了自己的 ?page=?

【讨论】:

  • 有页码点击第二页
  • 作为第一个建议,由于某些 cookie 值,您可能能够访问这些页面,因此您也可以将它们添加到标题中。在我这边它没有打开,所以我无法深入挖掘
【解决方案2】:

您要解决的问题是关于网络抓取。在您的情况下,您拥有的网页会被阻塞,因为您的标头声明缺少正确的用户代理定义。

要使其工作,您需要包含这样的用户代理声明:

headers={'user-agent':'Mozilla/5.0 (Linux; U; Android 0.5; en-us) AppleWebKit/522+ (KHTML, like Gecko) Safari/419.3',}

您可以在这里更深入地研究编写好的网络爬虫的问题: https://towardsdatascience.com/5-strategies-to-write-unblock-able-web-scrapers-in-python-5e40c147bdaf

可以在此处找到适当的用户代理列表: https://webscraping.com/blog/User-agents/

希望它能帮助您解决问题。

【讨论】:

    猜你喜欢
    • 2013-04-18
    • 2016-03-28
    • 2017-03-18
    • 2020-03-28
    • 1970-01-01
    • 2018-07-31
    • 2018-06-08
    • 1970-01-01
    • 2020-03-30
    相关资源
    最近更新 更多