Паук Scrapy не будет переходить на следующую страницу - PullRequest
0 голосов
/ 03 ноября 2018

Я работаю над Scrapy для шведского сайта электронной коммерции Blocket.se. Она очищает первую страницу, как и должна, но не переходит на следующую.

Команда для следующего URL

response.xpath(u'//a[contains(text(), "Nästa")]/@href').extract()

выводит «неполную» ссылку, когда я пробую ее в оболочке Scrapy:

?q=cykel&cg=0&w=1&st=s&c=&ca=11&l=0&md=th&o=2

Должна ли быть "полная" ссылка для работы?:

https://www.blocket.se/stockholm?q=cykel&cg=0&w=1&st=s&c=&ca=11&l=0&md=th&o=2

Начальный URL: https://www.blocket.se/stockholm?q=cykel&cg=0&w=1&st=s&c=&ca=11&is=1&l=0&md=th

Полный код:

import scrapy

class BlocketSpider(scrapy.Spider):
    name = "blocket"
    start_urls = ["https://www.blocket.se/stockholm?q=cykel&cg=0&w=1&st=s&c=&ca=11&is=1&l=0&md=th"]

    def parse(self, response):
        urls = response.css("h1.media-heading > a::attr(href)").extract()
        for url in urls:
            url = response.urljoin(url)
            yield scrapy.Request(url=url, callback=self.parse_details)


        #follow pagination links
        next_page_url = response.xpath(u'//a[contains(text(), "Nästa")]/@href').extract()
        if next_page_url:
            next_page_url = response.urljoin(next_page_url)
            yield scrapy.Request(url=next_page_url, callback=self.parse)

    def parse_details(self, response):
        yield {
        "Objekt": response.css("h1.h3::text").extract(),
        "Säljare":response.css("li.mrl > strong > a::text").extract(),
        "Uppladdad": response.css("li.mrl > time::text").extract(),
        "Pris": response.css("div.h3::text").extract(),
        "Område": response.css("span.area_label::text").extract(),
        "Bild-URL": response.css("div.item > img::attr(src)").extract(),
        }

1 Ответ

0 голосов
/ 04 ноября 2018

Да, для scrapy обычно нужен полный URL. Но вы можете продолжать использовать urljoin() или response.follow() метод:

next_page_url = response.xpath(u'//a[contains(text(), "Nästa")]/@href').extract()
if next_page_url:
    yield response.follow(url=next_page_url, callback=self.parse)

Подробнее об этом в Учебное пособие по терапии .

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