gitextract_l8nvd49y/ ├── .dockerignore ├── .drone.yml ├── .editorconfig ├── .gitattributes ├── .gitignore ├── .jshintrc ├── .travis.yml ├── CHANGES ├── Dockerfile ├── LICENSE ├── README.md ├── VERSION ├── Vagrantfile ├── bin/ │ └── bump_version.py ├── docker/ │ ├── compile-assets.sh │ ├── entry │ ├── nginx/ │ │ ├── nginx.conf │ │ ├── proxy_portia_server.conf │ │ └── proxy_slyd.conf │ ├── portia.conf │ ├── provision.sh │ ├── qt_install.qs │ ├── restore-mtime.sh │ └── run-tests.sh ├── docker-compose.yml ├── docs/ │ ├── Makefile │ ├── conf.py │ ├── examples.rst │ ├── faq.rst │ ├── getting-started.rst │ ├── index.rst │ ├── installation.rst │ ├── items.rst │ ├── make.bat │ ├── projects.rst │ ├── samples.rst │ └── spiders.rst ├── portia_server/ │ ├── db_repo/ │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── migrations/ │ │ │ ├── 0001_initial.py │ │ │ ├── __init__.py │ │ │ └── slyd_to_django.sql │ │ ├── models.py │ │ └── repo.py │ ├── manage.py │ ├── portia_api/ │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── errors.py │ │ ├── jsonapi/ │ │ │ ├── __init__.py │ │ │ ├── exceptions.py │ │ │ ├── parsers.py │ │ │ ├── registry.py │ │ │ ├── relationships.py │ │ │ ├── renderers.py │ │ │ ├── response.py │ │ │ ├── serializers.py │ │ │ └── utils.py │ │ ├── resources/ │ │ │ ├── __init__.py │ │ │ ├── annotations.py │ │ │ ├── extractors.py │ │ │ ├── fields.py │ │ │ ├── items.py │ │ │ ├── models.py │ │ │ ├── projects.py │ │ │ ├── response.py │ │ │ ├── route.py │ │ │ ├── samples.py │ │ │ ├── schemas.py │ │ │ ├── serializers.py │ │ │ └── spiders.py │ │ ├── routers.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ └── test_routes.py │ │ ├── urls.py │ │ └── utils/ │ │ ├── __init__.py │ │ ├── annotations.py │ │ ├── copy.py │ │ ├── deploy/ │ │ │ ├── base.py │ │ │ ├── package.py │ │ │ ├── scrapinghub.py │ │ │ └── scrapyd.py │ │ ├── download.py │ │ ├── extract.py │ │ ├── projects.py │ │ └── spiders.py │ ├── portia_orm/ │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── base.py │ │ ├── collection.py │ │ ├── datastore.py │ │ ├── decorators.py │ │ ├── deletion.py │ │ ├── exceptions.py │ │ ├── fields.py │ │ ├── middleware.py │ │ ├── models.py │ │ ├── registry.py │ │ ├── relationships.py │ │ ├── serializers.py │ │ ├── snapshots.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── models.py │ │ │ ├── test_basic.py │ │ │ ├── test_collection.py │ │ │ ├── test_model.py │ │ │ ├── test_relationship.py │ │ │ └── utils.py │ │ ├── utils.py │ │ └── validators.py │ ├── portia_server/ │ │ ├── __init__.py │ │ ├── backends.py │ │ ├── models.py │ │ ├── settings.py │ │ ├── urls.py │ │ ├── views.py │ │ └── wsgi.py │ ├── requirements.txt │ └── storage/ │ ├── __init__.py │ ├── apps.py │ ├── backends.py │ ├── jsondiff.py │ ├── projecttemplates.py │ └── repoman.py ├── portiaui/ │ ├── .bowerrc │ ├── .editorconfig │ ├── .ember-cli │ ├── .gitignore │ ├── .jshintrc │ ├── .watchmanconfig │ ├── app/ │ │ ├── adapters/ │ │ │ ├── application.js │ │ │ └── project.js │ │ ├── app.js │ │ ├── components/ │ │ │ ├── .gitkeep │ │ │ ├── add-start-url-button.js │ │ │ ├── animation-container.js │ │ │ ├── annotation-options.js │ │ │ ├── browser-iframe.js │ │ │ ├── browser-url-blocked.js │ │ │ ├── browser-url-failing.js │ │ │ ├── browser-view-port.js │ │ │ ├── buffered-input.js │ │ │ ├── colored-badge.js │ │ │ ├── colored-span.js │ │ │ ├── combo-box.js │ │ │ ├── create-project-button.js │ │ │ ├── create-spider-button.js │ │ │ ├── data-structure-annotations.js │ │ │ ├── data-structure-listing.js │ │ │ ├── dropdown-delete.js │ │ │ ├── dropdown-divider.js │ │ │ ├── dropdown-header.js │ │ │ ├── dropdown-item.js │ │ │ ├── dropdown-menu.js │ │ │ ├── dropdown-widget.js │ │ │ ├── edit-sample-button.js │ │ │ ├── element-overlay.js │ │ │ ├── element-rect-overlay.js │ │ │ ├── extracted-item-table.js │ │ │ ├── extracted-items-group.js │ │ │ ├── extracted-items-json-panel.js │ │ │ ├── extracted-items-json-value.js │ │ │ ├── extracted-items-json.js │ │ │ ├── extracted-items-panel.js │ │ │ ├── extracted-items-status.js │ │ │ ├── extracted-items-tab.js │ │ │ ├── extractor-options.js │ │ │ ├── feed-url-options.js │ │ │ ├── field-options.js │ │ │ ├── fragment-options.js │ │ │ ├── generated-url-options.js │ │ │ ├── help-icon.js │ │ │ ├── icon-button.js │ │ │ ├── indentation-spacer.js │ │ │ ├── input-with-clear.js │ │ │ ├── inspector-panel.js │ │ │ ├── link-crawling-options.js │ │ │ ├── list-item-add-annotation-menu.js │ │ │ ├── list-item-annotation-field.js │ │ │ ├── list-item-badge.js │ │ │ ├── list-item-combo.js │ │ │ ├── list-item-editable.js │ │ │ ├── list-item-field-type.js │ │ │ ├── list-item-icon-menu.js │ │ │ ├── list-item-icon.js │ │ │ ├── list-item-item-schema.js │ │ │ ├── list-item-link-crawling.js │ │ │ ├── list-item-relation-manager.js │ │ │ ├── list-item-selectable.js │ │ │ ├── list-item-text.js │ │ │ ├── notification-container.js │ │ │ ├── notification-message.js │ │ │ ├── page-actions-editor.js │ │ │ ├── project-list.js │ │ │ ├── project-listing.js │ │ │ ├── project-structure-listing.js │ │ │ ├── project-structure-spider-feed-url.js │ │ │ ├── project-structure-spider-generated-url.js │ │ │ ├── project-structure-spider-url.js │ │ │ ├── regex-pattern-list.js │ │ │ ├── reorder-handler.js │ │ │ ├── save-status.js │ │ │ ├── schema-structure-listing.js │ │ │ ├── scrapinghub-links.js │ │ │ ├── select-box.js │ │ │ ├── show-links-button.js │ │ │ ├── show-links-legend.js │ │ │ ├── sliding-main.js │ │ │ ├── spider-indentation.js │ │ │ ├── spider-message.js │ │ │ ├── spider-options.js │ │ │ ├── spider-row.js │ │ │ ├── spider-structure-listing.js │ │ │ ├── start-url-options.js │ │ │ ├── tool-group.js │ │ │ ├── tool-panel.js │ │ │ ├── tool-tab.js │ │ │ ├── tooltip-container.js │ │ │ ├── tooltip-icon.js │ │ │ ├── tree-list-item-row.js │ │ │ ├── tree-list-item.js │ │ │ ├── tree-list.js │ │ │ └── url-bar.js │ │ ├── controllers/ │ │ │ ├── .gitkeep │ │ │ └── projects/ │ │ │ ├── project/ │ │ │ │ ├── conflicts/ │ │ │ │ │ └── conflict.js │ │ │ │ ├── conflicts.js │ │ │ │ ├── schema/ │ │ │ │ │ └── field/ │ │ │ │ │ └── options.js │ │ │ │ ├── spider/ │ │ │ │ │ ├── link-options.js │ │ │ │ │ ├── options.js │ │ │ │ │ └── sample/ │ │ │ │ │ ├── data/ │ │ │ │ │ │ └── annotation/ │ │ │ │ │ │ └── options.js │ │ │ │ │ └── data.js │ │ │ │ └── spider.js │ │ │ └── project.js │ │ ├── helpers/ │ │ │ ├── .gitkeep │ │ │ ├── array-get.js │ │ │ ├── attribute-annotation.js │ │ │ ├── chain-actions.js │ │ │ ├── guid.js │ │ │ ├── includes.js │ │ │ ├── indexed-object.js │ │ │ ├── is-empty-object.js │ │ │ ├── is-object-or-array.js │ │ │ └── is-object.js │ │ ├── index.html │ │ ├── initializers/ │ │ │ └── ui-state.js │ │ ├── instance-initializers/ │ │ │ └── error-handler.js │ │ ├── mixins/ │ │ │ ├── options-route.js │ │ │ └── save-spider-mixin.js │ │ ├── models/ │ │ │ ├── .gitkeep │ │ │ ├── annotation.js │ │ │ ├── base-annotation.js │ │ │ ├── base.js │ │ │ ├── extractor.js │ │ │ ├── field.js │ │ │ ├── item.js │ │ │ ├── project.js │ │ │ ├── sample.js │ │ │ ├── schema.js │ │ │ ├── spider.js │ │ │ └── start-url.js │ │ ├── resolver.js │ │ ├── router.js │ │ ├── routes/ │ │ │ ├── .gitkeep │ │ │ ├── application.js │ │ │ ├── browsers.js │ │ │ ├── index.js │ │ │ ├── projects/ │ │ │ │ ├── project/ │ │ │ │ │ ├── compatibility.js │ │ │ │ │ ├── conflicts/ │ │ │ │ │ │ └── conflict.js │ │ │ │ │ ├── conflicts.js │ │ │ │ │ ├── schema/ │ │ │ │ │ │ ├── field/ │ │ │ │ │ │ │ └── options.js │ │ │ │ │ │ └── field.js │ │ │ │ │ ├── schema.js │ │ │ │ │ ├── spider/ │ │ │ │ │ │ ├── link-options.js │ │ │ │ │ │ ├── options.js │ │ │ │ │ │ ├── sample/ │ │ │ │ │ │ │ ├── data/ │ │ │ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ │ │ │ └── options.js │ │ │ │ │ │ │ │ ├── annotation.js │ │ │ │ │ │ │ │ └── item.js │ │ │ │ │ │ │ ├── data.js │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── sample.js │ │ │ │ │ │ ├── start-url/ │ │ │ │ │ │ │ └── options.js │ │ │ │ │ │ └── start-url.js │ │ │ │ │ └── spider.js │ │ │ │ └── project.js │ │ │ └── projects.js │ │ ├── serializers/ │ │ │ └── application.js │ │ ├── services/ │ │ │ ├── annotation-structure.js │ │ │ ├── browser.js │ │ │ ├── capabilities.js │ │ │ ├── changes.js │ │ │ ├── clock.js │ │ │ ├── dispatcher.js │ │ │ ├── extracted-items.js │ │ │ ├── notification-manager.js │ │ │ ├── overlays.js │ │ │ ├── position-monitor.js │ │ │ ├── saving-notification.js │ │ │ ├── selector-matcher.js │ │ │ ├── store.js │ │ │ ├── ui-state.js │ │ │ └── web-socket.js │ │ ├── storages/ │ │ │ ├── cookies.js │ │ │ ├── page-loads.js │ │ │ ├── ui-state-collapsed-panels.js │ │ │ └── ui-state-selected-tools.js │ │ ├── styles/ │ │ │ ├── _animations.scss │ │ │ ├── _bootstrap_overrides.scss │ │ │ ├── _icons.scss │ │ │ ├── _lib_config.scss │ │ │ ├── _variables.scss │ │ │ ├── app.scss │ │ │ ├── components/ │ │ │ │ ├── animation-container.scss │ │ │ │ ├── browser-iframe.scss │ │ │ │ ├── browser-view-port.scss │ │ │ │ ├── combo-box.scss │ │ │ │ ├── conflicts.scss │ │ │ │ ├── dropdown-delete.scss │ │ │ │ ├── dropdown-menu.scss │ │ │ │ ├── dropdown-widget.scss │ │ │ │ ├── extracted-item-table.scss │ │ │ │ ├── extracted-items-json-panel.scss │ │ │ │ ├── extractor-options.scss │ │ │ │ ├── fragment-options.scss │ │ │ │ ├── help-icon.scss │ │ │ │ ├── icon-button.scss │ │ │ │ ├── indentation-spacer.scss │ │ │ │ ├── input-with-clear.scss │ │ │ │ ├── inspector-panel.scss │ │ │ │ ├── list-item-badge.scss │ │ │ │ ├── list-item-combo.scss │ │ │ │ ├── list-item-editable.scss │ │ │ │ ├── list-item-icon.scss │ │ │ │ ├── list-item-selectable.scss │ │ │ │ ├── list-item-text.scss │ │ │ │ ├── notifications.scss │ │ │ │ ├── page-actions.scss │ │ │ │ ├── project-structure-spider-generation-url.scss │ │ │ │ ├── regex-pattern-list.scss │ │ │ │ ├── save-status.scss │ │ │ │ ├── select-box.scss │ │ │ │ ├── show-links-legend.scss │ │ │ │ ├── side-bar.scss │ │ │ │ ├── sliding-main.scss │ │ │ │ ├── start-url-options.scss │ │ │ │ ├── tool-group.scss │ │ │ │ ├── tool-panel.scss │ │ │ │ ├── tooltip-container.scss │ │ │ │ ├── top-bar.scss │ │ │ │ ├── tree-list.scss │ │ │ │ └── url-bar.scss │ │ │ ├── document.scss │ │ │ ├── droplet.scss │ │ │ ├── generic.scss │ │ │ ├── layout/ │ │ │ │ ├── _clickable.scss │ │ │ │ ├── _forms.scss │ │ │ │ └── _full-page-content.scss │ │ │ └── templates/ │ │ │ ├── application.scss │ │ │ ├── browsers.scss │ │ │ └── projects.scss │ │ ├── templates/ │ │ │ ├── application.hbs │ │ │ ├── branding.hbs │ │ │ ├── browsers.hbs │ │ │ ├── components/ │ │ │ │ ├── .gitkeep │ │ │ │ ├── add-start-url-button.hbs │ │ │ │ ├── animation-container.hbs │ │ │ │ ├── annotation-options.hbs │ │ │ │ ├── browser-iframe.hbs │ │ │ │ ├── browser-list.hbs │ │ │ │ ├── browser-url-blocked.hbs │ │ │ │ ├── browser-url-failing.hbs │ │ │ │ ├── browser-view-port.hbs │ │ │ │ ├── buffered-input.hbs │ │ │ │ ├── colored-badge.hbs │ │ │ │ ├── colored-span.hbs │ │ │ │ ├── combo-box.hbs │ │ │ │ ├── create-project-button.hbs │ │ │ │ ├── create-spider-button.hbs │ │ │ │ ├── data-structure-annotations.hbs │ │ │ │ ├── data-structure-listing.hbs │ │ │ │ ├── dropdown-delete.hbs │ │ │ │ ├── dropdown-divider.hbs │ │ │ │ ├── dropdown-header.hbs │ │ │ │ ├── dropdown-item.hbs │ │ │ │ ├── dropdown-menu.hbs │ │ │ │ ├── dropdown-widget.hbs │ │ │ │ ├── edit-sample-button.hbs │ │ │ │ ├── element-overlay.hbs │ │ │ │ ├── element-rect-overlay.hbs │ │ │ │ ├── extracted-item-table.hbs │ │ │ │ ├── extracted-items-group.hbs │ │ │ │ ├── extracted-items-json-panel.hbs │ │ │ │ ├── extracted-items-json-value.hbs │ │ │ │ ├── extracted-items-json.hbs │ │ │ │ ├── extracted-items-panel.hbs │ │ │ │ ├── extracted-items-status.hbs │ │ │ │ ├── extracted-items-tab.hbs │ │ │ │ ├── extractor-options.hbs │ │ │ │ ├── feed-url-options.hbs │ │ │ │ ├── field-options.hbs │ │ │ │ ├── fragment-options.hbs │ │ │ │ ├── generated-url-options.hbs │ │ │ │ ├── help-icon.hbs │ │ │ │ ├── icon-button.hbs │ │ │ │ ├── input-with-clear.hbs │ │ │ │ ├── inspector-panel.hbs │ │ │ │ ├── json-file-compare.hbs │ │ │ │ ├── link-crawling-options.hbs │ │ │ │ ├── list-item-add-annotation-menu.hbs │ │ │ │ ├── list-item-annotation-field.hbs │ │ │ │ ├── list-item-badge.hbs │ │ │ │ ├── list-item-combo.hbs │ │ │ │ ├── list-item-editable.hbs │ │ │ │ ├── list-item-field-type.hbs │ │ │ │ ├── list-item-icon-menu.hbs │ │ │ │ ├── list-item-icon.hbs │ │ │ │ ├── list-item-item-schema.hbs │ │ │ │ ├── list-item-link-crawling.hbs │ │ │ │ ├── list-item-relation-manager.hbs │ │ │ │ ├── list-item-selectable.hbs │ │ │ │ ├── list-item-text.hbs │ │ │ │ ├── notification-container.hbs │ │ │ │ ├── notification-message.hbs │ │ │ │ ├── page-actions-editor.hbs │ │ │ │ ├── project-list.hbs │ │ │ │ ├── project-listing.hbs │ │ │ │ ├── project-structure-listing.hbs │ │ │ │ ├── project-structure-spider-feed-url.hbs │ │ │ │ ├── project-structure-spider-generated-url.hbs │ │ │ │ ├── project-structure-spider-url.hbs │ │ │ │ ├── regex-pattern-list.hbs │ │ │ │ ├── save-status.hbs │ │ │ │ ├── schema-structure-listing.hbs │ │ │ │ ├── scrapinghub-links.hbs │ │ │ │ ├── select-box.hbs │ │ │ │ ├── show-links-button.hbs │ │ │ │ ├── show-links-legend.hbs │ │ │ │ ├── sliding-main.hbs │ │ │ │ ├── spider-indentation.hbs │ │ │ │ ├── spider-message.hbs │ │ │ │ ├── spider-options.hbs │ │ │ │ ├── spider-row.hbs │ │ │ │ ├── spider-structure-listing.hbs │ │ │ │ ├── start-url-options.hbs │ │ │ │ ├── tool-group.hbs │ │ │ │ ├── tool-panel.hbs │ │ │ │ ├── tool-tab.hbs │ │ │ │ ├── tooltip-container.hbs │ │ │ │ ├── tooltip-icon.hbs │ │ │ │ ├── tree-list-item-row.hbs │ │ │ │ ├── tree-list-item.hbs │ │ │ │ ├── tree-list.hbs │ │ │ │ └── url-bar.hbs │ │ │ ├── options-panels.hbs │ │ │ ├── projects/ │ │ │ │ ├── project/ │ │ │ │ │ ├── conflicts/ │ │ │ │ │ │ ├── file-selector.hbs │ │ │ │ │ │ ├── help.hbs │ │ │ │ │ │ ├── resolver.hbs │ │ │ │ │ │ └── topbar.hbs │ │ │ │ │ ├── schema/ │ │ │ │ │ │ ├── field/ │ │ │ │ │ │ │ └── options.hbs │ │ │ │ │ │ ├── field.hbs │ │ │ │ │ │ └── structure.hbs │ │ │ │ │ ├── schema.hbs │ │ │ │ │ ├── spider/ │ │ │ │ │ │ ├── link-options.hbs │ │ │ │ │ │ ├── options.hbs │ │ │ │ │ │ ├── overlays.hbs │ │ │ │ │ │ ├── sample/ │ │ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ │ │ └── selection.hbs │ │ │ │ │ │ │ ├── data/ │ │ │ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ │ │ │ └── options.hbs │ │ │ │ │ │ │ │ ├── annotation.hbs │ │ │ │ │ │ │ │ ├── item.hbs │ │ │ │ │ │ │ │ ├── overlays.hbs │ │ │ │ │ │ │ │ ├── structure.hbs │ │ │ │ │ │ │ │ ├── toolbar.hbs │ │ │ │ │ │ │ │ └── tools.hbs │ │ │ │ │ │ │ ├── data.hbs │ │ │ │ │ │ │ ├── item.hbs │ │ │ │ │ │ │ ├── structure.hbs │ │ │ │ │ │ │ └── toolbar.hbs │ │ │ │ │ │ ├── sample.hbs │ │ │ │ │ │ ├── start-url/ │ │ │ │ │ │ │ └── options.hbs │ │ │ │ │ │ ├── structure.hbs │ │ │ │ │ │ ├── toolbar.hbs │ │ │ │ │ │ └── tools.hbs │ │ │ │ │ ├── spider.hbs │ │ │ │ │ ├── structure.hbs │ │ │ │ │ └── toolbar.hbs │ │ │ │ └── project.hbs │ │ │ ├── projects.hbs │ │ │ └── tool-panels.hbs │ │ ├── transforms/ │ │ │ ├── array.js │ │ │ ├── json.js │ │ │ └── start-url.js │ │ ├── utils/ │ │ │ ├── attrs.js │ │ │ ├── browser-features.js │ │ │ ├── colors.js │ │ │ ├── computed.js │ │ │ ├── ensure-promise.js │ │ │ ├── interaction-event.js │ │ │ ├── promises.js │ │ │ ├── selectors.js │ │ │ ├── start-urls.js │ │ │ ├── tree-mirror-delegate.js │ │ │ ├── types.js │ │ │ └── utils.js │ │ ├── validations/ │ │ │ ├── fixed-fragment.js │ │ │ ├── list-fragment.js │ │ │ └── range-fragment.js │ │ └── validators/ │ │ ├── range.js │ │ └── whitespace.js │ ├── bower.json │ ├── config/ │ │ ├── deprecation-workflow.js │ │ ├── environment-development.js │ │ ├── environment-production.js │ │ ├── environment-test.js │ │ └── environment.js │ ├── ember-cli-build.js │ ├── package.json │ ├── public/ │ │ ├── crossdomain.xml │ │ ├── empty-frame.html │ │ ├── frames-not-supported.html │ │ └── robots.txt │ ├── testem.js │ ├── tests/ │ │ ├── .jshintrc │ │ ├── helpers/ │ │ │ ├── destroy-app.js │ │ │ ├── module-for-acceptance.js │ │ │ ├── resolver.js │ │ │ └── start-app.js │ │ ├── index.html │ │ ├── test-helper.js │ │ └── unit/ │ │ ├── .gitkeep │ │ ├── models/ │ │ │ └── start-url-test.js │ │ ├── utils/ │ │ │ ├── selectors-test.js │ │ │ └── start-urls-test.js │ │ └── validators/ │ │ ├── range-test.js │ │ └── whitespace-test.js │ └── vendor/ │ ├── .gitkeep │ ├── modernizr.js │ ├── mutation-summary.js │ └── tree-mirror.js ├── slybot/ │ ├── .gitignore │ ├── CHANGES │ ├── MANIFEST.in │ ├── Makefile.buildbot │ ├── README.rst │ ├── bin/ │ │ ├── makedeb │ │ ├── portiacrawl │ │ └── slybot │ ├── debian/ │ │ ├── changelog │ │ ├── compat │ │ ├── control │ │ ├── copyright │ │ ├── pyversions │ │ └── rules │ ├── docs/ │ │ ├── Makefile │ │ ├── conf.py │ │ ├── index.rst │ │ ├── make.bat │ │ ├── project.rst │ │ └── spiderlets.rst │ ├── requirements-clustering.txt │ ├── requirements-test.txt │ ├── requirements.txt │ ├── scrapy.cfg │ ├── setup.py │ ├── slybot/ │ │ ├── __init__.py │ │ ├── baseurl.py │ │ ├── closespider.py │ │ ├── clustering.py │ │ ├── dupefilter.py │ │ ├── exporter.py │ │ ├── extractors.py │ │ ├── fieldtypes/ │ │ │ ├── __init__.py │ │ │ ├── date.py │ │ │ ├── images.py │ │ │ ├── number.py │ │ │ ├── point.py │ │ │ ├── price.py │ │ │ ├── text.py │ │ │ └── url.py │ │ ├── generic_form.py │ │ ├── item.py │ │ ├── linkextractor/ │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── ecsv.py │ │ │ ├── html.py │ │ │ ├── pagination.py │ │ │ ├── regex.py │ │ │ └── xml.py │ │ ├── meta.py │ │ ├── pageactions.py │ │ ├── plugins/ │ │ │ ├── __init__.py │ │ │ ├── scrapely_annotations/ │ │ │ │ ├── __init__.py │ │ │ │ ├── annotations.py │ │ │ │ ├── builder.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── extraction/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── container_extractors.py │ │ │ │ │ ├── extractors.py │ │ │ │ │ ├── pageparsing.py │ │ │ │ │ ├── region_extractors.py │ │ │ │ │ └── utils.py │ │ │ │ ├── migration.py │ │ │ │ ├── processors.py │ │ │ │ └── utils.py │ │ │ └── selectors/ │ │ │ └── __init__.py │ │ ├── settings.py │ │ ├── spider.py │ │ ├── spiderlets.py │ │ ├── spidermanager.py │ │ ├── splash.py │ │ ├── starturls/ │ │ │ ├── __init__.py │ │ │ ├── feed_generator.py │ │ │ ├── fragment_generator.py │ │ │ ├── generated_url.py │ │ │ └── generator.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── data/ │ │ │ │ ├── SampleProject/ │ │ │ │ │ ├── extractors.json │ │ │ │ │ ├── items.json │ │ │ │ │ ├── project.json │ │ │ │ │ └── spiders/ │ │ │ │ │ ├── allowed_domains.json │ │ │ │ │ ├── any_allowed_domains.json │ │ │ │ │ ├── books.toscrape.com/ │ │ │ │ │ │ ├── 3617-44af-a2f0/ │ │ │ │ │ │ │ └── original_body.html │ │ │ │ │ │ ├── 3617-44af-a2f0.json │ │ │ │ │ │ ├── 3652-4fa1-a912.json │ │ │ │ │ │ ├── 4583-41b4-9edb/ │ │ │ │ │ │ │ └── original_body.html │ │ │ │ │ │ └── 4583-41b4-9edb.json │ │ │ │ │ ├── books.toscrape.com.json │ │ │ │ │ ├── books.toscrape.com_1.json │ │ │ │ │ ├── cargurus.json │ │ │ │ │ ├── ebay.json │ │ │ │ │ ├── ebay2.json │ │ │ │ │ ├── ebay3.json │ │ │ │ │ ├── ebay4.json │ │ │ │ │ ├── example.com.json │ │ │ │ │ ├── example2.com.json │ │ │ │ │ ├── example3.com.json │ │ │ │ │ ├── example4.com.json │ │ │ │ │ ├── networkhealth.com/ │ │ │ │ │ │ ├── networkhealthtemplate/ │ │ │ │ │ │ │ ├── annotated_body.html │ │ │ │ │ │ │ └── original_body.html │ │ │ │ │ │ └── networkhealthtemplate.json │ │ │ │ │ ├── networkhealth.com.json │ │ │ │ │ ├── pinterest.com.json │ │ │ │ │ ├── seedsofchange.com.json │ │ │ │ │ ├── seedsofchange.json │ │ │ │ │ ├── seedsofchange2.json │ │ │ │ │ └── sitemaps.json │ │ │ │ ├── atom_sample.xml │ │ │ │ ├── ebay_advanced_search.html │ │ │ │ ├── pinterest.html │ │ │ │ ├── rss_sample.xml │ │ │ │ ├── sitemap_sample.xml │ │ │ │ ├── templates/ │ │ │ │ │ ├── 411_list.json │ │ │ │ │ ├── autoevolution.html │ │ │ │ │ ├── autoevolution.json │ │ │ │ │ ├── autoevolution2.json │ │ │ │ │ ├── cars.com.json │ │ │ │ │ ├── cars.com_nested.json │ │ │ │ │ ├── cs-cart.json │ │ │ │ │ ├── daft_ie.html │ │ │ │ │ ├── daft_list.json │ │ │ │ │ ├── firmen.wko.at.html │ │ │ │ │ ├── firmen.wko.at.json │ │ │ │ │ ├── hn.html │ │ │ │ │ ├── patchofland.html │ │ │ │ │ ├── so_annotations.json │ │ │ │ │ ├── stack_overflow.html │ │ │ │ │ ├── stips.co.il.html │ │ │ │ │ ├── stips.co.il.json │ │ │ │ │ └── xceed.json │ │ │ │ └── test_params.txt │ │ │ ├── test_baseurl.py │ │ │ ├── test_dropmeta.py │ │ │ ├── test_dupefilter.py │ │ │ ├── test_extraction_speed.py │ │ │ ├── test_extractors.py │ │ │ ├── test_fieldtypes.py │ │ │ ├── test_fragment_generator.py │ │ │ ├── test_generic_form.py │ │ │ ├── test_linkextractors.py │ │ │ ├── test_migration.py │ │ │ ├── test_multiple_item_extraction.py │ │ │ ├── test_page_actions.py │ │ │ ├── test_schema_validation.py │ │ │ ├── test_selectors.py │ │ │ ├── test_spider.py │ │ │ ├── test_starturls.py │ │ │ ├── test_starturls_generator.py │ │ │ └── utils.py │ │ ├── utils.py │ │ └── validation/ │ │ ├── __init__.py │ │ ├── schema.py │ │ └── schemas.json │ └── tox.ini ├── slyd/ │ ├── .gitignore │ ├── .jshintrc │ ├── README.md │ ├── bin/ │ │ ├── init_mysql_db │ │ ├── sh2sly │ │ └── slyd │ ├── requirements.txt │ ├── setup.py │ ├── slyd/ │ │ ├── __init__.py │ │ ├── authmanager.py │ │ ├── dummyauth.py │ │ ├── errors.py │ │ ├── gitstorage/ │ │ │ ├── __init__.py │ │ │ ├── jsondiff.py │ │ │ ├── projects.py │ │ │ └── projectspec.py │ │ ├── html_utils.py │ │ ├── projects.py │ │ ├── projectspec.py │ │ ├── resource.py │ │ ├── server.py │ │ ├── settings/ │ │ │ ├── __init__.py │ │ │ └── base.py │ │ ├── specmanager.py │ │ ├── splash/ │ │ │ ├── __init__.py │ │ │ ├── commands.py │ │ │ ├── cookies.py │ │ │ ├── css_utils.py │ │ │ ├── ferry.py │ │ │ ├── proxy.py │ │ │ ├── qtutils.py │ │ │ └── utils.py │ │ └── tap.py │ └── twisted/ │ └── plugins/ │ └── slyd_plugin.py └── splash_utils/ ├── compile_slybot.sh ├── filters/ │ └── easylist.txt ├── perform_actions.js ├── waitAsync.js └── z_inject_this.js