Python-爬虫(七)scrapy-爬取糗事百科分页内容,解决分页请求重定向问题

上篇内容我们只把第一页内容爬取了下来,这次我们看下scrapy中的分页是怎么查询出来的。

在上篇的代码基础上我们修改spiders下的代码:

要注意和之前不同的地方。

import scrapy
from first_project.items import FirstProjectItem
#爬虫继承scrapy.Spider
class QiushibaikeSpider(scrapy.Spider):
    # 当前爬虫的名字,一个项目中唯一,后面启动当前爬虫使用这个name
    name = 'qiushibaike'
    # 当前爬虫的网址域名起到限定作用
    allowed_domains = ['qiushibaike.com']
    # 爬虫的起始url,scrapy会首先请求这个里面配置的url,
    # 然后把返回的结果传递给下面的parse函数,response参数就是返回的内容
    start_urls = ['https://www.qiushibaike.com/8hr/page/1/']
    BASE_URL='https://www.qiushibaike.com'
    def parse(self, response):
        # response是一个HtmlResponse对象,可以用它获取返回的内容response.text,使用xpath获取内容response.xpath("..")
        print("*************************")
        responseContent = response.xpath("//div[@class='recmd-right']")

        for i in responseContent:
            author=i.xpath(".//span[@class='recmd-name']/text()").get()
            title=i.xpath(".//a[@class='recmd-content']/text()").get()
            #把数据转为字典
            # data={"author": author,"title":title}
            data=FirstProjectItem(author=author,title=title)
            #把数据转给pipelines,需要使用 yield,  代表把数据转给底层框架,然后框架会转给pipelines.py文件中
            yield data

        ###开始分页查询
        #首先我们要找到下一页 地址
        next_url= response.xpath("//ul[@class='pagination']/li[last()]/a/@href").get()
        print(next_url)
        current_page=response.xpath("//ul[@class='pagination']/li/span[@class='current']/text()").get()
        if current_page:
          print('当前页数'+current_page)
        #因为页面到最后一页之后下一页就会变成首页,所以到这里就要停止
        if  next_url=='/hot/':
            return
        else:
            #把请求yield出去交给框架处理,注意我这里加了meta参数,是防止重定向的,不然我这里直接请求会重定向别的错误地址
            yield scrapy.Request(self.BASE_URL+next_url,meta={
                'dont_redirect': True,
                'handle_httpstatus_list': [302,301]
            },callback=self.parse)

爬取的效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姑苏冷

您的打赏是对原创文章最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值