首页 > 技术文章 > Scrapy实现多页数据爬取

Hedger-Lee 2020-06-09 14:36 原文

Scrapy实现多页数据爬取

1.先指定通用模板

url = 'https://www.qiushibaike.com/text/page/%d/'#通用的url模板
pageNum = 1

2.对parse方法递归处理

parse第一次调用表示的是用来解析第一页对应页面中的数据

对后面的页码的数据要进行手动发送

if self.pageNum <= 5:
    self.pageNum += 1
    new_url = format(self.url%self.pageNum)
    #手动请求(get)的发送
    yield scrapy.Request(new_url,callback=self.parse)

完整示例

class QiubaiSpider(scrapy.Spider):
    name = 'qiubai'
    # allowed_domains = ['www.xxx.com']
    start_urls = ['https://www.qiushibaike.com/text/']
    
    url = 'https://www.qiushibaike.com/text/page/%d/'#通用的url模板
    pageNum = 1
    #parse第一次调用表示的是用来解析第一页对应页面中的段子内容和作者
    def parse(self, response):
        div_list = response.xpath('//*[@id="content-left"]/div')
        all_data = []
        for div in div_list:
            author = div.xpath('./div[1]/a[2]/h2/text()').extract_first()
            
            content = div.xpath('./a[1]/div/span//text()').extract()
            content = ''.join(content)

            # 将解析的数据存储到item对象
            item = QiubaiproItem()
            item['author'] = author
            item['content'] = content

            # 将item提交给管道
            yield item  # item一定是提交给了优先级最高的管道类

        if self.pageNum <= 5:
            self.pageNum += 1
            new_url = format(self.url%self.pageNum)
            #手动请求(get)的发送
            yield scrapy.Request(new_url,callback=self.parse)

推荐阅读