2016-11-03 6 views
0

は、クモのコードとピクチャーを以下に示している:Scrappyは列ごとにデータを出力します。行ごとにスクラップします。どのように可能ですか?以下

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 

It outputs the data for the Day together and then moves to Subject.

私は以下のように結果うちにそれをしたい:

{'Day':Monday 'Subject':u'BIS3208 (L) - SEMINAR SERIES',u'NET3204 (P) - DISTRIBUTED SYSTEMS'}

が、それは可能ですか?

答えて

0

問題はScrapyではなく、アイテムの作成方法です。それに応じてxpathクエリを変更し、毎回必要なテキストを選択する必要があります。今すぐすべてのテキストを選択しています。

編集

説明のためです。

row.xpath('.//tr/th/strong/text()').extract() 

このようなクエリでは、あなたのScrapy項目を埋めるために必要としてだけではなく、一つの要素で、その結果、すべての文書でのtr要素、その後番目の子供を選択します。それに応じてxpathクエリで取得した要素を処理し、そのデータを使用してScrapy項目を作成する必要があります。 Scrapyが自動的にそれについて知ることができる他の方法はありません。

+0

xpathsを変更すると、私はスクラップする必要がある行の数がわかり、各行にxpathがあるので、私のために働いてくれました。しかし、それは対処しなければならない多くの行を知らず、xpathを持っていないプログラムはどうでしょうか?そのようなプログラムでは、xpathをハードコードできません。私たちはそのような状況で何をすべきですか? –

+0

私はここであなたの問題を理解しているかどうかはわかりません: "しかし、それは対処しなければならない多くの行を知らず、xpathを持っていないプログラムはどうですか?" Webコンテンツが動的に生成される場合はどういう意味ですか? – narko

+0

私は私の場合、私は7行をスクラップしなければならないことを知っていたので、私はちょうどそれらの7行のxpathを別々に取って、フォーマットは Row1:Col1、Col2、Col3でした。しかし、スクレーパーが100秒の行を掻き分けた場合、Row1:Col1、Col2、Col3の形式でデータを取得するために100回のxpathを別々に取ることはできません。私は何を言おうとしているのですか? –

関連する問題