2012-03-18 4 views
0

最近、scrapyライブラリの作業が開始されました。私は彼らが販売している製品の種類ごとに若干異なる表を持つウェブサイトから掻き集めようとしています。最終的には、データを使用してオブジェクトの属性を設定します。今のところ、JSON形式に抽出するだけです。ここhtmlテーブルの任意の数の行(キー:値のペア)を解析するためのscrapyの使用

は、例えばテーブルである:

<table id="table_1"> 
<tr id="row_1"> 
    <td>cell_1</td> 
    <td>cell_2</td> 
    <td>cell_3</td> 
</tr> 
<tr id="row_2"> 
    <td>cell_4</td> 
    <td>cell_5</td> 
    <td>cell_6</td> 
</tr> 
<tr id="row_n"> 
    <td>cell_x</td> 
    <td>cell_y</td> 
    <td>cell_z</td> 
</tr> 
</table> 

各列は異なる項目、すなわち、小中規模または大規模のTシャツを表します。 あり、上記の表では3つの項目になりますので、アイテムは次のようになります。行と列の数があるが、それらは、no「に欠けている」または「余分な」細胞とよく構造化テーブルです

Item 1 { 
    row_1:cell_1 
    row_2:cell_4 
    row_n:cell_x 
} 
Item 2 { 
    row_1:cell_2 
    row_2:cell_5 
    row_n:cell_y 
} 
Item 3 { 
    row_1:cell_3 
    row_2:cell_6 
    row_n:cell_z 
} 

任意。

私が持っていた難しさは、アイテムごとにではなく、スクラップする前にFieldクラスの数を定義するためにアイテムクラスを必要とするためです。私はこのプロセスを実行したい何百ものテーブルを持っています。

これまで読んでいただきありがとうございました。 :)

解決策:@warawukあなたの助けをありがとう。私はあなたの提案を使用し、トリプルネストされたリストで終わった。おそらく理想的な、それは私が彼らと一緒に作業を続けると値を抽出するのに十分な些細ではありません。

{"tRows": 
    [[["row1"], ["cell1", "cell2"]] 
    [["row2"], ["cell3", "cell4"]] 
    [["row3"], ["cell5", "cell6"]] 
    [["row4"], ["cell7", "cell8"]]] x100s of tables 
} 

行の任意の数に対処するために、私はそれぞれの行からIDを抽出するために正規表現を使用してカウントそれら。範囲を使用する単純なループ(len(rowNames))と、文字列の連結によってジョブが終了しました。

答えて

1

ここではあまりにも多くの質問があります。

まずは、あなたの質問は治療についてのものではないようです。それはあなたのデータとxpathを体系化することです。

サブタスクでタスクを分割する必要があると思います。最初のサブタスクは、実際にデータをPythonデータ構造に抽出し、それを処理しようとすることです。あなたの情報から、私はデータが好きになると思います:

{ 
    'table_1': { 
     'row_1': ['cell_1', 'cell_2'], 
     'row_2': ['cell_1', 'cell_2'], 
     ... 
    }, 
    'table_2': { 
     'row_1': ['cell_1', 'cell_2', 'cell_3'], 
     'row_2': ['cell_1', 'cell_2', 'cell_3'], 
     ... 
    }, 
} 

これは間違いありませんか?


UPDATE:

私が持っていた難しさがscrapy項目オブジェクトを使用していた

、この をこする前に、フィールドの数を定義するために、私Itemクラスを必要とするため、 の代わりにテーブルごとに私は このプロセスを実行するテーブルが何百もあります。

AFAIK、Item Fields can store any Python object。スクラブItemクラスは、Fieldを保存する場所ですが、特別な方法でこれらのフィールドを処理しません。これらのFieldsをパイプラインで受け取り、データを解釈するのはあなただけです。

したがって、あなたに適した店舗のフォーマットを選択してください。例:

class Shirt(Item): 
    available_sizes = Field() # [(size1, amount1), (size2, amount2), ...] or {size1: amount1, size2: amount2, ...} if `size` is a hashable object 
+0

はい、正しいです。このフォームにデータを取得することは、主要なハードルです。サブタスク1は、テーブルごとに任意の数の行をスクラップし、このような形式にすることを定義しましょう。私のスキル項目に関する知識に基づいて、フィールドの数とその名前を事前に定義する必要があるようです。この場合、スクレイプ時にそれらのフィールドを特定する必要があります。 –

+0

Itemインスタンスに含める内容は何ですか? – warvariuc

+0

各項目のkey:valueのペアは、表の各行について 'row_1': 'cell_1'、 'row_2': 'cell_1'などのように表示されます。各行はフィールドを表すことができます。 –

関連する問題