【问题标题】:Python requests multithreading "Max Retries exceeded with url" Caused by <class 'socket.gaierror'>Python 请求多线程“最大重试次数超出 url”由 <class 'socket.gaierror'> 引起
【发布时间】:2014-01-03 16:44:27
【问题描述】:

我正在尝试使用 requests 模块和 python 内置的多处理库同时下载一堆 url。将两者一起使用时,我遇到了一些看起来不正确的错误。我用 100 个线程发出了 100 个请求,通常其中 50 个成功结束,而其他 50 个收到此消息:

   TTPConnectionPool(host='www.reuters.com', port=80): Max retries exceeded with url: 
/video/2013/10/07/breakingviews-batistas-costly-bluster?videoId=274054858&feedType=VideoRSS&feedName=Business&videoChannel=5&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+reuters%2FUSVideoBusiness+%28Video+%2F+US+%2F+Business%29 (Caused by <class 'socket.gaierror'>: [Errno 8] nodename nor servname provided, or not known)

最大重试次数和未提供的节点名行看起来都不正确。

这是我的请求设置:

import requests

req_kwargs = {
  'headers' : {'User-Agent': 'np/0.0.1'},
  'timeout' : 7,
  'allow_redirects' : True
}

# I left out the multiprocessing code but that part isn't important
resp = requests.get(some_url, req_kwargs**)

有谁知道如何防止或至少进一步调试此问题?

谢谢。

【问题讨论】:

  • 嘿!你有没有想过代理池的事情?显然,我在 bing.com 上达到了我的最大请求。任何帮助将不胜感激!

标签: python multithreading python-requests


【解决方案1】:

[Errno 8] 提供节点名或服务名,或未知

只是暗示它无法解决 www.reuters.com 将ip解析放在hosts文件或域中

【讨论】:

    【解决方案2】:

    我认为这可能是由于网站不允许的高访问频率造成的。

    尝试以下方法:

    • 只需使用较低的访问频率来抓取该站点,当您再次收到相同的错误时,请在您的网络浏览器中访问该站点,以查看该站点是否已禁止爬虫。
    • 使用代理池对站点进行爬取,防止站点认为您的访问频率很高而禁止您的爬虫。
    • 丰富您的 http 请求标头,使其像 Web 浏览器发出的一样。

    【讨论】:

    • 感谢您的建议。我会尽快标记为答案!我将如何通过请求库在 python 中使用代理池。在线帮助有点不清楚。再次感谢!
    • @LucasOu-Yang,你必须实现自己的代理池,因为没有这么成熟的项目。我写了一个简单的proxy pool project 并用它来爬取一个限制访问频率的网站。如果您对此感兴趣,可以修改settings.yaml 文件以添加包括代理在内的站点以及从此类站点获取代理的规则。之后,Readme.md 文件讲述了一种使用代理池建立代理服务器的简单方法。希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2016-10-12
    • 2016-11-17
    • 2021-04-03
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多