Как ползти по ссылке на ifnormation мне нужно - PullRequest
1 голос
/ 11 июня 2019

Мне нужно получить все отзывы и оценки со страницы продукта, и мне удалось:

С добавлением ручной ссылки на страницу с отдельным обзором продукта я получаю все отзывы и оценки со страницы (включая другие страницы обзора)

И чтобы ускорить этот процесс, я хотел со страницы категорий перейти на страницу продукта и получить все отзывы и оценки после того, как это будет сделано, перейти к другому продукту.

import scrapy


class ReviewAutoSpider(scrapy.Spider):
    name = 'automatic'

    start_urls = ['https://www.ceneo.pl/Gry_bez_pradu']

    def parse(self, response):
        # follow links to website with review
        for href in response.css('a.product-rewiews-link + a::attr(href)'):
            yield response.follow(href, self.parse_link)

        # follow pagination links
        #for href in response.css('li.arrow-next a::attr(href)'):
         #   yield response.follow(href, self.parse)

    def parse_link(self, response):
        #get all reviews+score on page 
        for review in response.css('li.review-box'):
            yield {
             'score': review.css('span.review-score-count::text').get(),
             'text': review.css('p.product-review-body::text').getall(),
            }
        # follow pagination links
        for href in response.css('li.arrow-next a::attr(href)'):
            yield response.follow(href, callback=self.parse)

1 Ответ

0 голосов
/ 12 июня 2019

Хорошо, следующее решение должно работать. Ссылки, которые вы получали, имели только вторую часть ссылки, '/ 19838632', вам нужно использовать response.urljoin('/19838632'), чтобы получить полную ссылку. Кроме того, как сейчас настроен паук, вы будете делать большое количество запросов к сайту одновременно, поэтому я настоятельно рекомендую использовать прокси-сервис.

`питон

import scrapy
class ReviewAutoSpider(scrapy.Spider):

    name = 'automatic'

    start_urls = ['https://www.ceneo.pl/Gry_bez_pradu']

    def parse(self, response):
        # follow links to website with review
        for href in response.css('a.product-rewiews-link + a::attr(href)'):
            yield scrapy.Request(href, callback = self.parse)

        for href in response.css('.cat-prod-row-name a::attr(href)').extract():
            link = response.urljoin(href)
            yield scrapy.Request(link, callback = self.parse)

        next_page_link = response.css('li[class ="page-arrow arrow-next"] a::attr(href)').extract_first()
        next_page_link = response.urljoin(next_page_link)
        yield scrapy.Request(next_page_link, callback = self.parse)


    def parse_link(self, response):
        #get all reviews+score on page
        for review in response.css('li.review-box'):
            yield {
             'score': review.css('span.review-score-count::text').get(),
             'text': review.css('p.product-review-body::text').getall(),
            }
        # follow pagination links
        for href in response.css('li.arrow-next a::attr(href)'):
            yield scrapy.Request(href, callback = self.parse)

`

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