Python爬虫 #018 Scrapy回调函数

一般的爬虫只能爬取单个网页的数据,对于多个页面需要多次requests,而Scrapy中回调函数可以反复的爬取

1. 多网页获取数据

  • 对于有些页面,有下一页按钮,且审查元素中存在下一页的url,如:

  • 则可以多次回调函数,来达到解析多页面的目的

    # -*- coding: utf-8 -*-
    import scrapy
    # 导入items中的类
    from joke.items import JokeItem
    # 该代码只负责解析
    class XiaohuaSpider(scrapy.Spider):
        name = 'xiaohua'
        # 限制爬虫的范围,爬取多页面可能会出问题,则注释掉
        # allowed_domains = ['xiaohua.zol.com.cn/lengxiaohua/']
        start_urls = ['http://xiaohua.zol.com.cn/lengxiaohua/']
        # 用于翻页
        base_url = 'http://xiaohua.zol.com.cn'
    
        def parse(self, response):
            jokes = response.xpath('//ul[@class="article-list"]/li')
            for joke in jokes:
                title = joke.xpath('./span[2]/a/text()')[0].extract()
                content = joke.xpath('./div[2]//text()').extract()
                # content是列表,且有很多无效字符
                ## 把字符串连接起来且消除\t,\n字符
                content = " ".join(content).replace('\t','').replace('\n','')
                item = JokeItem()
                item['title'] = title
                item['content'] = content
                # 把数据返回给item,用return会结束函数
                yield item
            # 获取下一页的链接,get可取出(用法与xpath有点不一样)
            next_page = response.xpath('//div[@class="page-box"]/div/a[@class="page-next"]/@href').get()
            print('----------------',next_page)
            print(self.base_url+next_page)
    
            # 请求下一页的网址,callback调用parse函数,实现循环
            yield scrapy.Request(self.base_url+next_page, callback=self.parse)
    

posted @ 2023-06-28 23:01  枫_Null  阅读(37)  评论(0)    收藏  举报