2017-12-05 18 views
2

私は、Web-こすり、次のページから国の名前をしようとしています。セレンPythonの - 私は特定の要素ののXpathを取得しようとしています<a href="http://hdr.undp.org/en/composite/trends" rel="nofollow noreferrer">http://hdr.undp.org/en/composite/trends</a></p> <p>- ウェブスクレイピングのXpathエラー

だから最初の国のために、それは次のように表示されます -

Country = driver.find_element_by_xpath("//[@id='styleSheet.css']/div/div/div/div/table/tbody/tr[2]/td[2]").text 

だから、基本的にすべての国のために、私はPythonで用ループとレンジ機能を使用しています。

for i in range(2,193): 
    try: 
     print(i) 
     Country = driver.find_element_by_xpath("//[@id='styleSheet.css']/div/div/div/div/table/tbody/tr["+int(i)+"]/td[11]").text 
     print(Country) 
    except Exception: 
     print("none") 

しかし、問題はXパスが私にとってうまくいかないことです。親切な要素を見つけることができたら助けてください。

intをstrに変更することで最初の問題を解決しました。これは、スローアップエラーです。それが現在の要素を見つけることができないと言います。

+1

私はあなただけ連結することができるとは思いませんそのようなintへの文字列。 '{}'。format()メソッドを使用できます。 – SuperStew

+0

例外は情報を提供しますか?すなわち、あなたは '例外としてeを除いて'次に 'print(e)'することができます – ContinuousLoad

+0

@SuperStewループの外であっても、自分自身を取っている最初の場所は間違っています。 – Sid29

答えて

2

セレン元素の配置問題ごとにXPathを使用する必要はありません。この場合、国を特定するためのより良い方法があります。あなたは何をtabletbody内のすべてのtr要素を通過し、国名含む第二td要素になるだろうとします

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.wait import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 


driver = webdriver.Chrome() 
driver.get("http://hdr.undp.org/en/composite/trends") 

table = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".pane-content table"))) 
for row in table.find_elements_by_css_selector("tbody > tr")[1:]: # skipping the first header row 
    country = row.find_element_by_css_selector("td:nth-child(2)") 

    print(country.text) 

driver.close() 

版画:

Norway 
Australia 
Switzerland 
... 
San Marino 
Somalia 
Tuvalu 
+0

何年もの間価値を拾うことができないのはなぜですか? 2012年、私はこれを** val = row.find_element_by_css_selector( "td:nth-​​child(10)")**のようにしようとしていますが、失敗しています。 – Sid29

+0

@ Sid29右、すべての行に10以上の列があるわけではないので、行をスキップする必要があります。試してみるか試してみるか、一列にどれくらいの細胞があるかを調べることができます。ありがとう。 – alecxe

関連する問題

 関連する問題