Python scrapy:通过多次解析和收集数据来传输项
我只是第一次尝试在页面之间传输项目时填充它 它在每个循环中工作,性别信息也正确地到达parse_3,但g2不适合响应url的类别,g1(第一个类别级别)始终是我在parse_子循环中通过的列表的最后一个元素 当然,我做错了什么,但我找不到问题所在,如果有人能解释一下它是如何工作的,那就太好了 最好的, 杰克 响应不包含元,但请求包含元 代替Python scrapy:通过多次解析和收集数据来传输项,python,scrapy,Python,Scrapy,我只是第一次尝试在页面之间传输项目时填充它 它在每个循环中工作,性别信息也正确地到达parse_3,但g2不适合响应url的类别,g1(第一个类别级别)始终是我在parse_子循环中通过的列表的最后一个元素 当然,我做错了什么,但我找不到问题所在,如果有人能解释一下它是如何工作的,那就太好了 最好的, 杰克 响应不包含元,但请求包含元 代替item=response.meta['item'] 它应该是item=response.request.meta['item']了解您正在爬网的实际域会很有
item=response.meta['item']
它应该是
item=response.request.meta['item']
了解您正在爬网的实际域会很有帮助。你真的在爬网x.com吗?没有:),但这不要紧,问题似乎是url列表中只有最后一个元素被生成并覆盖了以前的信息:(试着把收益项目
放在而不是打印项目
,然后看看,如果你在scrapy上调试我们会不会在屏幕上打印收益项目
class xspider(BaseSpider):
name = 'x'
allowed_domains = ['x.com']
start_urls = ['http://www.x.com']
def parse(self, response):
hxs = HtmlXPathSelector(response)
maincats = hxs.select('//ul[@class="Nav"]/li/a/@href').extract()[1:3]
for maincat in maincats:
item = catItem()
if 'men' in maincat:
item['gender'] = 'men'
maincat = 'http://www.x.com' + maincat
request = Request(maincat, callback=self.parse_sub)
request.meta['item'] = item
if 'woman' in maincat:
item['gender'] = []
item['gender'] = 'woman'
maincat = 'http://www.x.com' + maincat
request = Request(maincat, callback=self.parse_sub)
request.meta['item'] = item
yield request
def parse_sub(self, response):
i = 0
hxs = HtmlXPathSelector(response)
subcats = hxs.select('//ul[@class="sub Sprite"]/li/a/@href').extract()[0:5]
text = hxs.select('//ul[@class="sub Sprite"]/li/a/span/text()').extract()[0:5]
for item in text:
item = response.meta['item']
subcat = 'http://www.x.com' + subcats[i]
request = Request(subcat, callback=self.parse_subcat)
item['g1'] = text[i]
item['gender'] = response.request.meta['item']
i = i + 1
request.meta['item'] = item
yield request
def parse_subcat(self, response):
hxs = HtmlXPathSelector(response)
test = hxs.select('//ul[@class="sub"]/li/a').extract()
for s in test:
item = response.meta['item']
item['g2'] = []
item['g2'] = hxs.select('//span[@class="Active Sprite"]/text()').extract()[0]
s = s.encode('utf-8','ignore')
link = s[s.find('href="')+6:][:s[s.find('href="')+6:].find('/"')]
link = 'http://www.x.com/' + str(link) + '/'
request = Request(link, callback=self.parse_3)
request.meta['item'] = item
yield request
def parse_3(self, response):
item = response.meta['item']
print item
def parse_subcat(self, response):
hxs = HtmlXPathSelector(response)
test = hxs.select('//ul[@class="sub"]/li/a').extract()
for s in test:
item = response.meta['item']
item['g2'] = []
item['g2'] = hxs.select('//span[@class="Active Sprite"]/text()').extract()[0]
s = s.encode('utf-8','ignore')
link = s[s.find('href="')+6:][:s[s.find('href="')+6:].find('/"')]
link = 'http://www.x.com/' + str(link) + '/'
request = Request(link, callback=self.parse_3)
request.meta['item'] = item
yield request