{ "info": { "author": "pirhoo", "author_email": "hello@pirhoo.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", "Natural Language :: English", "Operating System :: OS Independent", "Operating System :: Unix", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "Rentswatch Scraper Framework\n============================\n\nThis package provides an easy and maintenable way to build a\nRentswatch scraper. Rentswatch is a cross-borders investigation that collects data on flat rents in Europe. Its scrapers mainly focus on classified ads.\n\nHow to install\n--------------\n\nInstall using ``pip``...\n\n::\n\n pip install rentswatch-scraper\n\nHow to use\n----------\n\nLet's take a look at a quick example of using Rentswatch Scraper to\nbuild a simple model-backed scraper to collect data from a website.\n\nFirst, import the package components to build your scraper:\n\n.. code:: python\n\n #!/usr/bin/env python\n from rentswatch_scraper.scraper import Scraper\n from rentswatch_scraper.browser import geocode, convert\n from rentswatch_scraper.fields import RegexField, ComputedField\n from rentswatch_scraper import reporting\n\nTo factorize as much code as possible we created an abstract class that\nevery scraper will implement. For the sake of simplicity we'll use a\n*dummy website* as follow:\n\n.. code:: python\n\n class DummyScraper(Scraper):\n # Those are the basic meta-properties that define the scraper behavior\n class Meta:\n country = 'FR'\n site = \"dummy\"\n baseUrl = 'http://dummy.io'\n listUrl = baseUrl + '/rent/city/paris/list.php'\n adBlockSelector = '.ad-page-link'\n\nWithout any further configuration, this scraper will start to collect\nads from the list page of ``dummy.io``. To find links to the ads, it\nwill use the CSS selector ``.ad-page-link`` to get ```` markups and\nfollow their ``href`` attributes.\n\nWe have now to teach the scraper how to extract key figures from the ad\npage.\n\n.. code:: python\n\n class DummyScraper(Scraper):\n # HEADS UP: Meta declarations are hidden here\n # ...\n # ...\n\n # Extract data using a CSS Selector.\n realtorName = RegexField('.realtor-title')\n # Extract data using a CSS Selector and a Regex.\n serviceCharge = RegexField('.description-list', 'charges : (.*)\\s\u20ac')\n # Extract data using a CSS Selector and a Regex.\n # This will throw a custom exception if the field is missing.\n livingSpace = RegexField('.description-list', 'surface :(\\d*)', required=True, exception=reporting.SpaceMissingError)\n # Extract the value directly, without using a Regex\n totalRent = RegexField('.description-price', required=True, exception=reporting.RentMissingError)\n # Store this value as a private property (begining with a underscore).\n # It won't be saved in the database but it can be helpful as you we'll see.\n _address = RegexField('.description-address')\n\nEvery attribute will be saved as an Ad's property, according to the Ad\nmodel.\n\nSome properties may not be extractable from the HTML. You may need to\nuse a custom function that received existing properties. For this reason\nwe created a second field type named ``ComputedField``. Since the\nproperties order of declaration is recorded, we can use previously\ndeclared (and extracted) values to compute new ones.\n\n.. code:: python\n\n class DummyScraper(Scraper):\n # ...\n # ...\n\n # Use existing properties `totalRent` and `livingSpace` as they were\n # extracted before this one.\n pricePerSqm = ComputedField(fn=lambda s, values: values[\"totalRent\"] / values[\"livingSpace\"])\n # This full exemple uses private properties to find latitude and longitude.\n # To do so we use a buid-in function named `convert` that transforms an\n # address into a dictionary of coordinates.\n _latLng = ComputedField(fn=lambda s, values: geocode(values['_address'], 'FRA') )\n # Gets a the dictionary field we want.\n latitude = ComputedField(fn=lambda s, values: values['_latLng']['lat'])\n longitude = ComputedField(fn=lambda s, values: values['_latLng']['lng'])\n\nAll you need to do now is to create an instance of your class and run\nthe scraper.\n\n.. code:: python\n\n # When you script is executed directly\n if __name__ == \"__main__\":\n dummyScraper = DummyScraper()\n dummyScraper.run()\n\nAPI Doc\n-------\n\n``class`` Ad\n~~~~~~~~~~~~\n\nAttributes\n^^^^^^^^^^\n\nAs seen above, every Ad attribute might be used as a Scraper attribute to declare which attribute extract.\n\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| Name | Type | Description |\n+======================+==========================+===========================================================================+\n| ``status`` | *String* | \"listed\" if needs more scraping, \"scraped\" if it's done |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``site`` | *String* | Name of the website |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``createdAt`` | *DateTime* | Date the ad was first scraped |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``siteId`` | *String* | The unique ID from the site where it's scrapped from |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``serviceCharge`` | *Float* | Extra costs (heating mostly) |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``baseRent`` | *Float* | Base costs (without heating) |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``totalRent`` | *Float* | Total cost |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``livingSpace`` | *Float* | Surface in square meters |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``pricePerSqm`` | *Float* | Price per square meter |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``furnished`` | *Bool* | True if the flat or house is furnished |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``realtor`` | *Bool* | True if realtor, n if rented by a physical person |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``realtorName`` | *Unicode* | The name of the realtor or person offering the flat |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``latitude`` | *Float* | Latitude |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``longitude`` | *Float* | Longitude |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``balcony`` | *Bool* | True if there is a balcony/terrasse |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``yearConstructed`` | *String* | The year the building was built |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``cellar`` | *Bool* | True if the flat comes with a cellar |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``parking`` | *Bool* | True if the flat comes with a parking or a garage |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``houseNumber`` | *String* | House Number in the street |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``street`` | *String* | Street name (incl. \"street\") |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``zipCode`` | *String* | ZIP code |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``city`` | *Unicode* | City |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``lift`` | *Bool* | True if a lift is present |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``typeOfFlat`` | *String* | Type of flat (no typology) |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``noRooms`` | *String* | Number of rooms |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``floor`` | *String* | Floor the flat is at |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``garden`` | *Bool* | True if there is a garden |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``barrierFree`` | *Bool* | True if the flat is wheelchair accessible |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``country`` | *String* | Country, 2 letter code |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n| ``sourceUrl`` | *String* | URL of the page |\n+----------------------+--------------------------+---------------------------------------------------------------------------+\n\n\n``class`` Scraper\n~~~~~~~~~~~~~~~~~\n\nMethods\n^^^^^^^\n\nThe Scraper class defines a lot of method that we encourage you to\nredefine in order to have the full control of your scraper behavior.\n\n+----------------------+------------------------------------------------------------------------------------------------------+\n| Name | Description |\n+======================+======================================================================================================+\n| ``extract_ad`` | Extract ads list from a page's soup. |\n+----------------------+------------------------------------------------------------------------------------------------------+\n| ``fail`` | Print out an error message. |\n+----------------------+------------------------------------------------------------------------------------------------------+\n| ``fetch_ad`` | Fetch a single ad page from the target website then create Ad instances by calling ``\u00e8xtract_ad``. |\n+----------------------+------------------------------------------------------------------------------------------------------+\n| ``fetch_series`` | Fetch a single list page from the target website then fetch an ad by calling ``fetch_ad``. |\n+----------------------+------------------------------------------------------------------------------------------------------+\n| ``find_ad_blocks`` | Extract ad block from a page list. Called within ``fetch_series``. |\n+----------------------+------------------------------------------------------------------------------------------------------+\n| ``get_ad_href`` | Extract a href attribute from an ad block. Called within ``fetch_series``. |\n+----------------------+------------------------------------------------------------------------------------------------------+\n| ``get_ad_id`` | Extract a siteId from an ad block. Called within ``fetch_series``. |\n+----------------------+------------------------------------------------------------------------------------------------------+\n| ``get_fields`` | Used internally to generate a list of property to extract from the ad. |\n+----------------------+------------------------------------------------------------------------------------------------------+\n| ``get_series`` | Fetch a list page from the target website. |\n+----------------------+------------------------------------------------------------------------------------------------------+\n| ``has_issue`` | True if we met issues with this ad before. |\n+----------------------+------------------------------------------------------------------------------------------------------+\n| ``is_scraped`` | True if we already scraped this ad before. |\n+----------------------+------------------------------------------------------------------------------------------------------+\n| ``ok`` | Print out an success message. |\n+----------------------+------------------------------------------------------------------------------------------------------+\n| ``prepare`` | Just before saving the values. |\n+----------------------+------------------------------------------------------------------------------------------------------+\n| ``run`` | Run the scrapper. |\n+----------------------+------------------------------------------------------------------------------------------------------+\n| ``transform_page`` | Transform HTML content of the series page before parsing it. |\n+----------------------+------------------------------------------------------------------------------------------------------+\n\n\nStart a migration\n-----------------\n\nUse Yoyo_:\n\n::\n\n yoyo new ./migrations -m \"Your migration's description\"\n\n\nAnd apply it:\n\n::\n\n yoyo apply --database mysql://user:password@host/db ./migrations\n\n\n\n.. _Yoyo: https://pypi.python.org/pypi/yoyo-migrations", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jplusplus/rentswatch-scraper", "keywords": "", "license": "LGPL", "maintainer": null, "maintainer_email": null, "name": "rentswatch-scraper", "package_url": "https://pypi.org/project/rentswatch-scraper/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/rentswatch-scraper/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/jplusplus/rentswatch-scraper" }, "release_url": "https://pypi.org/project/rentswatch-scraper/1.0.1/", "requires_dist": null, "requires_python": null, "summary": "A basic framework to scrap renting ads", "version": "1.0.1" }, "last_serial": 2144594, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "f168b0098a3f763f5434bee71b679647", "sha256": "25abec87c6f9e5a1e09710e21db8c326f373167ab92a29a370a93a4896bbcaf2" }, "downloads": -1, "filename": "rentswatch-scraper-0.1.0.tar.gz", "has_sig": false, "md5_digest": "f168b0098a3f763f5434bee71b679647", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12933, "upload_time": "2015-11-05T16:40:53", "url": "https://files.pythonhosted.org/packages/f6/59/55d824b17edbed35838dbc5ef2ee878a3ef9b7146bcc54d0519ea8495ad7/rentswatch-scraper-0.1.0.tar.gz" } ], "0.10.0": [ { "comment_text": "", "digests": { "md5": "d992336e22b2ea2be4cfa82e7cbaef39", "sha256": "7ace9e5daf1494cabfebdb4da5f16fdaeb551ae13aeee39b81c6679173ef591f" }, "downloads": -1, "filename": "rentswatch-scraper-0.10.0.tar.gz", "has_sig": false, "md5_digest": "d992336e22b2ea2be4cfa82e7cbaef39", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19760, "upload_time": "2015-11-10T10:19:52", "url": "https://files.pythonhosted.org/packages/f0/04/a297a3dbe8c5e119ed6d7a35c4bf0743666e6682da9bd161996ffde95e87/rentswatch-scraper-0.10.0.tar.gz" } ], "0.11.0": [ { "comment_text": "", "digests": { "md5": "44c94dd2ee1bdbca9c6498fa27004724", "sha256": "dc108998371a7521c4c731771a4ecc801e6de17a5e1225cb7f3a2d6efb5678e5" }, "downloads": -1, "filename": "rentswatch-scraper-0.11.0.tar.gz", "has_sig": false, "md5_digest": "44c94dd2ee1bdbca9c6498fa27004724", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19743, "upload_time": "2015-11-12T13:12:02", "url": "https://files.pythonhosted.org/packages/01/79/a69d7f36730aeba28e9909d26b59f19b9d51b4849b3840b86310f5896040/rentswatch-scraper-0.11.0.tar.gz" } ], "0.12.0": [ { "comment_text": "", "digests": { "md5": "cef70485f0146055726869613424a963", "sha256": "94dcca42a2eb6b8965438d99090371c325a8a406d4e219b09886031403b69273" }, "downloads": -1, "filename": "rentswatch-scraper-0.12.0.tar.gz", "has_sig": false, "md5_digest": "cef70485f0146055726869613424a963", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19755, "upload_time": "2015-11-17T14:43:23", "url": "https://files.pythonhosted.org/packages/30/8a/d5bf9f4ff49320e5e6d6197d66d968ae50af1a39742e7e3498d944d84c38/rentswatch-scraper-0.12.0.tar.gz" } ], "0.13.0": [ { "comment_text": "", "digests": { "md5": "c12bdd4aaf324ec5bd5f56cb2b2cc408", "sha256": "51133154298a01b701e01ee2679a5daf601d263bfab93ced1b33852cf0b53cd1" }, "downloads": -1, "filename": "rentswatch-scraper-0.13.0.tar.gz", "has_sig": false, "md5_digest": "c12bdd4aaf324ec5bd5f56cb2b2cc408", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19740, "upload_time": "2015-11-17T15:00:41", "url": "https://files.pythonhosted.org/packages/18/c2/26f3ada63ff36c3a2edab1446bc5073875cf55084c37330d4cda9d28419b/rentswatch-scraper-0.13.0.tar.gz" } ], "0.14.0": [ { "comment_text": "", "digests": { "md5": "066f0a51ce60c41cbf977e6023c4d413", "sha256": "59d97969653c6f0c1c2c28b32c14222bce1a1748e157d5d58ef4e1d03e493b43" }, "downloads": -1, "filename": "rentswatch-scraper-0.14.0.tar.gz", "has_sig": false, "md5_digest": "066f0a51ce60c41cbf977e6023c4d413", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19736, "upload_time": "2015-11-17T15:03:52", "url": "https://files.pythonhosted.org/packages/81/12/f1209147108dcf6dd89ed407bcf00f6c3969ef638a584ea3118b1d5c34f3/rentswatch-scraper-0.14.0.tar.gz" } ], "0.15.0": [ { "comment_text": "", "digests": { "md5": "f3dc9a233dd6ccb24fc8f8263fd244e8", "sha256": "13bdffc739f5a5114207cd54fb87864dd0b498e0d6bfa35c478267f76a241487" }, "downloads": -1, "filename": "rentswatch-scraper-0.15.0.tar.gz", "has_sig": false, "md5_digest": "f3dc9a233dd6ccb24fc8f8263fd244e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19742, "upload_time": "2015-11-17T15:07:42", "url": "https://files.pythonhosted.org/packages/ec/02/c1fdc176ef1b49ac37b4ecfae9fdb1589293cd16fce77492afcbc75db0de/rentswatch-scraper-0.15.0.tar.gz" } ], "0.16.0": [ { "comment_text": "", "digests": { "md5": "cafb5bc2bf8fdf87d9d2605fb70a299c", "sha256": "02503743e765d958ef8bf76004d5d8743ec9a743c245252785b72889aa2ab71f" }, "downloads": -1, "filename": "rentswatch-scraper-0.16.0.tar.gz", "has_sig": false, "md5_digest": "cafb5bc2bf8fdf87d9d2605fb70a299c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19741, "upload_time": "2015-11-17T15:14:23", "url": "https://files.pythonhosted.org/packages/e2/39/cbac394feeb61b8acca2bdb218b5048583180b9db30e107b2582bb4f3467/rentswatch-scraper-0.16.0.tar.gz" } ], "0.17.0": [ { "comment_text": "", "digests": { "md5": "88f55b4b454298a0dc75f5153f86dddf", "sha256": "f16cce29fb9214f39d403c7038158fc67064f0795d21e1f9192e5d4671679251" }, "downloads": -1, "filename": "rentswatch-scraper-0.17.0.tar.gz", "has_sig": false, "md5_digest": "88f55b4b454298a0dc75f5153f86dddf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19740, "upload_time": "2015-11-17T15:16:57", "url": "https://files.pythonhosted.org/packages/fc/dd/a4b85982fc11c46d0352a38961561cab04cf220318fd6b769929465dbf4a/rentswatch-scraper-0.17.0.tar.gz" } ], "0.18.0": [ { "comment_text": "", "digests": { "md5": "82563519cf3329b28442c2354e424bf0", "sha256": "d783bf5c399dbfa5b8d9fb7f6d39483863c2412febd0dbc529ddb1fc5879200e" }, "downloads": -1, "filename": "rentswatch-scraper-0.18.0.tar.gz", "has_sig": false, "md5_digest": "82563519cf3329b28442c2354e424bf0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19747, "upload_time": "2015-11-17T15:20:46", "url": "https://files.pythonhosted.org/packages/2d/4d/185891113407110d480799bf60d8e2c9693d0e3209dcbba1cbe11a449571/rentswatch-scraper-0.18.0.tar.gz" } ], "0.19.0": [ { "comment_text": "", "digests": { "md5": "c31e094df9decfee6a8902553fdd0b28", "sha256": "a5423f8369e44fb4062ef8596733cf2037ecf958f02a9368f7b57c07878a1657" }, "downloads": -1, "filename": "rentswatch-scraper-0.19.0.tar.gz", "has_sig": false, "md5_digest": "c31e094df9decfee6a8902553fdd0b28", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19738, "upload_time": "2015-11-17T15:23:33", "url": "https://files.pythonhosted.org/packages/d6/98/5d9bd92eeac3adc16daf98bedde4e2deba983d41b690ed5dcb45d13857cb/rentswatch-scraper-0.19.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "d3461737b36996573c4496d3a84fe91f", "sha256": "062a38ae33a7390a5cd08eca4c7fe82380402086a9e609e62e75277fd0eff6e2" }, "downloads": -1, "filename": "rentswatch-scraper-0.2.0.tar.gz", "has_sig": false, "md5_digest": "d3461737b36996573c4496d3a84fe91f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12982, "upload_time": "2015-11-06T07:48:18", "url": "https://files.pythonhosted.org/packages/47/39/f69d3f44a55e12bdac9ebd09be1952f5ed9fbd21143bc1c422c7beb48a7a/rentswatch-scraper-0.2.0.tar.gz" } ], "0.20.0": [ { "comment_text": "", "digests": { "md5": "7bb685e21ba86112f1bbfa6f3705a6e8", "sha256": "3c83b4f1fb535dda6c339f260af0cacb8d98c469b5791a3ebdd19e2d5a74e307" }, "downloads": -1, "filename": "rentswatch-scraper-0.20.0.tar.gz", "has_sig": false, "md5_digest": "7bb685e21ba86112f1bbfa6f3705a6e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19741, "upload_time": "2015-11-17T15:31:58", "url": "https://files.pythonhosted.org/packages/60/00/1606ab420461801a019b933e50910cdc22e22d752b65ca1651b2fc142ac2/rentswatch-scraper-0.20.0.tar.gz" } ], "0.21.0": [ { "comment_text": "", "digests": { "md5": "4c4279e76277efe55d052b0ab6c0469c", "sha256": "2bf27f3dc6667e8564a191fe2bed53c91e552d771b573474b8c55403a3a424a1" }, "downloads": -1, "filename": "rentswatch-scraper-0.21.0.tar.gz", "has_sig": false, "md5_digest": "4c4279e76277efe55d052b0ab6c0469c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19751, "upload_time": "2015-11-17T15:41:00", "url": "https://files.pythonhosted.org/packages/6c/c1/d270ea767692cbc30ed40ccba306a26979a9458354dbdb673a2a8b5d551e/rentswatch-scraper-0.21.0.tar.gz" } ], "0.22.0": [ { "comment_text": "", "digests": { "md5": "969ed94e6c158340a92493081f2a7edb", "sha256": "f7adcf0eb492d6270c7246a5747c894ac519ff058a212e8ee03dc734277f3ef0" }, "downloads": -1, "filename": "rentswatch-scraper-0.22.0.tar.gz", "has_sig": false, "md5_digest": "969ed94e6c158340a92493081f2a7edb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19797, "upload_time": "2015-11-24T09:14:27", "url": "https://files.pythonhosted.org/packages/71/19/0ed6e00ce9a2e39146a400cd2545d32628dc8002caf664948a776ecd3acf/rentswatch-scraper-0.22.0.tar.gz" } ], "0.23.0": [ { "comment_text": "", "digests": { "md5": "2b8f130589d4aad3550bc60be84b7232", "sha256": "2a1835989d4461f8ba4ef20bf74ab012f68672d969b75d1913fc01b642b722e1" }, "downloads": -1, "filename": "rentswatch-scraper-0.23.0.tar.gz", "has_sig": false, "md5_digest": "2b8f130589d4aad3550bc60be84b7232", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19793, "upload_time": "2015-11-24T09:18:48", "url": "https://files.pythonhosted.org/packages/04/14/cc21fd79432660728939ae32123f7894b3ca8d0576e094ac7559871529d8/rentswatch-scraper-0.23.0.tar.gz" } ], "0.24.0": [ { "comment_text": "", "digests": { "md5": "347df823bfc321803ddbea9f6e1fbbde", "sha256": "a903cfd901f3fc5db10a9e1652d22dd4083d1002b0563bbd0ee8f81cdc836b04" }, "downloads": -1, "filename": "rentswatch-scraper-0.24.0.tar.gz", "has_sig": false, "md5_digest": "347df823bfc321803ddbea9f6e1fbbde", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19794, "upload_time": "2015-12-02T15:18:37", "url": "https://files.pythonhosted.org/packages/c9/08/500ae2b5bb0b330f146bf89ee1cbb1d24cd55841120ef7c15e2d71234d63/rentswatch-scraper-0.24.0.tar.gz" } ], "0.25.0": [ { "comment_text": "", "digests": { "md5": "315855325cc9e05425447348ca9883c6", "sha256": "2dd44034a5cebb7e27db2df39f86e74c472321d1adb4b098e8959a31984a0b0f" }, "downloads": -1, "filename": "rentswatch-scraper-0.25.0.tar.gz", "has_sig": false, "md5_digest": "315855325cc9e05425447348ca9883c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19839, "upload_time": "2015-12-03T16:30:23", "url": "https://files.pythonhosted.org/packages/6c/63/8c304141c9c71d1feb399f461bf2720a1d0d1b17f2486519df555be62b65/rentswatch-scraper-0.25.0.tar.gz" } ], "0.26.0": [ { "comment_text": "", "digests": { "md5": "c12ee9eb4b46314c19a6e1225e333c6c", "sha256": "1621edf01f26b362cb05adbd84314535b63b354593d06912e88c615cf6a9dafe" }, "downloads": -1, "filename": "rentswatch-scraper-0.26.0.tar.gz", "has_sig": false, "md5_digest": "c12ee9eb4b46314c19a6e1225e333c6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19926, "upload_time": "2015-12-08T16:18:57", "url": "https://files.pythonhosted.org/packages/f8/ee/7351416a003e15928988127d628dd038ea0de6a46cf00e675b8b07dfa09d/rentswatch-scraper-0.26.0.tar.gz" } ], "0.27.0": [ { "comment_text": "", "digests": { "md5": "51e0babbb465ff4fc238747a59124e95", "sha256": "0cb3109c4e300d8b3dbfd7ae51eddd8a238119a5fad2fe2070a41593a5de37de" }, "downloads": -1, "filename": "rentswatch-scraper-0.27.0.tar.gz", "has_sig": false, "md5_digest": "51e0babbb465ff4fc238747a59124e95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19918, "upload_time": "2015-12-08T17:02:36", "url": "https://files.pythonhosted.org/packages/5a/ee/973aee07c62f4dd83b04e918b80cd088f95a6df18a5298341fb266a0ab19/rentswatch-scraper-0.27.0.tar.gz" } ], "0.28.0": [ { "comment_text": "", "digests": { "md5": "1425d1b5fb7d58961fa0baa2b105fbf4", "sha256": "eb6b02332b7862dd523fc108d73ecb1c7074851904225926f589fed6005cf704" }, "downloads": -1, "filename": "rentswatch-scraper-0.28.0.tar.gz", "has_sig": false, "md5_digest": "1425d1b5fb7d58961fa0baa2b105fbf4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19920, "upload_time": "2015-12-17T13:44:28", "url": "https://files.pythonhosted.org/packages/2c/f2/9a9600a94fd1beb69422b24efff71f6a00350725cc6f177f6e1228e95250/rentswatch-scraper-0.28.0.tar.gz" } ], "0.29.0": [ { "comment_text": "", "digests": { "md5": "5ef2717c9985ed6ce06bb1c818347bde", "sha256": "8b424ec7499643ed8d4bd8dd3e6136c0e0ca0f412960d9abc22ff1b9ec380709" }, "downloads": -1, "filename": "rentswatch-scraper-0.29.0.tar.gz", "has_sig": false, "md5_digest": "5ef2717c9985ed6ce06bb1c818347bde", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19928, "upload_time": "2015-12-17T13:58:36", "url": "https://files.pythonhosted.org/packages/d3/7e/a5c0cc3d24624804d192c81b5330c8f8188e6768c9ff6fa648e870386f5f/rentswatch-scraper-0.29.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "d56ebfa20b617353e0b8609f609e4d61", "sha256": "56f018ac7c324bedcd45d37156f270098eaa7a4602b0df947557a00f35b46689" }, "downloads": -1, "filename": "rentswatch-scraper-0.3.0.tar.gz", "has_sig": false, "md5_digest": "d56ebfa20b617353e0b8609f609e4d61", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12996, "upload_time": "2015-11-06T15:46:15", "url": "https://files.pythonhosted.org/packages/2f/f9/a05f34efefd97ed2b59a31f4179adaabb4bceb651de5b45ae66fe05614c2/rentswatch-scraper-0.3.0.tar.gz" } ], "0.30.0": [ { "comment_text": "", "digests": { "md5": "6f27a11631058b3d21021e58900a6257", "sha256": "293a6f1d3ab6140dd8c4e81ac24610d9121261a16d7c2b60b16706ba52012a43" }, "downloads": -1, "filename": "rentswatch-scraper-0.30.0.tar.gz", "has_sig": false, "md5_digest": "6f27a11631058b3d21021e58900a6257", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19929, "upload_time": "2015-12-17T14:21:34", "url": "https://files.pythonhosted.org/packages/51/a3/4c95a4a01228630505f7e67c5f73911a1e962a23bcd3e8bef697a8bfe85e/rentswatch-scraper-0.30.0.tar.gz" } ], "0.31.0": [ { "comment_text": "", "digests": { "md5": "c3f3e6dfdb94ac0653e54663715a07fd", "sha256": "02ce9b49d22f96e186372b5f92120e5bd7ddbe1203bb15a87e16404bb9d097de" }, "downloads": -1, "filename": "rentswatch-scraper-0.31.0.tar.gz", "has_sig": false, "md5_digest": "c3f3e6dfdb94ac0653e54663715a07fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19943, "upload_time": "2016-01-20T07:23:50", "url": "https://files.pythonhosted.org/packages/a9/c7/6a41839e41e941e9b80676b03269ae85fdffdf98daa735efae63cfde72ff/rentswatch-scraper-0.31.0.tar.gz" } ], "0.32.0": [ { "comment_text": "", "digests": { "md5": "a2698de7e0932544d47dd1b3bc2f0e45", "sha256": "9e3bb089d1cbdd2257d24ba321e93971824165946654e7a5cc5a2d359faf4b8b" }, "downloads": -1, "filename": "rentswatch-scraper-0.32.0.tar.gz", "has_sig": false, "md5_digest": "a2698de7e0932544d47dd1b3bc2f0e45", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19949, "upload_time": "2016-01-21T07:55:16", "url": "https://files.pythonhosted.org/packages/a7/20/e6b490dd5568f4f5926cf9681e31699d97bc6961c8b2781190d2b9f6f856/rentswatch-scraper-0.32.0.tar.gz" } ], "0.33.0": [ { "comment_text": "", "digests": { "md5": "772b810791b684fc8ce04e3cd2a77817", "sha256": "5ccaeaa092b22e5c200976d4f3de2638923a604f6cac453fd9b1b8a7a071505d" }, "downloads": -1, "filename": "rentswatch-scraper-0.33.0.tar.gz", "has_sig": false, "md5_digest": "772b810791b684fc8ce04e3cd2a77817", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20315, "upload_time": "2016-03-24T15:00:41", "url": "https://files.pythonhosted.org/packages/ac/23/7298568c7885a33a1cb76197067f141e1048c28cad2bff188bc2402ed017/rentswatch-scraper-0.33.0.tar.gz" } ], "0.33.2": [ { "comment_text": "", "digests": { "md5": "5408be7b09a1b0d26cb6742c749c9c35", "sha256": "c982da0222fa9e2f4f060882ffc2f122cbeeafe678c95daa96bdeeb0fb661f07" }, "downloads": -1, "filename": "rentswatch-scraper-0.33.2.tar.gz", "has_sig": false, "md5_digest": "5408be7b09a1b0d26cb6742c749c9c35", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20365, "upload_time": "2016-03-24T16:29:32", "url": "https://files.pythonhosted.org/packages/ae/99/6343c1270b12da3915b11944e70962691f46459a1a5f9409c284623f93c8/rentswatch-scraper-0.33.2.tar.gz" } ], "0.33.4": [ { "comment_text": "", "digests": { "md5": "ffb0997eb9d6683e51b40473c3d1b32e", "sha256": "abaaf13db12347cdac9eadb59cbe39584697d56cfba67e0065800836711d3142" }, "downloads": -1, "filename": "rentswatch-scraper-0.33.4.tar.gz", "has_sig": false, "md5_digest": "ffb0997eb9d6683e51b40473c3d1b32e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20594, "upload_time": "2016-04-12T16:06:42", "url": "https://files.pythonhosted.org/packages/a2/f8/9b21e23f98769e2d65c0825b0b35b8fca0eb64e4b6d0e74d0558a9d41bf4/rentswatch-scraper-0.33.4.tar.gz" } ], "0.33.6": [ { "comment_text": "", "digests": { "md5": "78c64bcf9cc426fd10b7a811803f8e0f", "sha256": "95da2f74ba074c71f2211ac7c4af0f4bc6aba1ec03c5dc6b162f30335f3a7047" }, "downloads": -1, "filename": "rentswatch-scraper-0.33.6.tar.gz", "has_sig": false, "md5_digest": "78c64bcf9cc426fd10b7a811803f8e0f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20615, "upload_time": "2016-04-21T10:03:13", "url": "https://files.pythonhosted.org/packages/dd/60/8d135b15d741bc3eb6ede80c6418389f819c18ceded8b9691d16ff643c33/rentswatch-scraper-0.33.6.tar.gz" } ], "0.33.7": [ { "comment_text": "", "digests": { "md5": "000cb0a5b2bff18855bb7f2c1e26a478", "sha256": "69bf81f3033b4c2c851e0007212d2157c02714070f40aec30f77f312f5933035" }, "downloads": -1, "filename": "rentswatch-scraper-0.33.7.tar.gz", "has_sig": false, "md5_digest": "000cb0a5b2bff18855bb7f2c1e26a478", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20642, "upload_time": "2016-04-21T10:11:16", "url": "https://files.pythonhosted.org/packages/2d/ec/7eb74e39404e9f979c5f20fa7e6fdb6aeac4c0de364ea7d75d36977b9b10/rentswatch-scraper-0.33.7.tar.gz" } ], "0.33.8": [ { "comment_text": "", "digests": { "md5": "6bac3434a460ba5f0ce295f8bb8f0f22", "sha256": "77728238e6dc75cc2ca035e3401099436e203b02546b935b6a62f969fb32dd21" }, "downloads": -1, "filename": "rentswatch-scraper-0.33.8.tar.gz", "has_sig": false, "md5_digest": "6bac3434a460ba5f0ce295f8bb8f0f22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21461, "upload_time": "2016-04-25T12:06:23", "url": "https://files.pythonhosted.org/packages/f4/e3/118dea12add8531a289ca858e98ebc1f4580021046785be242fe9267b963/rentswatch-scraper-0.33.8.tar.gz" } ], "0.33.9": [ { "comment_text": "", "digests": { "md5": "6098f891d66d990946adec2f18b2744e", "sha256": "4d9cd0ecc8941a6a709679a3485e9364d7a6aa0e9df24c99d700d0f0d64debc9" }, "downloads": -1, "filename": "rentswatch-scraper-0.33.9.tar.gz", "has_sig": false, "md5_digest": "6098f891d66d990946adec2f18b2744e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20971, "upload_time": "2016-05-13T14:11:31", "url": "https://files.pythonhosted.org/packages/cf/49/f0d68092c396bf43b515683113df13aa45863de637033f003c5ce83ff8e6/rentswatch-scraper-0.33.9.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "8146359440ccb9832fceb33480e5a3e9", "sha256": "0c739c409c7c0651d4984953223bda93e4fe5dd0500fc2fc7af04a786876a0e6" }, "downloads": -1, "filename": "rentswatch-scraper-0.4.0.tar.gz", "has_sig": false, "md5_digest": "8146359440ccb9832fceb33480e5a3e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12993, "upload_time": "2015-11-06T16:05:38", "url": "https://files.pythonhosted.org/packages/7f/82/dc730cf695939cd75242dfe0c152da808ded5bb412a61da30f8378365018/rentswatch-scraper-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "6d98236a3c5bc35388b15c5401a16c77", "sha256": "87c08cc3efa946df89c0432224de15944b6bf0ceffe5b790b1b3ae89e93af83f" }, "downloads": -1, "filename": "rentswatch-scraper-0.5.0.tar.gz", "has_sig": false, "md5_digest": "6d98236a3c5bc35388b15c5401a16c77", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12964, "upload_time": "2015-11-06T16:10:31", "url": "https://files.pythonhosted.org/packages/62/3f/98cfce98872d0386ef5c09fd4339aadae46b39d9dfff2bd427afeda98030/rentswatch-scraper-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "e4257d680832cf25658886a538c55a85", "sha256": "91d6953d7459ea09774e94bb1e2eee472faab9b05e1209488192945cfacc5637" }, "downloads": -1, "filename": "rentswatch-scraper-0.6.0.tar.gz", "has_sig": false, "md5_digest": "e4257d680832cf25658886a538c55a85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12986, "upload_time": "2015-11-09T18:05:33", "url": "https://files.pythonhosted.org/packages/da/28/8de6314572b69d8118e851be200adffac8e1548bea08b10c26f75aaaa676/rentswatch-scraper-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "bb930ef4eeddb9d25f4cb675c3ec11e5", "sha256": "88d2d022472ea7d17016afe533e332907a37b8a1b090a02a32b0b53ce4e8af0b" }, "downloads": -1, "filename": "rentswatch-scraper-0.7.0.tar.gz", "has_sig": false, "md5_digest": "bb930ef4eeddb9d25f4cb675c3ec11e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13006, "upload_time": "2015-11-09T18:07:19", "url": "https://files.pythonhosted.org/packages/7d/3b/8702691d3b06fb06dcb002c2eff5bdb53e199b9b9aa39fb8426144e13bc2/rentswatch-scraper-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "555152ef05007db8ec7358805c8570e9", "sha256": "aa452692a35f6fb6bbc74b5114e497f25a53f43053a02e22d1604d258da1485e" }, "downloads": -1, "filename": "rentswatch-scraper-0.8.0.tar.gz", "has_sig": false, "md5_digest": "555152ef05007db8ec7358805c8570e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15188, "upload_time": "2015-11-09T18:18:52", "url": "https://files.pythonhosted.org/packages/f3/8f/8323bee660a5d8c2888d4f5de38f0bbf1dd727f34474e3e11bef1b78eccf/rentswatch-scraper-0.8.0.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "b53709c8079281e571e12eb7288a5166", "sha256": "7aedac17878600f9893a30d8fef62a3e93a01a0df94e3ae16dae5f35da779c1e" }, "downloads": -1, "filename": "rentswatch-scraper-0.9.0.tar.gz", "has_sig": false, "md5_digest": "b53709c8079281e571e12eb7288a5166", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17895, "upload_time": "2015-11-09T18:21:53", "url": "https://files.pythonhosted.org/packages/25/ee/46a2e02627912be41939a6a4c1e7be470c9a75d5e26e7913abb38cb79534/rentswatch-scraper-0.9.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "9aa12a4ff901aae8f5cf0a246bdab2f5", "sha256": "b7a8557f5a850af0466335c67bab9b48a7255ff0ca185dbb93ef5cc4e204c47a" }, "downloads": -1, "filename": "rentswatch-scraper-1.0.0.tar.gz", "has_sig": false, "md5_digest": "9aa12a4ff901aae8f5cf0a246bdab2f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21250, "upload_time": "2016-05-31T12:48:17", "url": "https://files.pythonhosted.org/packages/c4/29/da69b55f26c781bfb2b23b76872caa8f302437b8a10958b3244ebfa6f132/rentswatch-scraper-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "5aa58724f3ab28d0f67fbd982423556b", "sha256": "af1eb78e79ba993c5fdf6719ffa9b3ac238fbe47fbeb01bf70469a01b2600c48" }, "downloads": -1, "filename": "rentswatch-scraper-1.0.1.tar.gz", "has_sig": false, "md5_digest": "5aa58724f3ab28d0f67fbd982423556b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21291, "upload_time": "2016-06-01T11:14:40", "url": "https://files.pythonhosted.org/packages/8d/ab/7236187ac8d3e19dec8194aaaab26ea2611a114428d6f33cf7fb46f73796/rentswatch-scraper-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5aa58724f3ab28d0f67fbd982423556b", "sha256": "af1eb78e79ba993c5fdf6719ffa9b3ac238fbe47fbeb01bf70469a01b2600c48" }, "downloads": -1, "filename": "rentswatch-scraper-1.0.1.tar.gz", "has_sig": false, "md5_digest": "5aa58724f3ab28d0f67fbd982423556b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21291, "upload_time": "2016-06-01T11:14:40", "url": "https://files.pythonhosted.org/packages/8d/ab/7236187ac8d3e19dec8194aaaab26ea2611a114428d6f33cf7fb46f73796/rentswatch-scraper-1.0.1.tar.gz" } ] }