一、重新定义一个页面模板,并指定页面从第二页开始
多页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)
版权声明:本文为weixin_41489908原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。