Если бы я хорошо понял вашу цель, я бы попытался изменить ваш код следующим образом:
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class YuSpider(CrawlSpider):
name = 'yu'
allowed_domains = ['farfeshplus.com']
start_urls = ['https://www.farfeshplus.com/Video.asp?ZoneID=297']
rules = (
Rule(LinkExtractor(restrict_xpaths='//td[@class="text6"]'), callback='parse_item', follow=True),
)
def parse_item(self, response):
for url in response.xpath('//html'):
response.meta['NAME']=url.xpath('//h1/div/text()').extract()
frames = url.xpath('//iframe[@width="750"]/@src').extract_first()
yield scrapy.Request(url=frames, callback=self.parse_frame, meta=response.meta)
def parse_frame(self, response):
name=response.meta['NAME']
for f in response.xpath('//div[@class="rmp-content"]/video'):
yield {
'URL': f.xpath('//div[@class="rmp-content"]/video/@src').extract(),
'NAME':name
}
Я думаю, что проблема связана с двумя инструкциями yield в parse_frame ( прочитайте это ). Итак, я использую response.meta для передачи имени между parse_item и parse_frame методами.