Scrapy爬虫框架 -- 多页面爬取和深度爬取

一、重新定义一个页面模板,并指定页面从第二页开始

多页url模板='https://sXXXXXXXXXXXpian/kejitupian_%d.html'
页码=2

二、重组多页模板,并让回调函数进行递归操作

def parse(self, response):
    图片列表= response.xpath('/html/body/div[3]/div[2]/div/div')
    for i in 图片列表:
        图片名字 =i.xpath('./a/@title').extract_first()
        图片详情地址='https://sXXXXom'+i.xpath('./a/@href').extract_first()
        #print(图片名字,图片详情地址)
    if self.页码<5:
        新url=self.多页url模板 % self.页码
        self.页码+=1
        yield scrapy.Request(url=新url,callback=self.parse)

三、在items中添加两个字段

图片详情地址 = scrapy.Field()
图片名字= scrapy.Field()

四、在爬虫文件实例化字段并提交到管道

item=TupianItem()
item['图片名字']=图片名字
item['图片详情地址'] =图片详情地址
yield item

五、让其在管道文件输出,并开启管道

class 管道类:
    def process_item(self,item,spider):
        print(item)
        return item
ITEM_PIPELINES = {
   "tupian.pipelines.管道类": 300,
}

六、深度爬取

1、获取详情页,并通过回调函数调用

def parse(self, response):
    图片列表= response.xpath('/html/body/div[3]/div[2]/div/div')
    for i in 图片列表:
        图片名字 =i.xpath('./a/@title').extract_first()
        图片详情地址='https://sc.XXXXm'+i.xpath('./a/@href').extract_first()
        yield scrapy.Request(url=图片详情地址,callback=self.解析详情页)

2、解析详情页

def 解析详情页(self,response):
    内容=response.xpath('/html/body/div[3]/div[1]/div[1]/div[2]/div[3]/div[1]/p/text()').extract()
    内容=''.join(内容)
    print(内容)

3、将详情页内容当做字段写入items对象

yield scrapy.Request(meta={'item':item},url=图片详情地址,callback=self.解析详情页) #加一个meat参数,传递items对象
def 解析详情页(self,response):
    meta=response.meta
    item=meta['item']
    内容=response.xpath('/html/body/div[3]/div[1]/div[1]/div[2]/div[3]/div[1]/p/text()').extract()
    内容=''.join(内容)
    item['内容']=内容
    yield item

4、多页深度爬取

if self.页码<5:
    新url=self.多页url模板 % self.页码
    self.页码+=1
    yield scrapy.Request(url=新url,callback=self.parse)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

web安全工具库

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值