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

多页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)

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: