Задать вопрос
@Jumper1

Как достать данные со страницы, используя scrapy?

Задача состоит в том, чтобы спарсить карточку, затем перейти по ссылке в карточке и еще оттуда достать неодходимые данные, но так, чтобы это выводилось вместе.
Сейчас у меня получается только раздельно вывести и, по всей видимости, в разноброс.
Пробовал объединять в переменную, но выводило ошибку
По-разному уже извращался, но без результата
Что можно попробовать сделать? И возможно ли такое вообще?)

class TutorSpider(scrapy.Spider):
    name = 'tutorial'
    start_urls = [
        'https://hh.ru/search/vacancy?L_is_autosearch=false&area=3&clusters=true&enable_snippets=true&text=Python&page=0',
    ]

    def parse(self, response: HtmlResponse):
        """vacancy_href = response.xpath('//a[@class="bloko-link HH-LinkModifier"]/@href')
        for href in vacancy_href:
            yield response.follow(href, callback=self.parse_vacancy)"""

        # Переходит по страницам
        next_page = response.xpath('//a[@class="bloko-button HH-Pager-Controls-Next HH-Pager-Control"]')
        for page in next_page:
            yield response.follow(page, callback=self.parse)

        # Парсит карточку с вакансией
        for card_vacancy in response.xpath('//div[@class="vacancy-serp-item "]'):
            yield {'title': card_vacancy.xpath('.//a[@class="bloko-link HH-LinkModifier"]/text()').get(),
                'salary': card_vacancy.xpath('.//span[@class="bloko-section-header-3 bloko-section-header-3_lite"]/text()').get(),
                'employer': card_vacancy.xpath('.//a[@class="bloko-link bloko-link_secondary"]/text()').get(),
                }

        # Парсит страницу с тегами и адресом
        for page_with_details in response.xpath('//a[@class="bloko-link HH-LinkModifier"]'):
            yield response.follow(page_with_details, self.parse_vacancy_details)


    def parse_vacancy_details(self, response: HtmlResponse):
        yield {'place': response.xpath('//span[@data-qa="vacancy-view-raw-address"]/text()').get(),
               'tags': response.xpath('//span[@data-qa="bloko-tag__text"]/text()').getall(),
                'url': response.url,
                }
  • Вопрос задан
  • 332 просмотра
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы