使用以下代碼:
data = driver.find_elements(By.XPATH, '//div[@class="postInfo desktop"]/span[@class="nameBlock"]')
我在下面得到了那些 html 代碼:
<span class="nameBlock">
<span class="name">Anonymous</span>
<span class="posteruid id_RDS8pJvL">(ID:
<span class="hand" title="Highlight posts by this ID" style="background-color: rgb(228, 51,
138); color: white;">RDS8pJvL</span>)</span>
<span title="United States" class="flag flag-us"></span>
</span>
和
<span class="nameBlock">
<span class="name">Pierre</span>
<span class="postertrip">!AYZrMZsavE</span>
<span class="posteruid id_y5EgihFc">(ID:
<span class="hand" title="Highlight posts by this ID"
style="background-color: rgb(136, 179, 155); color: black;">y5EgihFc</span>)</span>
<span title="Australia" class="flag flag-au"></span>
</span>
現在我需要得到“國家”=>“美國”和“澳大利亞”。
對于整個資料集(超過 120k 個條目),我在做:
for i in data:
country = i.find_element(By.XPATH, './/span[contains(@class,"flag")]').get_attribute('title')
但過了一會兒,我得到了空條目,我發現這個國家的班級完全從“flag something”變成了“bf something”或“cd something”
這就是為什么我決定為每個元素選擇最后一個孩子:
for i in data:
country = i.find_element(By.XPATH, './/span[3]').get_attribute('title')
但是,過了一會兒,我又遇到了錯誤,因為有時會有一些<span >BLABLA</span>彈出,將“國家”位置移動到“跨度 [4]”。
所以,我改變了以下一個:
for i in data:
country = i.find_element(By.XPATH, './/span[last()]').get_attribute('title')
但是最后一個總是給我第二級的孩子(posteruid child):
<span class="hand" title="Highlight posts by this ID"
style="background-color: rgb(136, 179, 155); color: black;">y5EgihFc</span>)
我可以肯定的一件事:國家總是第一級孩子的最后一個孩子(跨度)。
所以我沒有想法這就是我問你這個問題的原因。
uj5u.com熱心網友回復:
使用以下內容xpath始終識別父母的最后一個孩子。
(//span[@class='nameBlock']//span[@title])[last()]
代碼塊。
for country in driver.find_elements(By.XPATH, "(//span[@class='nameBlock']//span[@title])[last()]"):
print(country.get_attribute("title"))
uj5u.com熱心網友回復:
對于這種特殊情況,您可以在不計算子節點的情況下獲取標題。只需將 nameBlock 保留為 root 并創建 xpath 以指向子類將具有標題(在本例中為標志)。像這樣:
//span[@class='nameBlock']/span[contains(@class,'flag')]

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/477614.html
標籤:python-3.x 硒 硒网络驱动程序 路径 亲子
