scrapy中关于meta深浅复制传参的问题
为什么scrapy用meta深度复制传参后的键值对顺序是错误的,而且还有许多重复的,大佬们可以救救我嘛
-- coding: utf-8 --
import scrapy
import os
import copy
from chanel_spider.items import ChanelSpiderItem
class ChanelSpider(scrapy.Spider):
name = ‘chanel’
allowed_domains = [‘chanel.cn’]
start_urls = [‘https://www.chanel.cn/zh_CN/’]
# start_urls = [‘https://www.chanel.cn/zh_CN/fragrance-beauty/makeup/p/lips/liquid-lipsticks/’
# ‘rouge-allure-ink-fusion-second-skin-intense-matte-liquid-lip-colour-p165802.html#skuid-0165818’]
# 得到产品类型名、URL
def parse(self, response):
type_url = response.xpath("//ul[@class='cc-nav-list valign-middle-box']/li[8]/h2/a/@href").extract()[0]
yield response.follow(url=type_url, callback=self.parse_type)
# 得到产品分类以及产品系列的URL
def parse_type(self, response):
for sel in response.xpath("//div[@class='bloccategory section']/div"):
item = ChanelSpiderItem()
item['category'] = sel.xpath("div[1]/a/text()").extract() # 产品分类名
series_names = sel.xpath("div[2]/ul/li/a/text()").extract()
for i in range(0, len(series_names)):
item['series_name'] = series_names[i] # 产品系列名
series_url = sel.xpath("div[2]/ul/li/a/@href").extract()[i] # 产品系列的url
print(item)
print(series_url)
yield response.follow(url=series_url, meta={"item": copy.deepcopy(item)}, callback=self.parse_series)
def parse_series(self, response):
item = response.meta['item']
print(response.url)
for sel in response.xpath("//div[@class='quickbuyButton button']/div/div"):
item['springboard'] = sel.xpath("button/@data-href").extract()[0]
yield item