@scrapy_python FAQ
В этом репозитории находится полезная информация, собранная участниками чата.
- Прочитать документацию
- Базовые вопросы по питону @ru_python_beginners
- CLOSESPIDER_PAGECOUNT = 10
- ставится Splash(удобно в Docker) и плагин scrapy_splash
- смотреть откуда идут данные в Chrome -> devtools -> network -> XHR
- JS to Python
- Использовать css селекторы чтобы избежать пробелов в названии при использовании @class в xpath, альтернатива "contains(@class, 'someclass')" выглядит сложнее.
- Использовать xpath для поиска сложных значений, например в таблицах
- Использовать inline-requests для синхронных запросов в функции
- Посмотреть мобильную версию
- Достать href тега a: "a::attr(href)"
- Достать текст ноды: "title::text"
- Аналог contains у xpath, "a[href*=image] img::attr(src)"
- Можно добавить xpath ".css('img').xpath('@src')"
- Проверка css-селекторов
- Список css-селекторов
- html_text - извлечь текст из сложного селектора, аналог .get_text(' ', strip=True) из BeautifulSoup, но быстрее и точнее.
- Selector Gadget получить короткий css или xpath элемента(ов), см. видео на их сайте. Получается намного лучше встроенного в браузер copy as css/xpath.
После return жизни нет. Нужно возвращать список или что-то итерируемое.
Через CSS - никак. Использовать xpath contains. Документация по xpath.
Простой способ - поставить в anaconda
https://app.scrapinghub.com/api/items.json?project=PROJECT&spider=SPIDERNAME&apikey=KEY там где SPIDERNAME нужно вставить именно название, а не номер паука. дополнительно можно почитать тут
Использовать цикл по форме c FormRequest.from_response, дополнительное поле со счетчиком формы formnumber=counter и с фильтром dont_filter=True.
Страница отдает 503 ошибку. На этой странице javascript собирает код в форму с рандомным урлом и тремя hidden полями. После отправки этой формы отдается 302 редирект на нужную страницу.
default_settings.py в офф.репо
Chrome -> devtools -> network -> клик на страницу -> copy as curl. Далее гуглим "curl to python", вставляем код и получаем распаршенный код в библиотеке requests
Fiddler или postman(он умеет сразу в питонкод конвертить). Мощнее и сложнее wireshark.
- Хостинг Scrapinghub по дефолту стоит задержка, нужно отключать в настройках AUTOTHROTTLE_ENABLED чекбокс False
- UI для Scrapy ScrapydWeb
- Управление Scrapyd
Проверка N страниц.
- requests в один поток - бесконечное время
- scrapy из локальной машины - 30 минут
- scrapinghub с включенным по дефолту тротлингом - больше 1 часа
- scrapinghub без троттлинга 1 юнит - 23 минуты
- scrapinghub без троттлинга 3 юнита - 15 минут
Да, можно
- Посмотреть два туториала от Corey Shaffer: How to Match Any Pattern of Text и How to Write and Match Regular Expressions
- Практиковаться в любом редакторе, который поддерживает поиск по регам (например ST3 или Atom) - это не сложно
- Найти и прочитать Mastering Python Regular Expressions
- Вдумчиво прочитать Тираногайд по регуляркам
Справочники и туториалы с примерами:
- Отличный гайд для начинающих от Guru99
- Интро от W3Schools
- Справочник-гайд от Javatpoint
- Туториал по работе с xpath и xslt в библитеке lxml
- от Zvon
- от TutorialsPoint
Подборка cheatsheets и bestpractices по xpath