pyspider 每次重试的时候,是不是用的第一次爬取的信息。比如代理,无论retry多少次都是一个代理。

发布于 2022-09-04 13:45:01 字数 723 浏览 10 评论 0

用pyspider写爬虫,发现只要出现错误之后,所有的错误重试都不能够成功。猜测是因为每次重试都用的同一个代理。
代码部分如下

def on_start(self):

 self.crawl(
        'http://he.gsxt.gov.cn/notice/search/ent_announce_unit?announceType=0101&keyword=&pageNo={}&organ='.format(
            1), callback=self.index_page, proxy=hc_proxy(),save={'page':1},headers=self.crawl_config['headers'],connect_timeout=60)

每次通过一个方法调用代理,给crawl进行爬取

clipboard.png
最后的结果就变成这样了

对了我的代理情况是只能用一分钟,一分钟就失效了。
请教到底什么情况造成这样,自己去翻了源码,不过水平有限找不到。

试过其他的代理,用那种squid之类的代理(就是我只需要连接一个服务器,这个服务器帮我分发代理),这种模式可以。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

涙—继续流 2022-09-11 13:45:01

pyspider 不打算实现代理管理,即使我要实现也会新建别的项目。
目前用 squid 就挺好,例如下面就是一个使用 squid 分发 http 代理的配置例子:

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
via off
forwarded_for off

request_header_access From deny all
request_header_access Server deny all
request_header_access WWW-Authenticate deny all
request_header_access Link deny all
request_header_access Cache-Control deny all
request_header_access Proxy-Connection deny all
request_header_access X-Cache deny all
request_header_access X-Cache-Lookup deny all
request_header_access Via deny all
request_header_access X-Forwarded-For deny all
request_header_access Pragma deny all
request_header_access Keep-Alive deny all

include /etc/squid/peers.conf

never_direct allow all

peers.conf 可以这样生成

cache_peer ${IP} parent ${PORT} 0 login=${username}:${password} round-robin proxy-only no-query connect-fail-limit=2
cache_peer ${IP} parent ${PORT} 0 login=${username}:${password} round-robin proxy-only no-query connect-fail-limit=2
cache_peer ${IP} parent ${PORT} 0 login=${username}:${password} round-robin proxy-only no-query connect-fail-limit=2

定时更新 peers.conf 然后 service squid reload 就好了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文