Python 来自多个请求的胶状物项

Python 来自多个请求的胶状物项,python,scrapy,Python,Scrapy,我正在尝试从不同的请求中生成项目,如图所示。如果我将items=printerItem()添加到每个请求中,我将得到无尽的循环。。如果我把它拿出来,就会出现其他错误。不确定如何将每个项目的产量请求与产量项目相结合 import scrapy from scrapy.http import Request, FormRequest from ..items import PrintersItem from scrapy.utils.response import open_in_browser

我正在尝试从不同的请求中生成项目,如图所示。如果我将items=printerItem()添加到每个请求中,我将得到无尽的循环。。如果我把它拿出来,就会出现其他错误。不确定如何将每个项目的产量请求与产量项目相结合

import scrapy
from scrapy.http import Request, FormRequest
from ..items import PrintersItem
from scrapy.utils.response import open_in_browser

class PrinterSpider(scrapy.Spider):
    name = 'printers'
    start_urls = ['http://192.168.137.9', 'http://192.168.137.35', 'http://192.168.137.34', 'http://192.168.137.27', 'http://192.168.137.21' ]


    def parse(self, response):
            items = PrintersItem()
            token = response.xpath('//*[@name="CSRFToken"]/@value').extract_first()
            print(token)

            yield  FormRequest.from_response(response, formnumber=1, formdata={
                'CSRFToken' : token,
                'B55d' : 'password',
                'loginurl' : '/general/status.html'
             }, callback=self.postlogin2)


    def  postlogin2(self,response):
            items = PrintersItem()
            contact = response.xpath('//html[1]/body[1]/div[1]/div[1]/div[2]/div[2]/div[2]/div[1]/div[1]/div[2]/form[1]/div[5]/dl[1]/dd[1]/ul[1]/li[1]/text()[last()]').extract()
            location = response.xpath('//html[1]/body[1]/div[1]/div[1]/div[2]/div[2]/div[2]/div[1]/div[1]/div[2]/form[1]/div[5]/dl[1]/dd[1]/ul[1]/li[2]/text()[last()]').extract()
            items['contact'] = contact
            items['location'] = location

            yield Request(
            url = response.url.split('/general')[0] + "/general/information.html?kind=item",
            callback=self.action)

            for items in self.postlogin2(response):
                yield items

    def action(self,response):
            drum = response.xpath('//html[1]/body[1]/div[1]/div[1]/div[2]/div[2]/div[2]/div[1]/div[1]/div[2]/form[1]/div[7]/dl[1]/dd[1]/text()').extract()
            items['drum'] = drum
            print(drum)
            printermodel = response.xpath('//html[1]/body[1]/div[1]/div[1]/div[2]/div[2]/div[2]/div[1]/div[1]/div[2]/form[1]/div[5]/dl[1]/dd[1]/text()').extract()
            items['printermodel'] = printermodel
            yield Request(
            url = response.url.split('/general')[0] + "/net/wired/tcpip.html",
            callback=self.action2)
            for items in self.action(response):
                yield items

    def action2(self, response):
            tcpip = response.xpath('//html[1]/body[1]/div[1]/div[1]/div[2]/div[2]/div[2]/div[1]/div[1]/div[2]/form[1]/div[4]/dl[1]/dd[2]/input[1]/@value').extract()
            items['tcpip'] = tcpip
            for items in self.action2(response):
                yield items

如果要将
项目
解析
发送到
postlogin2
等,则将其作为
数据添加到
请求

yield Request( ..., meta={"items": items})
并在其他函数中得到它

items = response.meta["items"]
yield items
并且只在最后一个函数中产生它

items = response.meta["items"]
yield items
医生:



完美的再次感谢