gitextract_jmd7ykkk/ ├── .coveragerc ├── .github/ │ └── ISSUE_TEMPLATE.md ├── .gitignore ├── .travis.yml ├── Dockerfile ├── LICENSE ├── MANIFEST.in ├── README.md ├── config_example.json ├── docker-compose.yaml ├── docs/ │ ├── About-Projects.md │ ├── About-Tasks.md │ ├── Architecture.md │ ├── Command-Line.md │ ├── Deployment-demo.pyspider.org.md │ ├── Deployment.md │ ├── Frequently-Asked-Questions.md │ ├── Quickstart.md │ ├── Running-pyspider-with-Docker.md │ ├── Script-Environment.md │ ├── Working-with-Results.md │ ├── apis/ │ │ ├── @catch_status_code_error.md │ │ ├── @every.md │ │ ├── Response.md │ │ ├── index.md │ │ ├── self.crawl.md │ │ └── self.send_message.md │ ├── conf.py │ ├── index.md │ └── tutorial/ │ ├── AJAX-and-more-HTTP.md │ ├── HTML-and-CSS-Selector.md │ ├── Render-with-PhantomJS.md │ └── index.md ├── mkdocs.yml ├── pyspider/ │ ├── __init__.py │ ├── database/ │ │ ├── __init__.py │ │ ├── base/ │ │ │ ├── __init__.py │ │ │ ├── projectdb.py │ │ │ ├── resultdb.py │ │ │ └── taskdb.py │ │ ├── basedb.py │ │ ├── couchdb/ │ │ │ ├── __init__.py │ │ │ ├── couchdbbase.py │ │ │ ├── projectdb.py │ │ │ ├── resultdb.py │ │ │ └── taskdb.py │ │ ├── elasticsearch/ │ │ │ ├── __init__.py │ │ │ ├── projectdb.py │ │ │ ├── resultdb.py │ │ │ └── taskdb.py │ │ ├── local/ │ │ │ ├── __init__.py │ │ │ └── projectdb.py │ │ ├── mongodb/ │ │ │ ├── __init__.py │ │ │ ├── mongodbbase.py │ │ │ ├── projectdb.py │ │ │ ├── resultdb.py │ │ │ └── taskdb.py │ │ ├── mysql/ │ │ │ ├── __init__.py │ │ │ ├── mysqlbase.py │ │ │ ├── projectdb.py │ │ │ ├── resultdb.py │ │ │ └── taskdb.py │ │ ├── redis/ │ │ │ ├── __init__.py │ │ │ └── taskdb.py │ │ ├── sqlalchemy/ │ │ │ ├── __init__.py │ │ │ ├── projectdb.py │ │ │ ├── resultdb.py │ │ │ ├── sqlalchemybase.py │ │ │ └── taskdb.py │ │ └── sqlite/ │ │ ├── __init__.py │ │ ├── projectdb.py │ │ ├── resultdb.py │ │ ├── sqlitebase.py │ │ └── taskdb.py │ ├── fetcher/ │ │ ├── __init__.py │ │ ├── cookie_utils.py │ │ ├── phantomjs_fetcher.js │ │ ├── puppeteer_fetcher.js │ │ ├── splash_fetcher.lua │ │ └── tornado_fetcher.py │ ├── libs/ │ │ ├── ListIO.py │ │ ├── __init__.py │ │ ├── base_handler.py │ │ ├── bench.py │ │ ├── counter.py │ │ ├── dataurl.py │ │ ├── log.py │ │ ├── multiprocessing_queue.py │ │ ├── pprint.py │ │ ├── response.py │ │ ├── result_dump.py │ │ ├── sample_handler.py │ │ ├── url.py │ │ ├── utils.py │ │ └── wsgi_xmlrpc.py │ ├── logging.conf │ ├── message_queue/ │ │ ├── __init__.py │ │ ├── kombu_queue.py │ │ ├── rabbitmq.py │ │ └── redis_queue.py │ ├── processor/ │ │ ├── __init__.py │ │ ├── processor.py │ │ └── project_module.py │ ├── result/ │ │ ├── __init__.py │ │ └── result_worker.py │ ├── run.py │ ├── scheduler/ │ │ ├── __init__.py │ │ ├── scheduler.py │ │ ├── task_queue.py │ │ └── token_bucket.py │ └── webui/ │ ├── __init__.py │ ├── app.py │ ├── bench_test.py │ ├── debug.py │ ├── index.py │ ├── login.py │ ├── result.py │ ├── static/ │ │ ├── .babelrc │ │ ├── package.json │ │ ├── src/ │ │ │ ├── css_selector_helper.js │ │ │ ├── debug.js │ │ │ ├── debug.less │ │ │ ├── index.js │ │ │ ├── index.less │ │ │ ├── result.less │ │ │ ├── splitter.js │ │ │ ├── task.less │ │ │ ├── tasks.less │ │ │ └── variable.less │ │ └── webpack.config.js │ ├── task.py │ ├── templates/ │ │ ├── debug.html │ │ ├── index.html │ │ ├── result.html │ │ ├── task.html │ │ └── tasks.html │ └── webdav.py ├── requirements.txt ├── run.py ├── setup.py ├── tests/ │ ├── __init__.py │ ├── data_fetcher_processor_handler.py │ ├── data_handler.py │ ├── data_sample_handler.py │ ├── data_test_webpage.py │ ├── test_base_handler.py │ ├── test_bench.py │ ├── test_counter.py │ ├── test_database.py │ ├── test_fetcher.py │ ├── test_fetcher_processor.py │ ├── test_message_queue.py │ ├── test_processor.py │ ├── test_response.py │ ├── test_result_dump.py │ ├── test_result_worker.py │ ├── test_run.py │ ├── test_scheduler.py │ ├── test_task_queue.py │ ├── test_utils.py │ ├── test_webdav.py │ ├── test_webui.py │ └── test_xmlrpc.py ├── tools/ │ └── migrate.py └── tox.ini