Skip to content

Instantly share code, notes, and snippets.

@tananin
Last active October 16, 2021 07:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tananin/a7f7b872d3a52ee74449ff5d035a0ffd to your computer and use it in GitHub Desktop.
Save tananin/a7f7b872d3a52ee74449ff5d035a0ffd to your computer and use it in GitHub Desktop.

Scrapy фреймвор для парсинга, сбора данных

  1. Устанавливаем Scrapy pip install scrapy
  2. Создаём проект Scrapy scrapy startproject my_name_project
  3. Переходим в терминале в созданную директорию cd my_name_project
  4. Создаём паука scrapy genspider example www.example.ru (имя паука и проекта не должны совподать)
  5. Открываем созданный файл паука /spiders/example.py
  6. Запуск паука scrapy crawl example

Отладка

  • Name: name
  • Module name: scrapy
  • Parametrs: crawl spider01
  • Working dirrectory: add name

Scrapy shell

  1. Запустим scrapy shell **scrapy shell "https://domain.com"
  2. Начинаем исследование сайта, запустим в шеле команду view(response)
  3. Получим ссылки с каталога: response.css(".top-bar-left .vertical.menu a::attr(href)").getall()

Функция parse

Пример сбора ссылок с одной страницы

# items link
hrefs =  response.css(".catalog_main_table a::attr(href)").getall()
for href in hrefs:
    url = response.urljoin(href)
    yield scrapy.Request(url)
    
# вместо цикла можно использовать
yield from response.follow_all(hrefs)
def parse(self, response):
# pagination
pages = response.css("a.pagination-item::attr(href)").getall()
yield from response.follow_all(pages)
# items link
hrefs = response.css(".catalog_main_table a::attr(href)").getall()
yield from response.follow_all(hrefs, callback=self.parse_item)
def parse_item(self):
pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment