Python 如何从同一csv行中的多个页面中刮取数据?
我需要从多个页面中提取数据。首先,它应该从第一个页面抓取数据,然后从这个页面提取到第二个页面的url,并从中获取一些数据 所有文件都应位于同一csv行上 这是第一页: 数据示例为表中的第一行,例如:目录、型号、生产和系列 这是第二页: 数据示例:系列、发动机、生产日期 两者应一起位于同一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
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