2017-06-23 14 views
0

私は `Scrapy Pythonを使用して、サイトからデータをgrepしようとしています。 この構造をXpathでどのようにgrepできますか?Xpathのgrep要素

<div class="foo"> 
<h3>Need this text_1</h3> 
    <table class="thesamename"> 
    <tbody> 
    <tr> 
     <td class="tmp_year"> 
      <a href="/link1">45767</a>   
     </td> 
     <td class="tmp_outcome"> 
      <b>Win_1</b><br> 
      <span class="tmp_category">TEST_1</span> 
     </td> 
    </tr> 
    <tr> 
     <td class="tmp_year"> 
      <a href="/link1">1232004</a>   
     </td> 
     <td class="tmp_outcome"> 
      <b>Win_2</b><br> 
      <span class="tmp_category">TEST_2</span> 
     </td> 
    </tr> 
    <tr> 
     <td class="tmp_year"> 
      <a href="/link1">122004</a>   
     </td> 
     <td class="tmp_outcome"> 
      <b>Win_3</b><br> 
      <span class="tmp_category">TEST_3</span> 
     </td> 
    </tr> 
    </tbody> 
<h3>Need this text_2</h3> 
     <table class="thesamename"> 
    <tbody> 
     <td class="tmp_year"> 
      <a href="/link1">234</a>   
     </td> 
     <td class="tmp_outcome"> 
      <b>Win_E</b><br> 
      <span class="tmp_category">TEST_E</span> 
     </td> 
    </tr> 
    <tr> 
     <td class="tmp_year"> 
      <a href="/link1">3476</a>   
     </td> 
     <td class="tmp_outcome"> 
      <b>Win_C</b><br> 
      <span class="tmp_category">TEST_C</span> 
     </td> 
    </tr> 
    </tbody> 
<h3>Need this text_3</h3> 
     <table class="thesamename"> 
    <tbody> 
    <tr> 
     <td class="tmp_year"> 
      <a href="/link1">85567</a>   
     </td> 
     <td class="tmp_outcome"> 
      <b>Win_T</b><br> 
      <span class="tmp_category">TEST_T</span> 
     </td> 
    </tr> 
    <tr> 
     <td class="tmp_year"> 
      <a href="/link1">435656</a>   
     </td> 
     <td class="tmp_outcome"> 
      <b>Win_A</b><br> 
      <span class="tmp_category">TEST_A</span> 
     </td> 
    </tr> 
    <tr> 
     <td class="tmp_year"> 
      <a href="/link1">980</a>   
     </td> 
     <td class="tmp_outcome"> 
      <b>Win_Z</b><br> 
      <span class="tmp_category">TEST_Z</span> 
     </td> 
    </tr> 
    </tbody> 
私はこのような構造で出力したいと思い

"Section": { 
Need this text_1 : 
    [45767 : Win_1 : TEST_1] 
    [1232004 : Win_2 : TEST_2] 
    [122004: Win_3 : TEST_3] 
, 
Need this text_2: 
    [234 : Win_E : TEST_E] 
    [3476 : Win_C : TEST_C] 
, 
Need this text_3: 
    [85567 : Win_T : TEST_T] 
    [435656 : Win_A : TEST_A] 
    [980: Win_Z : TEST_Z] 
} 

がどのように適切なXPathを作成することができますが、この構造を取ることを選択? 私は別々にすべての "h3"を取ることができます、すべての "a"、次にクラスを持つすべてのタグが、どのように一致することができますか?

答えて

1

GREP YOU SAY ?! LOLまあ、名前を付けるのは完全にwronなのですが、専門用語をきれいにして、あなたの構文解析/抽出を理解するためには...。またはWeb devのサイドのもの?どんなに... Theres私は1つの答えであなたに教えることができる方法はありません。xpth/regexをプロのようにする方法...あなたのために唯一のwayisですが、私は私の入力を投げます。

まず、xpathは、必ずしもstadardに構築されているWebサイトには驚くほど便利なものです。それは言うまでもなく、あなたが与えたhtml snipetで悪いことです。 CSSエキス。これらは... VALUES ARE

year = response.css('td.tmp_year a::text').extract() 
outcome = response.css('td.tmp_outcome b::text').extract() 
category= response.css('span.tmp_category::text').extract() 

PRO-TIP:これまであなたはそれneccesary考える何をケースについては、Webページ牙山のHTMLファイルを保存し、直接ファイルパスを参照することにより、scrapyシェルを使用することができますそれで...あなたのhtmlスニペットを私のデスクトップのファイルに保存してから実行しました...

scrapy shell file:///home/scriptso/Desktop/letsGREPlol.html 

いつも... xpathまで...あなたが頼んだから...ケーキ。 xpathとcssを比較して、あなたが見ることができると教えてください...それは? lol

response.css( 'td.tmp_outcome b :: text')。extract() これはtdタグです....そしてクラス名はtmp_outcomeです。次のノードは太字タグです。そのテキストの中で、:: textでテキストとして宣言しています。

response.xpath( 'tmp_outcome "/ b/text()')extract() だから、xpathは基本的にはtdタグの全サイトにパターンをつけていると言っています... class = tmp_outcome、次に太字で、xpathでtype/text()を宣言すると..../@ href isええええええええええと、

関連する問題