Python 如何从同一csv行中的多个页面中刮取数据?

Python 如何从同一csv行中的多个页面中刮取数据?,python,scrapy,scrapy-spider,Python,Scrapy,Scrapy Spider,我需要从多个页面中提取数据。首先,它应该从第一个页面抓取数据,然后从这个页面提取到第二个页面的url,并从中获取一些数据 所有文件都应位于同一csv行上 这是第一页: 数据示例为表中的第一行,例如:目录、型号、生产和系列 这是第二页: 数据示例:系列、发动机、生产日期 两者应一起位于同一csv行,如屏幕截图所示: 这是我的代码: import datetime import urlparse import socket import scrapy from scrapy.loader.pr

我需要从多个页面中提取数据。首先,它应该从第一个页面抓取数据,然后从这个页面提取到第二个页面的url,并从中获取一些数据

所有文件都应位于同一csv行上

这是第一页:

数据示例为表中的第一行,例如:目录、型号、生产和系列

这是第二页: 数据示例:系列、发动机、生产日期

两者应一起位于同一csv行,如屏幕截图所示:

这是我的代码:

import datetime
import urlparse
import socket
import scrapy

from scrapy.loader.processors import MapCompose, Join
from scrapy.loader import ItemLoader
from scrapy.http import Request

from properties.items import PropertiesItem


class BasicSpider(scrapy.Spider):
    name = "manual"


    # This is the page which i will hit middle est from.
    start_urls = ["https://www.catalogs.ssg.asia/toyota/?fromchanged=true&lang=en"]


    def parse(self, response):
        # First page
        next_selector ="https://www.catalogs.ssg.asia/toyota/?fromchanged=true&lang=en&l="+response.xpath('//*[@id="rows"]/tr[2]/@onclick').re(r"HM\.set\('([^']+)'")[0]
        yield Request(next_selector, callback=self.parse_item)

    def parse_item(self, response):
        for tr in response.xpath("/html/body/table[2]/tr/td/table/tr")[1:]:
            item = PropertiesItem()

            item['Series']= tr.xpath("td[1]/text()").extract()
            item['Engine']= tr.xpath("td[2]/text()").extract()
            second_selector ="https://www.catalogs.ssg.asia/toyota/?fromchanged=true&lang=en&l="+response.xpath('/html/body/table[2]/tr/td/table/tr/@onclick').re(r"HM\.set\('([^']+)'")

            yield item

    def parse_item_2(self, response):
        item = PropertiesItem()
        item['Building_Condition']=response.xpath('/html/body/table[2]/tr/td/table/tr[2]/td[1]/text()').extract()
        yield item
我需要在parse item中编写一些代码,以转到parse_item_2并处理第二个页面,并将结果放在同一csv行上。
如何做到这一点?

如果要使用来自不同URL的数据构建单个项目,则应使用meta属性将其从一个请求对象传递到下一个请求对象。最后生成结果项,以便将其写入一行

def parse_item(self, response):
    for tr in response.xpath("/html/body/table[2]/tr/td/table/tr")[1:]:
        [...]
        second_selector = [...]
        meta = {'item': item}
        yield Request(second_selector, meta=meta, callback=self.parse_item_2)

    def parse_item_2(self, response):
        item = PropertiesItem(response.meta['item'])
        item['Building_Condition']=response.xpath('/html/body/table[2]/tr/td/table/tr[2]/td[1]/text()').extract()
        yield item