Scrapy: как получить информацию со всех вкладок на странице? - PullRequest
0 голосов
/ 09 марта 2020

На этой странице Мне нужно получить информацию со всех вкладок (профиль, отзывы, номера телефонов и инструкции).

wellness.py

def profile(self, response):
    services = response.xpath('.//span[contains(text(),"Services")]')
    education = response.xpath('.//span[contains(text(),"Education")]')
    training = response.xpath('.//span[contains(text(),"Training")]')

    yield {
            'First and Last name': response.css('h1::text').get(),
            'About': response.css('.listing-about::text').get(),
            'Services': services.xpath('following-sibling::span[1]/text()').extract(),
            'Primary Specialty': response.css('.normal::text').get(),
            'Address': ' '.join([i.strip() for i in response.css('.office-address span::text').getall()]),
            'Practice': response.css('.years-in-service::text').get(),
            'Education': education.xpath('following-sibling::span[1]/text()').extract(),
            'Training': training.xpath('following-sibling::span[1]/text()').extract(),
            'Consumer Feedback': response.css('.item-rating-container a::text').get()                
        }

1 Ответ

1 голос
/ 09 марта 2020

Каждая вкладка загружает отдельную страницу / URL. Я думаю, вы подумали, так как это было вкладка, это была та же страница. Таким образом, вам придется собрать необходимые данные с первой страницы, запросить данные на 2-й странице и запросить 3-ю страницу. Вы сохраняете данные с предыдущей страницы, передавая элемент в метаатрибутах. Вот как бы я это сделал. Обратите внимание, что код для ссылок правильный, вам нужно будет сделать селекторы для точек данных на каждой странице.

def profile(self, response):
    item = {}
    item["field1"] = response.xpath('//xpath').get()
    # Get first link for reviews
    review_link = response.css('#reviews_tab a::attr(href)').get()
    yield scrapy.Request(response.urljoin(review_link), callback=self.parse_reviews, meta={'item': item})

def parse_reviews(self, response):
    item = response.meta['item']
    item["field2"] = response.xpath
    directions_link = response.css('#directions_tab a:attr(href)').get()
    yield scrapy.Request(response.urljoin(directions_link), callback=self.parse_directions, meta={'item': item})

def parse_directions(self, response):
    item = response.meta['item']
    item['directions'] = response.xpath
    yield item

...