ysrc / ChromeExtensionSpider

Google Extension WebStore 爬虫,crx文件下载和内容解析 By Nearg1e

Home Page:http://mp.weixin.qq.com/s/HHPxGTk55oEw0Pj4TRg6FA

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

尝试10次的问题

yeahx opened this issue · comments

为什么不用requests的HTTPAdapter,非要自己去实现一个wrapper去尝试10次。。

def do_ten_times_til_true(func):
    def _do_ten_times_til_true(*args, **kwargs):
        ret = False
        for i in range(10):
            try:
                ret = func(*args, **kwargs)
            except Exception as e:
                ret = False
                print(str(e))
            if ret:
                break
        return ret
    return _do_ten_times_til_true

HTTPAdapter

      >>> import requests
      >>> s = requests.Session()
      >>> a = requests.adapters.HTTPAdapter(max_retries=3)
      >>> s.mount('http://', a)

感谢提出这么好的建议,受教!

说来惭愧,最主要的原因是我对HTTPAdapter并不熟悉,虽然知道有max_retries,但是之前并没有用过。
再者就是需要处理非200的情况,我的程序在测试阶段的时候是经过proxychains访问的google webstore,有时会出现301和401两种情况。一个是代理访问的时候会经常出现的问题,暂时不知道如何解决;另一个是部分请求会要求登录,这个出现的概率不多。而且我无法确定经过proxychains之后,max_retries的可行性,所以最终没有使用这个方案。

这wrapper确实不算优雅,我的想法里最好的方法应该是,定义一个类继承HTTPAdapter,然后重写HTTPAdapter.send函数,以时间而不是以次数为重新请求的标准。这是我心中比较优雅的实现。
只是我当时急于拿到数据来验证我们插件探针的想法,而不是写一个工具。click还是后来我抽时间加上去的。写的时候,把更多的时间用来对付webstore和crx包的特殊情况了。

确实在很多地方没做好,如果有时间会重新实现这一块的内容。也很欢迎pull requests~

其实是过来膜拜的~ 无意间发现这个的,当时也没考虑过非200的情况_(:з」∠)_
ysrc一股清流,期待你们更多的开源程序!