Я хочу передать sec_url из метода parse_sec_frame в parse_frame и вывести все три значения одновременно. Попробовал это следующим образом без удачи и не мог придумать никакой другой логики. Любое предложение по этому поводу? Ниже приведен код:
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class CtSpider(CrawlSpider):
custom_settings = {
'CONCURRENT_REQUESTS': 1
}
name = 'ct'
allowed_domains = ['cartoon3rbi.net']
start_urls = ['https://www.cartoon3rbi.net/cartooncat-920.html']
#
rules = (
Rule(LinkExtractor(restrict_xpaths='//div[@class="pagination"]/a[4]'), follow=True),
Rule(LinkExtractor(restrict_xpaths='//div[@class="cartoon_eps_name"]'), callback='parse_item', follow=True),
)
def parse_item(self, response):
for el in response.xpath('//div[@id="topme"]'):
response.meta['NAME'] = el.xpath('//div[@class="block_title"]/text()').extract()
frames = el.xpath('//div[@class="embedcode"]/iframe/@src').extract()
for frame in frames:
yield scrapy.Request(url=frame, callback=self.parse_frame, meta=response.meta)
sec_link = frame.replace('1', '4')
yield scrapy.Request(url=sec_link, callback=self.parse_sec_frame)
def parse_sec_frame(self, response):
response.meta['url'] = response.xpath('//div[@id="picasa"]/iframe/@src').extract_first()
yield scrapy.Request(url=response.meta['url'], callback=self.parse_frame, meta=response.meta)
def parse_frame(self, response):
name = response.meta['NAME']
url = response.xpath('//div[@id="picasa"]/iframe/@src').extract_first()
sec_url = response.meta['url']
yield {
'Name': name,
'Url': url,
'sec_link': sec_url,
}