我需要从多个页面中抓取数据。首先它应该从第一页抓取数据然后从这个页面提取一个url到第二页并从中获取一些数据
所有应该在同一个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_2并处理第二页并将结果放在同一个csv行上。 怎么做?
答案 0 :(得分:1)
如果要使用来自不同网址的数据构建单个项目,则应使用meta属性将其从一个Request对象传递到下一个Request对象。最后,您将生成结果项,以便将其写入单行。
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