{ "info": { "author": "Mikhail Korobov", "author_email": "kmike84@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Framework :: Scrapy", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "scrapy-rotating-proxies\n=======================\n\n.. image:: https://img.shields.io/pypi/v/scrapy-rotating-proxies.svg\n :target: https://pypi.python.org/pypi/scrapy-rotating-proxies\n :alt: PyPI Version\n\n.. image:: https://travis-ci.org/TeamHG-Memex/scrapy-rotating-proxies.svg?branch=master\n :target: http://travis-ci.org/TeamHG-Memex/scrapy-rotating-proxies\n :alt: Build Status\n\n.. image:: http://codecov.io/github/TeamHG-Memex/scrapy-rotating-proxies/coverage.svg?branch=master\n :target: http://codecov.io/github/TeamHG-Memex/scrapy-rotating-proxies?branch=master\n :alt: Code Coverage\n\nThis package provides a Scrapy_ middleware to use rotating proxies,\ncheck that they are alive and adjust crawling speed.\n\n.. _Scrapy: https://scrapy.org/\n\nLicense is MIT.\n\nInstallation\n------------\n\n::\n\n pip install scrapy-rotating-proxies\n\nUsage\n-----\n\nAdd ``ROTATING_PROXY_LIST`` option with a list of proxies to settings.py::\n\n ROTATING_PROXY_LIST = [\n 'proxy1.com:8000',\n 'proxy2.com:8031',\n # ...\n ]\n\nAs an alternative, you can specify a ``ROTATING_PROXY_LIST_PATH`` options\nwith a path to a file with proxies, one per line::\n\n ROTATING_PROXY_LIST_PATH = '/my/path/proxies.txt'\n\n``ROTATING_PROXY_LIST_PATH`` takes precedence over ``ROTATING_PROXY_LIST``\nif both options are present.\n\nThen add rotating_proxies middlewares to your DOWNLOADER_MIDDLEWARES::\n\n DOWNLOADER_MIDDLEWARES = {\n # ...\n 'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,\n 'rotating_proxies.middlewares.BanDetectionMiddleware': 620,\n # ...\n }\n\nAfter this all requests will be proxied using one of the proxies from\nthe ``ROTATING_PROXY_LIST`` / ``ROTATING_PROXY_LIST_PATH``.\n\nRequests with \"proxy\" set in their meta are not handled by\nscrapy-rotating-proxies. To disable proxying for a request set\n``request.meta['proxy'] = None``; to set proxy explicitly use\n``request.meta['proxy'] = \"\"``.\n\n\nConcurrency\n-----------\n\nBy default, all default Scrapy concurrency options (``DOWNLOAD_DELAY``,\n``AUTHTHROTTLE_...``, ``CONCURRENT_REQUESTS_PER_DOMAIN``, etc) become\nper-proxy for proxied requests when RotatingProxyMiddleware is enabled.\nFor example, if you set ``CONCURRENT_REQUESTS_PER_DOMAIN=2`` then\nspider will be making at most 2 concurrent connections to each proxy,\nregardless of request url domain.\n\nCustomization\n-------------\n\n``scrapy-rotating-proxies`` keeps track of working and non-working proxies,\nand re-checks non-working from time to time.\n\nDetection of a non-working proxy is site-specific.\nBy default, ``scrapy-rotating-proxies`` uses a simple heuristic:\nif a response status code is not 200, response body is empty or if\nthere was an exception then proxy is considered dead.\n\nYou can override ban detection method by passing a path to\na custom BanDectionPolicy in ``ROTATING_PROXY_BAN_POLICY`` option, e.g.::\n\n # settings.py\n ROTATING_PROXY_BAN_POLICY = 'myproject.policy.MyBanPolicy'\n\nThe policy must be a class with ``response_is_ban``\nand ``exception_is_ban`` methods. These methods can return True\n(ban detected), False (not a ban) or None (unknown). It can be convenient\nto subclass and modify default BanDetectionPolicy::\n\n # myproject/policy.py\n from rotating_proxies.policy import BanDetectionPolicy\n\n class MyPolicy(BanDetectionPolicy):\n def response_is_ban(self, request, response):\n # use default rules, but also consider HTTP 200 responses\n # a ban if there is 'captcha' word in response body.\n ban = super(MyPolicy, self).response_is_ban(request, response)\n ban = ban or b'captcha' in response.body\n return ban\n\n def exception_is_ban(self, request, exception):\n # override method completely: don't take exceptions in account\n return None\n\nInstead of creating a policy you can also implement ``response_is_ban``\nand ``exception_is_ban`` methods as spider methods, for example::\n\n class MySpider(scrapy.Spider):\n # ...\n\n def response_is_ban(self, request, response):\n return b'banned' in response.body\n\n def exception_is_ban(self, request, exception):\n return None\n\nIt is important to have these rules correct because action for a failed\nrequest and a bad proxy should be different: if it is a proxy to blame\nit makes sense to retry the request with a different proxy.\n\nNon-working proxies could become alive again after some time.\n``scrapy-rotating-proxies`` uses a randomized exponential backoff for these\nchecks - first check happens soon, if it still fails then next check is\ndelayed further, etc. Use ``ROTATING_PROXY_BACKOFF_BASE`` to adjust the\ninitial delay (by default it is random, from 0 to 5 minutes). The randomized\nexponential backoff is capped by ``ROTATING_PROXY_BACKOFF_CAP``.\n\nSettings\n--------\n\n* ``ROTATING_PROXY_LIST`` - a list of proxies to choose from;\n* ``ROTATING_PROXY_LIST_PATH`` - path to a file with a list of proxies;\n* ``ROTATING_PROXY_LOGSTATS_INTERVAL`` - stats logging interval in seconds,\n 30 by default;\n* ``ROTATING_PROXY_CLOSE_SPIDER`` - When True, spider is stopped if\n there are no alive proxies. If False (default), then when there is no\n alive proxies all dead proxies are re-checked.\n* ``ROTATING_PROXY_PAGE_RETRY_TIMES`` - a number of times to retry\n downloading a page using a different proxy. After this amount of retries\n failure is considered a page failure, not a proxy failure.\n Think of it this way: every improperly detected ban cost you\n ``ROTATING_PROXY_PAGE_RETRY_TIMES`` alive proxies. Default: 5.\n\n It is possible to change this option per-request using\n ``max_proxies_to_try`` request.meta key - for example, you can use a higher\n value for certain pages if you're sure they should work.\n* ``ROTATING_PROXY_BACKOFF_BASE`` - base backoff time, in seconds.\n Default is 300 (i.e. 5 min).\n* ``ROTATING_PROXY_BACKOFF_CAP`` - backoff time cap, in seconds.\n Default is 3600 (i.e. 60 min).\n* ``ROTATING_PROXY_BAN_POLICY`` - path to a ban detection policy.\n Default is ``'rotating_proxies.policy.BanDetectionPolicy'``.\n\n\nFAQ\n---\n\nQ: Where to get proxy lists? How to write and maintain ban rules?\n\nA: It is up to you to find proxies and maintain proper ban rules\nfor web sites; ``scrapy-rotating-proxies`` doesn't have anything built-in.\nThere are commercial proxy services like https://crawlera.com/ which can\nintegrate with Scrapy (see https://github.com/scrapy-plugins/scrapy-crawlera)\nand take care of all these details.\n\nContributing\n------------\n\n* source code: https://github.com/TeamHG-Memex/scrapy-rotating-proxies\n* bug tracker: https://github.com/TeamHG-Memex/scrapy-rotating-proxies/issues\n\nTo run tests, install tox_ and run ``tox`` from the source checkout.\n\n.. _tox: https://tox.readthedocs.io/en/latest/\n\n----\n\n.. image:: https://hyperiongray.s3.amazonaws.com/define-hg.svg\n :target: https://www.hyperiongray.com/?pk_campaign=github&pk_kwd=scrapy-rotating-proxies\n :alt: define hyperiongray\n\n\nCHANGES\n=======\n\n0.6.2 (2019-05-25)\n------------------\n\n* ``mean_backoff_time`` stats are always returned as float, to make\n saving stats in databases easier.\n\n0.6.1 (2019-04-03)\n------------------\n\n* Fixed incorrect \"proxies/good\" stats values.\n\n0.6 (2018-12-28)\n----------------\n\nProxy information is added to scrapy stats:\n\n* proxies/unchecked\n* proxies/reanimated\n* proxies/dead\n* proxies/good\n* proxies/mean_backoff\n\n0.5 (2017-10-09)\n----------------\n\n* ``ROTATING_PROXY_LIST_PATH`` option allows to pass file name\n with a proxy list.\n\n0.4 (2017-06-06)\n----------------\n\n* ``ROTATING_PROXY_BACKOFF_CAP`` option allows to change max backoff time\n from the default 1 hour.\n\n0.3.2 (2017-06-05)\n------------------\n\n* fixed proxy authentication issue.\n\n0.3.1 (2017-03-20)\n------------------\n\n* fixed OverflowError during backoff computation.\n\n0.3 (2017-03-14)\n----------------\n\n* redirects with empty bodies are no longer considered bans\n (thanks Diga Widyaprana).\n* ``ROTATING_PROXY_BAN_POLICY`` option allows to customize ban detection\n for all spiders.\n\n0.2.3 (2017-03-03)\n------------------\n\n* ``max_proxies_to_try`` request.meta key allows to override\n ``ROTATING_PROXY_PAGE_RETRY_TIMES`` option per-request.\n\n0.2.2 (2017-03-01)\n------------------\n\n* Update default ban detection rules: scrapy.exceptions.IgnoreRequest\n is not a ban.\n\n0.2.1 (2017-02-08)\n------------------\n\n* changed ``ROTATING_PROXY_PAGE_RETRY_TIMES`` default value - it is now 5.\n\n0.2 (2017-02-07)\n----------------\n\n* improved default ban detection rules;\n* log ban stats.\n\n0.1 (2017-02-01)\n----------------\n\nInitial release", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/TeamHG-Memex/scrapy-rotating-proxies", "keywords": "", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "scrapy-rotating-proxies", "package_url": "https://pypi.org/project/scrapy-rotating-proxies/", "platform": "", "project_url": "https://pypi.org/project/scrapy-rotating-proxies/", "project_urls": { "Homepage": "https://github.com/TeamHG-Memex/scrapy-rotating-proxies" }, "release_url": "https://pypi.org/project/scrapy-rotating-proxies/0.6.2/", "requires_dist": null, "requires_python": "", "summary": "Rotating proxies for Scrapy", "version": "0.6.2" }, "last_serial": 5316500, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "034a9456d79d085253ac74d4f0289170", "sha256": "bd4c6b5f4b7819396172e57fa4069060b338e04da29102b0e71f9a03a1cf9613" }, "downloads": -1, "filename": "scrapy_rotating_proxies-0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "034a9456d79d085253ac74d4f0289170", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 10521, "upload_time": "2017-02-01T16:35:32", "url": "https://files.pythonhosted.org/packages/dd/83/93a1605c6f3a9247bca9a4fb02eaa881ad58aa932e5bbbafd9b325d87722/scrapy_rotating_proxies-0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0578389fb063a208413c95d77ed53a9a", "sha256": "ea9367665ababb48e0eaba80ccfa8a91215560969bbbab333254fef2c6757837" }, "downloads": -1, "filename": "scrapy-rotating-proxies-0.1.tar.gz", "has_sig": false, "md5_digest": "0578389fb063a208413c95d77ed53a9a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7646, "upload_time": "2017-02-01T16:35:23", "url": "https://files.pythonhosted.org/packages/ab/57/73ac54a31fac6a8f02160e80e7a90c6943efda0c9e7318a64809d7536fdb/scrapy-rotating-proxies-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "da81db6533c4e196cab44d0c3ab6f94c", "sha256": "43590b213d7e700910a75c591c61676b9b82002113238580d6c3aa9b4dc48239" }, "downloads": -1, "filename": "scrapy_rotating_proxies-0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "da81db6533c4e196cab44d0c3ab6f94c", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 10732, "upload_time": "2017-02-07T11:48:07", "url": "https://files.pythonhosted.org/packages/bb/98/4b645c6f0b85974b30209d97a6b4ae7ce79d223ce5e13d29c5a5be6a492e/scrapy_rotating_proxies-0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "06396cd9210a688937d76805b155a9cb", "sha256": "78f48f9f25df2d711da3d18981f8da368735f67b94230b202766fc20014c7e04" }, "downloads": -1, "filename": "scrapy-rotating-proxies-0.2.tar.gz", "has_sig": false, "md5_digest": "06396cd9210a688937d76805b155a9cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7839, "upload_time": "2017-02-07T11:48:00", "url": "https://files.pythonhosted.org/packages/42/ae/cb41afd2688eb263fe43aa2555cd038a6df9897b1deccea3b259a16f9704/scrapy-rotating-proxies-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "4bc0e11c3902c199d462f469abcb8d1b", "sha256": "1e43fbdfb931df3735067cb5effe7dfc9fc0390eecf99a73539fb748be387cbd" }, "downloads": -1, "filename": "scrapy_rotating_proxies-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4bc0e11c3902c199d462f469abcb8d1b", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 11310, "upload_time": "2017-02-07T20:38:27", "url": "https://files.pythonhosted.org/packages/ec/48/6bc46d76aa136216690d7bfd9c9fdbd3be5149189ae93bf4764642e89072/scrapy_rotating_proxies-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "76b2ca2abe41753897b913cea21e8fbe", "sha256": "f4322b7baa874c1da68751a094bdb39d9dc5a92071f8f38fb4a39ee9a177c432" }, "downloads": -1, "filename": "scrapy-rotating-proxies-0.2.1.tar.gz", "has_sig": false, "md5_digest": "76b2ca2abe41753897b913cea21e8fbe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8216, "upload_time": "2017-02-07T20:38:19", "url": "https://files.pythonhosted.org/packages/0b/53/0768f93d08a520868be2dbd36d715450752b73b512be3d3b9d28fd045923/scrapy-rotating-proxies-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "4bbff48b0652d1bba48d263224795338", "sha256": "fe549b442661de2b9086f1bb115bddbb9b52679502a6003de441dd8fdd5c9897" }, "downloads": -1, "filename": "scrapy_rotating_proxies-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4bbff48b0652d1bba48d263224795338", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 11435, "upload_time": "2017-02-28T22:39:52", "url": "https://files.pythonhosted.org/packages/6d/47/0fc583c6cf9683170cb5cdf92742e5a3feac12c09c8adfc617ef86320b98/scrapy_rotating_proxies-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "65ac9644d5501cb1179583195f4c006a", "sha256": "3e9e906da907ecaf25d666e6d41663f2433673cec1928c47b5c60a6f749620b4" }, "downloads": -1, "filename": "scrapy-rotating-proxies-0.2.2.tar.gz", "has_sig": false, "md5_digest": "65ac9644d5501cb1179583195f4c006a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8310, "upload_time": "2017-02-28T22:39:44", "url": "https://files.pythonhosted.org/packages/74/40/990397b46714ed0cd2b43eccb38e389b12f0dd41cc174ae6b7b7c6420690/scrapy-rotating-proxies-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "14e81350e0788f7de8f57059a1ef0208", "sha256": "ce68296af0308bc8b1a9f59bc57e3a5c14c52895e8b03c6d7bece070f6010503" }, "downloads": -1, "filename": "scrapy_rotating_proxies-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "14e81350e0788f7de8f57059a1ef0208", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 11954, "upload_time": "2017-03-03T12:23:43", "url": "https://files.pythonhosted.org/packages/e3/6e/f529762b7902ed70a8e80c0fcaa207692c1f7ff9d0fcce6b29f8f90182dd/scrapy_rotating_proxies-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3530fbed3c3bd813ae5f94947f3f6cd7", "sha256": "41bdb9df945592c0850f8dd454664ac0ba000cc1f2c2160cd5a76c46250b8e7f" }, "downloads": -1, "filename": "scrapy-rotating-proxies-0.2.3.tar.gz", "has_sig": false, "md5_digest": "3530fbed3c3bd813ae5f94947f3f6cd7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9512, "upload_time": "2017-03-03T12:23:35", "url": "https://files.pythonhosted.org/packages/70/75/cc67f9ebd6afad20a736c8b8b1f610fee22cd6f60be9e2333e5cc4765aff/scrapy-rotating-proxies-0.2.3.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "c0f397345d427eaeea51d02a1d4adeec", "sha256": "4eb97b668aec81d406425766d4fae79117a0eb81bd616fb04663d88139a32c9b" }, "downloads": -1, "filename": "scrapy_rotating_proxies-0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c0f397345d427eaeea51d02a1d4adeec", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 13645, "upload_time": "2017-03-14T16:09:29", "url": "https://files.pythonhosted.org/packages/37/b6/82bb99ad8c0f626918cefa048949fc30454d0bdd1b87e796e4be8862b3c4/scrapy_rotating_proxies-0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d16f4f7ea4dbbde693f9eaf08f406612", "sha256": "11bc36784bec7a0c56b2c290c80d7c2ed23c3875bd2271737b2fb443f8cb5f85" }, "downloads": -1, "filename": "scrapy-rotating-proxies-0.3.tar.gz", "has_sig": false, "md5_digest": "d16f4f7ea4dbbde693f9eaf08f406612", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10490, "upload_time": "2017-03-14T16:09:21", "url": "https://files.pythonhosted.org/packages/86/16/3e91efe3b958f3a3697e7a51e669ed2d9282e0300ab027a90b3d98927095/scrapy-rotating-proxies-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "6a6d690de16cc64e74297122b56821a8", "sha256": "4dd624761dd167c1ef20107bc68667d14806797fcf51703e2cb197b10b46fb76" }, "downloads": -1, "filename": "scrapy_rotating_proxies-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6a6d690de16cc64e74297122b56821a8", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 13835, "upload_time": "2017-03-20T10:09:43", "url": "https://files.pythonhosted.org/packages/7d/17/5dd73ec6eef8e4a98490c4cf81c10d73a42e4ecff95b6ed9059769906221/scrapy_rotating_proxies-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3f008a5337339128b1662fdfd1b3b9fa", "sha256": "9524e2fd5866aefd14e5d90492ec82c5ce0e97c48b940f7162763322b27b70c3" }, "downloads": -1, "filename": "scrapy-rotating-proxies-0.3.1.tar.gz", "has_sig": false, "md5_digest": "3f008a5337339128b1662fdfd1b3b9fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10638, "upload_time": "2017-03-20T10:09:24", "url": "https://files.pythonhosted.org/packages/eb/19/f4b6bf18f7a886120ef907ad5d8c9455a34450e2020b5173503a611da665/scrapy-rotating-proxies-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "fbcb90f978c3b9140e231aeacdbc97b5", "sha256": "35b5d0afbcd905a3825af075176ea4e3de6280af102a640907612b41fc872c64" }, "downloads": -1, "filename": "scrapy_rotating_proxies-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fbcb90f978c3b9140e231aeacdbc97b5", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 14510, "upload_time": "2017-06-05T14:59:39", "url": "https://files.pythonhosted.org/packages/85/a8/c9755ed2dfe8cd066d8677cff4bb1e86f10b9ed40722dc5043656a356f4f/scrapy_rotating_proxies-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "091960618d3d9b16f1874dbdcf074a69", "sha256": "9b2d06e5a80684f324823e9834cd96e5b2954b66fb16aeb8496c2d2c1ab1a4d0" }, "downloads": -1, "filename": "scrapy-rotating-proxies-0.3.2.tar.gz", "has_sig": false, "md5_digest": "091960618d3d9b16f1874dbdcf074a69", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11513, "upload_time": "2017-06-05T14:59:31", "url": "https://files.pythonhosted.org/packages/12/ec/bc96297f2eef88f8447243b993f7ef1dbf69c86daeaa66d03de2632fc9f4/scrapy-rotating-proxies-0.3.2.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "25950ffa41e4dbfb05b8baca3dd5256c", "sha256": "c6754411e683246352d16d403ff2427a5e9d8d5e1cfde3625c59de580b1cc4de" }, "downloads": -1, "filename": "scrapy_rotating_proxies-0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "25950ffa41e4dbfb05b8baca3dd5256c", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 14661, "upload_time": "2017-06-06T14:58:51", "url": "https://files.pythonhosted.org/packages/ff/f5/83a9e0478379278e81b8bc6e7ee41872160fec870e895b0dfc59c0d2e89e/scrapy_rotating_proxies-0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "049883d84af42c9f9d2a494a0ad8e63d", "sha256": "dec97fdc32c1a14eb0dc1e9140ac60e4716f2591527c41b3af3393a66a8b0cdc" }, "downloads": -1, "filename": "scrapy-rotating-proxies-0.4.tar.gz", "has_sig": false, "md5_digest": "049883d84af42c9f9d2a494a0ad8e63d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11896, "upload_time": "2017-06-06T14:58:44", "url": "https://files.pythonhosted.org/packages/e6/5d/ee8472c4922f56992016652d9c2c268de355760957006d358e2513c684ec/scrapy-rotating-proxies-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "b4680c62a78dc454a9fe9ee1b86914c0", "sha256": "bb462ae32f5f1dfb6ed9d82750bea67b4ae41e6222396d89c9fdf2f5a5fa6171" }, "downloads": -1, "filename": "scrapy_rotating_proxies-0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b4680c62a78dc454a9fe9ee1b86914c0", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 14813, "upload_time": "2017-10-09T12:19:07", "url": "https://files.pythonhosted.org/packages/76/5d/11af5b32d6d49109a4ad2543cc4a14a687d9a56210fca3e91b4d51964f7a/scrapy_rotating_proxies-0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7658a9802b7aae714b0f26ce734b0fe6", "sha256": "2014cf6599679efe20635b7926bfaec43ccf0c099505d2c86ef71383a0422277" }, "downloads": -1, "filename": "scrapy-rotating-proxies-0.5.tar.gz", "has_sig": false, "md5_digest": "7658a9802b7aae714b0f26ce734b0fe6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12378, "upload_time": "2017-10-09T12:18:59", "url": "https://files.pythonhosted.org/packages/43/45/57f8282b36de5d18687f94c539e82db177d841435010b12c8e73f58e27ee/scrapy-rotating-proxies-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "b03496e3903db47f659c9175ad2f0018", "sha256": "6c9cbdd94c3a5a4e498f364cee2f62f4234c25871fd24ec43e81fa67457f6102" }, "downloads": -1, "filename": "scrapy_rotating_proxies-0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b03496e3903db47f659c9175ad2f0018", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15164, "upload_time": "2018-12-28T18:49:35", "url": "https://files.pythonhosted.org/packages/08/90/379247088518b6ce52fd98b3aa1637ef6bda0cfeb9d47d5cc0638c04ae38/scrapy_rotating_proxies-0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "484499868fd28edb636aa24d28427200", "sha256": "038a646c8c83a3b0a536646548d3f24f0b7ac539209cac3ecab69c9f34bc7900" }, "downloads": -1, "filename": "scrapy-rotating-proxies-0.6.tar.gz", "has_sig": false, "md5_digest": "484499868fd28edb636aa24d28427200", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12895, "upload_time": "2018-12-28T18:49:17", "url": "https://files.pythonhosted.org/packages/3e/7b/2825b771a69f3330cf57f4ecd23efecd602f2b22d9704b9e134fd1196e22/scrapy-rotating-proxies-0.6.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "d0e94b6e5200bfd50ebc202555dac2d7", "sha256": "478780603c4ee7f9401981561d127294866b32ba10bda8863604cd48111c1222" }, "downloads": -1, "filename": "scrapy_rotating_proxies-0.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d0e94b6e5200bfd50ebc202555dac2d7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15260, "upload_time": "2019-04-03T17:42:23", "url": "https://files.pythonhosted.org/packages/6c/9c/453e862083a63649c5eedcfdf0e87a54cb570faa8c68e44d6efcf8dad659/scrapy_rotating_proxies-0.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ccaf382b1bcc0a5a1d87783eada73324", "sha256": "d1eb5f8f45a812f35a8a0303096c289a86c79fcfb3ae47a42e8863cfdbc74bb7" }, "downloads": -1, "filename": "scrapy-rotating-proxies-0.6.1.tar.gz", "has_sig": false, "md5_digest": "ccaf382b1bcc0a5a1d87783eada73324", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12973, "upload_time": "2019-04-03T17:42:12", "url": "https://files.pythonhosted.org/packages/1b/df/e281ea6da3d43cf5f76ecb9b0a6c67589a1a9a5c7ac76969f3201e11c257/scrapy-rotating-proxies-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "9880ae3d0c3e604d1d47c07467246137", "sha256": "f9cb6318011a4bdbb25b0e132b2dbcad01ea40eccceb1b3475c6bb4a0aef0e40" }, "downloads": -1, "filename": "scrapy_rotating_proxies-0.6.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9880ae3d0c3e604d1d47c07467246137", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15385, "upload_time": "2019-05-25T13:55:52", "url": "https://files.pythonhosted.org/packages/0c/70/6336f2e74bdb2f617ff0cf5c5d80c7e94a991e3e0af027441b3b25006d9c/scrapy_rotating_proxies-0.6.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "77a2d992a40700c4732f7a8021b7fbc3", "sha256": "cb068c13ca7d44787bb444e2edfd609669c942a32b5e4b338949a009fd5ca160" }, "downloads": -1, "filename": "scrapy-rotating-proxies-0.6.2.tar.gz", "has_sig": false, "md5_digest": "77a2d992a40700c4732f7a8021b7fbc3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13118, "upload_time": "2019-05-25T13:55:41", "url": "https://files.pythonhosted.org/packages/c5/69/467b36e6c082febe4bd15518ce53ffead4ce7d9ae8e43017b982724dcc81/scrapy-rotating-proxies-0.6.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9880ae3d0c3e604d1d47c07467246137", "sha256": "f9cb6318011a4bdbb25b0e132b2dbcad01ea40eccceb1b3475c6bb4a0aef0e40" }, "downloads": -1, "filename": "scrapy_rotating_proxies-0.6.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9880ae3d0c3e604d1d47c07467246137", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15385, "upload_time": "2019-05-25T13:55:52", "url": "https://files.pythonhosted.org/packages/0c/70/6336f2e74bdb2f617ff0cf5c5d80c7e94a991e3e0af027441b3b25006d9c/scrapy_rotating_proxies-0.6.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "77a2d992a40700c4732f7a8021b7fbc3", "sha256": "cb068c13ca7d44787bb444e2edfd609669c942a32b5e4b338949a009fd5ca160" }, "downloads": -1, "filename": "scrapy-rotating-proxies-0.6.2.tar.gz", "has_sig": false, "md5_digest": "77a2d992a40700c4732f7a8021b7fbc3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13118, "upload_time": "2019-05-25T13:55:41", "url": "https://files.pythonhosted.org/packages/c5/69/467b36e6c082febe4bd15518ce53ffead4ce7d9ae8e43017b982724dcc81/scrapy-rotating-proxies-0.6.2.tar.gz" } ] }