首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在分析抓取爬行器中的URL之前,如何抓取表示网站中最大页数的数字?

在分析抓取爬行器中的URL之前,如何抓取表示网站中最大页数的数字?
EN

Stack Overflow用户
提问于 2019-09-17 14:59:42
回答 1查看 286关注 0票数 1

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

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

到目前为止,我的代码如下:

代码语言:javascript
复制
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号码,然后附加所有链接与所有页码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-17 15:10:26

您可以做的是找到最后一个页码,然后执行范围循环以生成next pages请求。

如下所示:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57968908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档