meta参数的作用

在使用scrapy进行爬取以下网站时,常常会遇到一些情况。
例如: item中的部分内容只能通过parse()函数部分抓取,另外一部分需要设置其他的函数进行抓取,这时候就需要meta参数啦。(meta是字典类型)
meta参数在下例中的parseContent()得到继承,然后可以抓取items中得其他部分得内容了。

def parse_son(self, response):
	# 类的初始化 这里下载的是除书内容外的所有内容
	item = SpiderItem()
	# 选择器的初始化
	selector = Selector(response)
	# 获取书的名字
	bookName = selector.xpath('//div[@class="container"]/h1/text()').extract()
	# 先抓大后抓小 这里是抓的章节的大
	Chapter = selector.xpath('//div[@class="excerpts"]')
	content = Chapter.xpath('.//article/a/text()').extract()
	# 用每一个url作为下一个for循环的条件
	url = Chapter.xpath('.//article/a/@href').extract()
	# 循环提取盗墓笔记中需要的内容
	for i in range(len(url)):
	  # 这里的try except是由于部分书籍的规则不尽相同,这里是添加了异常判断
	  try:
	      item['bookName'] = bookName[0].split(':')[0]
	      item['bookTitle'] = bookName[0].split(':')[1]
	  except Exception as e:
	      item['bookName'] = bookName[0]
	  # url的获取
	  item['chapterURL'] = url[i]

	  try:
	      item['chapterNum'] = content[i].split(' ')[1]
	      item['chapterName'] = content[i].split(' ')[2]
	  except Exception as e:
	      item['chapterNum'] = content[i].split(' ')[1]
	  # yield可以理解为只要扔出请求它就会有专门的下载器进行下载  参数如下  第一个url信息  第二个回调函数将要执行的地址
	  # self.parseContent()表示的是函数的执行  self.parseContent表示的是函数的地址
	  yield Request(url[i], callback=self.parseContent, meta={'item':item})

def parseContent(self, response):
	# 类的初始化
	item = response.meta['item']
	selector = Selector(response)
	text = selector.xpath('//article[@class="article-content"]/p/text()').extract()
	text_new = ((''.join(text).replace('\u3000',''))).strip()
	item['text'] = text_new
	yield item

好奇

猜你喜欢

转载自blog.csdn.net/qq_40258748/article/details/88757103