2017-09-18 13 views
0

私は治療に慣れていないので、この問題を何時間も苦労しています。
そのソースは何とかこのようになりますと、私は、ページをこすりする必要があります:私は、タグが「Alpha_kinase」の値を持つ場合にのみ、tr.oddタグの情報を取得する必要があります指定された表示内容のhtmlタグを選択

<tr class="odd"> 
      <td class="pfama_PF02816">Pfam</td> 
      <td><a href="http://pfam.xfam.org/family/Alpha_kinase">Alpha_kinase</a></td> 
      <td>1389</td> 
      <td>1590</td> 
      <td class="sh" style="display: none">21.30</td> 
     </tr> 


( "Alpha_kinase"、1389,1590などの値を含む)すべてのコンテンツを取得し、出力を処理して "Alpha_kinase"を得ることはできますが、この方法はかなり壊れやすく、醜いものになります。現在、私はそのようにしなければなりません:
positions = response.css('tr.odd td:not([class^="sh"]) td a::text').extract() 次にforループをチェックします。
私の問題を解決するためにresponse.cssに入れるべき条件(上記のようなtd.not)がありますか?

ありがとうございます。どんなアドバイスも高く評価されます!

+0

あなたは何か制約がありますか?正規表現を試しましたか? – rjustin

+0

@rjustin私はしません。私は、上記のようなものではなく、そのような表現を見つけるのに苦労するtdのようなものがあると思う。私に何か提案がありますか? – enamoria

答えて

0

あなたは別のセレクタを使用することができます、HTMLから要素を選択するために、response.xpath

およびXPath contains機能でテキストをフィルタリングします。

>>> response.xpath("//tr[@class='odd']/td/a[contains(text(),'Alpha_kinase')]") 
[<Selector xpath="//tr[@class='odd']/td/a[contains(text(),'Alpha_kinase')]" data='<a href="http://pfam.xfam.org/family/Alp'>] 
+0

良い提案。私はこれを試してみるつもりです – enamoria

0

このようなページには、trという要素が複数あると想定します。もしそうなら、私はおそらく次のようなことをするでしょう:

# get only rows containing 'Alpha_kinase' in link text 
for row in response.xpath('//tr[@class="odd" and contains(./td/a/text(), "Alpha_kinase")]'): 
    # extract all the information 
    item['link'] = row.xpath('./td[2]/a/@href').extract_first() 
    ... 
    yield item 
関連する問題