在抓取蜘蛛中解析URL之前,如何抓取表示网站中最大页面数的数字?

克鲁兹奇·克拉珀曼

我正在尝试抓取此网站https://phdessay.com/free-essays/

我需要找到最大页面数,以便可以将带有页码的URL附加到start_urls列表中。我不知道该怎么做。

到目前为止,这是我的代码,

class PhdessaysSpider(scrapy.Spider):
    name = 'phdessays'
    start_urls = ['https://phdessay.com/free-essays/']

    def parse(self, response):
        all_essay_urls = response.css('.phdessay-card-read::attr(href)').getall()
        for essay_url in all_essay_urls:
            yield scrapy.Request(essay_url, callback=self.parse_essay_contents)


    def parse_essay_contents(self, response):
        items = PhdEssaysItem()
        essay_title = response.css('.site-title::text').get()
        essay_url = response.request.url
        items['essay_title'] = essay_title
        items['essay_url'] = essay_url
        yield items

在上面的代码中,我将每个文章放在其单独的页面上,然后抓取URL和标题(我将抓取内容,这就是我追踪每个文章URL的原因)。

这对于起始页来说很好用;但是大约有1677页,将来可能会更改。我想抓取这个maximum_no_of_pages数字,然后在所有链接后附加所有页码。

坦率的567

您可以做的是找到最后一个页码,然后进行范围循环以产生下一页的请求。

像这样:

class PhdessaysSpider(scrapy.Spider):
    name = 'phdessays'
    start_urls = ['https://phdessay.com/free-essays/']

    def parse(self, response):
        max_page = int(response.css('.page-numbers::text').getall()[-1])
        for page_number in range(1, max_page + 1):
            page_url = f'https://phdessay.com/free-essays/page/{page_number}/'
            yield scrapy.Request(page_url, callback=self.parse_page)

    def parse_page(self, response):
        all_essay_urls = response.css('.phdessay-card-read::attr(href)').getall()
        for essay_url in all_essay_urls:
            yield scrapy.Request(essay_url, callback=self.parse_essay_contents)

    def parse_essay_contents(self, response):
        items = PhdEssaysItem()
        essay_title = response.css('.site-title::text').get()
        essay_url = response.request.url
        items['essay_title'] = essay_title
        items['essay_url'] = essay_url
        yield items

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章