Очистка нескольких страниц ВНУТРИ нескольких страниц (Scrapy) - PullRequest
0 голосов
/ 07 ноября 2019

Я изо всех сил пытаюсь разобраться со структурой кода, который мне нужно настроить, чтобы очистить несколько страниц на нескольких страницах. Вот что я имею в виду:

  1. Я начинаю на главной странице, где есть URL-адреса для всех букв алфавита. Каждая буква является начальной буквой названий пород собак.
  2. Для каждой буквы имеется несколько страниц пород собак. Мне нужно зайти на страницу каждой породы собак.
  3. Для каждой породы собак есть несколько страниц собак, выставленных на продажу. Мне нужно получать данные со каждой страницы со списком продаж.

Как уже говорилось ранее, я пытаюсь понять, как должна выглядеть структура моего кода. Частично проблема в том, что я не до конца понимаю, как работает поток кода Python. Будет ли что-то вроде этого правильным:

def parse
       Get URL of all the alphabet letters
       pass on the URL to parse_A

def parse_A
      Get URL of all pages for that alphabet letter
      pass on the URL to parse_B

def parse_B
      Get URL for all breeds listed on that page of that alphabet letter
      pass on the URL to parse_C

def parse_C
      Get URL for all the pages of dogs listed of that specific breed
      pass on the URL to parse_D

def parse_D
      Get URL of specific for sale listing of that dog breed on that page
      pass on the URL to parse_E

def parse_E
     Get all of the details for that specific listing
     Callback to ??

Для последнего обратного вызова в parse_E, я должен направить обратный вызов в parse_D или в самый первый анализ?

Спасибо!

1 Ответ

2 голосов
/ 07 ноября 2019

Вы должны следовать структуре, как показано ниже, используя скрап.

def parse():
    """
    Get URL of all URLs from the alphabet letters (breed_urls)
    :return:
    """
    breed_urls = 'parse the urls'
    for url in breed_urls:
        yield scrapy.Request(url=url, callback=self.parse_sub_urls)


def parse_sub_urls(response):
    """
    Get URL of all SubUrls from the subPage (sub_urls)
    :param response:
    :return:
    """
    sub_urls= 'parse the urls'
    for url in sub_urls:
        yield scrapy.Request(url=url, callback=self.parse_details)

    next_page = 'parse the page url'
    if next_page:
        yield scrapy.Request(url=next_page, callback=self.parse_sub_urls)

def parse_details(response):
    """
    Get the final details from the listing page
    :param response:
    :return:
    """

    details = {}
    name = 'parse the urls'
    details['name'] = name

    # parse all other details and append to the dictionary

    yield details
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...