当前位置: 首页 > 知识库问答 >
问题:

urllib:打开一个url总是得到429:太多请求

谢铭
2023-03-14

我刚刚开始使用网址模块。我试图从超市抓取产品,有一个网站似乎总是以HTTP错误429响应:请求太多。我已经对堆栈溢出进行了一些研究,似乎没有人有同样的问题。我的代码非常简单:

>>> import urllib.request
>>> resp = urllib.request.urlopen("https://shop.coles.com.au/a/a-national/product/head-shoulders-shampoo-conditioner-2in1-deep-clean")
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    resp = urllib.request.urlopen("https://shop.coles.com.au/a/a-national/product/head-shoulders-shampoo-conditioner-2in1-deep-clean")
  File "C:\Users\thank\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 222, in urlopen
return opener.open(url, data, timeout)
  File "C:\Users\thank\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 531, in open
response = meth(req, response)
  File "C:\Users\thank\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 640, in http_response
'http', request, response, code, msg, hdrs)
  File "C:\Users\thank\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 568, in error
return self._call_chain(*args)
  File "C:\Users\thank\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 503, in _call_chain
result = func(*args)
  File "C:\Users\thank\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 648, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 429: Too Many Requests

我也试图按照这个答案的建议修改用户代理,但是结果还是一样

有人能解释一下urllib模块内部的哪些默认设置可能导致这个问题吗?还是因为网站屏蔽了僵尸程序?网站的其他产品页面也不行。

共有1个答案

太叔岳
2023-03-14

429是服务器要求您停止。基本上,web服务器认为您正在尝试垃圾邮件或垃圾信息,但它并不喜欢。通常,您应该尊重服务器,如果在一段时间后有429响应的尝试,您应该遵循它。

如果您认为服务器错误地询问了您,则可以确保您的用户请求与用户从浏览器生成的用户请求**相似“,其中包括用户代理以及常规浏览器将随请求一起发送的所有其他信息。如果服务器向您发送429,尽管它很可能暂时或永久地阻止了您的IP。在这一点上,你应该看看如何刮擦多个ip。

 类似资料:
  • 问题内容: 我正在尝试在C#中将PhantomJS与Selenium Webdriver一起使用。以下是我的代码: 该代码可以正常工作,但是只要运行,它就会打开一个cmd窗口,其中显示了phantomjs的所有日志。该cmd也用关闭。 问题是我不希望显示cmd窗口。我应该怎么做才能做到这一点? 更新:当我在Python中执行相同的代码时,cmd窗口不显示。但是,如果我使用py2exe将python

  • 问题内容: 我正在用Java进行游戏,只是将所有与窗口相关的代码从基于java.awt重写为javax.swing。不久之后,我意识到事情变得有些复杂了,因此我做了一些研究,发现了如何绘制事物,如何设置JFrame的大小等。但是由于某种原因,我的JFrame的大小总是比我指定的尺寸超出10像素。在这种情况下,我希望它是640 x 640像素。 这是我的代码: 当我运行它时,即使我调用setPref

  • 我有一个错误:PHP无法打开流:打开的文件太多。 我在这里查看了stackoverflow的各种答案,但我无法解决这个问题。我主要尝试增加最大打开文件数的限制: 我已编辑/等/安全/限制。conf,其中我指定了: 保存并注销/重新启动该框后,命令: 仍打印出1024个。我不知道为什么这没有效果,我想这就是我得到php错误的原因。如果需要,我可以粘贴整个文件或任何其他配置文件。我使用的是PHP 5.

  • 问题内容: 我使用多个文件来执行一些文件I / O(写入19个文件,确实如此)。写他们几百次后,我得到了。但实际上我一次只能打开几个文件。这里有什么问题?我可以验证写入是否成功。 问题答案: 在Linux和其他UNIX /类似UNIX的平台上,操作系统对进程在任何给定时间可能具有的打开文件描述符的数量进行了限制。在过去,此限制曾经是硬接线1,并且相对较小。如今,它要大得多(几百/千),并且受“软”

  • 问题内容: 我写了一种测试套件,它占用大量文件。一段时间(2h)之后,我得到了。我仔细检查了所有文件句柄是否再次关闭它们。但是错误仍然存​​在。 我试图找出使用允许的文件描述符的数量以及当前打开的文件描述符的数量: 因此,如果我运行以下测试: 我得到以下输出: 真奇怪,我期望打开的文件描述符会越来越多。我的脚本正确吗? 我正在使用python的记录器和子进程。那可能是我FD泄漏的原因吗? 谢谢,丹

  • 我们最近在尝试访问Unix服务器中的weblogic控制台时遇到了一个问题,我们将得到: 错误503--服务不可用 在日志文件中,它会指出: 原因:java。io。FileNotFoundException:/opt/weblogic1036/wlserver\u 10.3/server/lib/co 在谷歌上搜索了一番后,我找到了一个解决方案,其中指出/etc/security/limits。c