2017-02-13 7 views
2
  • Python3を使用してWebサイトをスクラップします。 xpath queryを使用して目的の文字列を取得します。
  • データに照会する要素は約19種類ありますが、dataId変数は1つのエントリのみを表示します。
  • 私はまた、/ trタグ自体(画像を含む)にあるdata-eventidを取得しようとしています。しかし、コードは今このhtmlタグを除外しているようです

私の理解は間違っていますか?あなたのXPathの周りPython3 - データ属性値を取得しようとすると、XPathクエリがサイトからのリスト全体を返しません。

import requests 
from lxml import etree 

url = 'http://www.forexfactory.com/calendar.php?' 
date = {'day':'feb9.2017'} 

resp = requests.get(url,date) 

tree = etree.HTML(resp.text) 
dataId = tree.xpath("string(//*[@id='flexBox_flex_calendar_mainCal']//tr[contains(@class,'calendar__row calendar_row')])") 

xpath query result in firefox

debug values

答えて

2

string()機能は、最初のelemnetのテキストを受け取りました。それを削除すると、照会された要素のコレクションを取得できます。そこから、あなたは要素を反復処理すると、要素のattrib propertydata-eventidプロパティにアクセスすることができます

また
tree = etree.HTML(resp.text) 
for row in tree.xpath("//*[@id='flexBox_flex_calendar_mainCal']//tr[contains(@class,'calendar__row calendar_row')]"): 
    print(row.attrib['data-eventid']) 

、あなたは常に要素のdata-eventid属性にアクセスしていることから、それだけでdata-eventid属性を持つ要素を選択する方が安全かもしれあなたのXPathに[@data-eventid]を追加することによって:

tree = etree.HTML(resp.text) 
for row in tree.xpath("//tr[contains(@class,'calendar__row calendar_row')][@data-eventid]"): 
    print(row.attrib['data-eventid']) 
+1

ありがとうございました!これはトリックでした – Karun

関連する問題