1. ホーム
  2. python

[解決済み] Scrapyで次のページをクロールする

2022-02-14 19:32:32

質問

ウェブサイトからデータを取得しようとしているのですが、ページネーションリンクを適切に設定しても、私のスパイダーは次のページにクロールしません。

import scrapy


class NspiderSpider(scrapy.Spider):
    name = "nspider"
    allowed_domains = ["elimelechlab.yale.edu/"]
    start_urls = ["https://elimelechlab.yale.edu/pub"]

    def parse(self, response):
        title = response.xpath(
            '//*[@class="views-field views-field-title"]/span/text()'
        ).extract()
        doi_link = response.xpath(
            '//*[@class="views-field views-field-field-doi-link"]//a[1]/@href'
        ).extract()

        yield {"paper_title": title, "doi_link": doi_link}

        next_page = response.xpath(
            '//*[@title="Go to next page"]/@href'
        ).extract_first()  # extracting next page link

        if next_page:
            yield scrapy.Request(url=response.urljoin(next_page), callback=self.parse)



追記:LinkExtractorは使いたくありません。 何か助けがあればありがたいです。

解決方法は?

アイテムの収量が同じ識別レベルにあるため、コードがこれに到達しないだけで、next_pageロジックには何も問題はありません。次の方法を試してみてください。

import scrapy


class NspiderSpider(scrapy.Spider):
    name = "nspider"
    allowed_domains = ["elimelechlab.yale.edu"]
    start_urls = ["https://elimelechlab.yale.edu/pub"]

    def parse(self, response):
        for view in response.css('div.views-row'):
            yield {
                'paper_title': view.css('div.views-field-title span.field-content::text').get(),
                'doi_link': view.css('div.views-field-field-doi-link div.field-content a::attr(href)').get()
            }

        next_page = response.xpath(
            '//*[@title="Go to next page"]/@href'
        ).extract_first()  # extracting next page link

        if next_page:
            yield scrapy.Request(url=response.urljoin(next_page), callback=self.parse)