Scrappy逐列输出数据,我想逐行抓取。这怎么可能?
Scrappy outputs the data column by column, I want to scrape row by row. How is it possible?
下面是代码,蜘蛛的图片如下所示:
def parse_getData(self, response):
rows=response.xpath('//*[@id="table-timetable"]/table/tbody')
items=[]
for row in rows:
item = ScraperItem()
item['Day'] = row.xpath('.//tr/th/strong/text()').extract()
item['Time'] = row.xpath('.//td/span[1]/text()').extract()
item['Venue']=row.xpath('.//td/span[3]/text()').extract()
item['Subject']=row.xpath('.//td/strong/text()').extract()
items.append(item)
return items
我希望它的结果如下:
{'Day':Monday 'Subject':u'BIS3208 (L) - SEMINAR SERIES',u'NET3204 (P) - DISTRIBUTED SYSTEMS'}
可能吗?
问题不在于 Scrapy,而在于你如何创建你的项目。您必须相应地更改 xpath 查询和 select 您每次需要的文本。现在您正在 select 阅读所有文本。
编辑
为了澄清。
row.xpath('.//tr/th/strong/text()').extract()
像这样的查询 selects 文档中的所有 tr 元素,然后是第 th 个子元素,结果不仅是填充 Scrapy 项目所需的一个元素。您必须相应地处理通过 xpath 查询检索到的元素,并使用该数据创建您的 Scrapy 项目。 Scrapy 没有其他方法可以自动知道它。
下面是代码,蜘蛛的图片如下所示:
def parse_getData(self, response):
rows=response.xpath('//*[@id="table-timetable"]/table/tbody')
items=[]
for row in rows:
item = ScraperItem()
item['Day'] = row.xpath('.//tr/th/strong/text()').extract()
item['Time'] = row.xpath('.//td/span[1]/text()').extract()
item['Venue']=row.xpath('.//td/span[3]/text()').extract()
item['Subject']=row.xpath('.//td/strong/text()').extract()
items.append(item)
return items
我希望它的结果如下:
{'Day':Monday 'Subject':u'BIS3208 (L) - SEMINAR SERIES',u'NET3204 (P) - DISTRIBUTED SYSTEMS'}
可能吗?
问题不在于 Scrapy,而在于你如何创建你的项目。您必须相应地更改 xpath 查询和 select 您每次需要的文本。现在您正在 select 阅读所有文本。
编辑
为了澄清。
row.xpath('.//tr/th/strong/text()').extract()
像这样的查询 selects 文档中的所有 tr 元素,然后是第 th 个子元素,结果不仅是填充 Scrapy 项目所需的一个元素。您必须相应地处理通过 xpath 查询检索到的元素,并使用该数据创建您的 Scrapy 项目。 Scrapy 没有其他方法可以自动知道它。