2017-06-29 102 views
0

我也遇到過這樣的問題: 一個頁面有5個格信息的,與子值的每個內部: 標題, 價格, 日期。匹配兩種交替的XPath值轉換成一個列表

基地名單:

Titles = [] 
Prices = [] 
Dates = [] 

它們都具有相同的XPath鉛,所以我可以跟蹤所有的人。問題是 - 「價格」有時會顯示,有時不會顯示在div中。

所以我得到的是:

Titles = [Title1, Title2, Title3, Title4, Title5] 
Prices = [Price1, Price2, Price5] #(Missing two non-existing values of 3rd and 4th divs prices) 
Dates = [Date1, Date2, Date3, Date4, Date5] 

由於「價格」級並不總是存在的DIV中,它捕獲所有的人,但不匹配的軸屬於正確的股利。 (使Price5與TITLE3和DATE3對齊)

所以,當我做

print(len(Titles)) 
print(len(Prices)) 
print(len(Dates)) 

顯然它打印出

5 
3 
5 

而且它不能與合作。

在這種情況下,光明的一面是,每當沒有「價格」類時,另一個表示「估計」。

所以我想要做的就是找到「價格」和「估計」雙方的XPath和軸順序追加他們相同的列表,最終得到:

Titles = [Title1(1), Title2(2), Title3(3), Title4(4), Title5(5)] 
Prices = [Price1(1), Price2(2), Estimation1(3), Estimation2(4), Price3(5)] 
Dates = [Date1(1), Date2(2), Date3(3), Date4(4), Date5(5)] 

在()是(x)軸號以匹配正確的div。

然後我會有我的dataFrame。

雖然我似乎無法找到一種方法來同時找到它們並按照外觀順序追加它們。

Assisstance?

編輯:添加代碼示例通過要求:

title = [] 
price = [] 
date = [] 

def grabber(): 

title_ = browser.find_elements_by_xpath('//*[@class="title-class"]') 
for x in title_: 
    try: 
     title.append(x.text) 
    except: 
     title.append("N/A") 

price_ = browser.find_elements_by_xpath('//*[@itemprop="price-class"]') 
no_price = browser.find_elements_by_xpath('//*[@class="estimation-class"]') 
for x, y in price_, no_price: 
    price.append(x.text, "N/A") 

#^Doesn't work of course ^, One method I tried among many other. 

date_ = browser.find_elements_by_xpath('//*[@itemprop="date-class"]') 
for x in date_: 
    try: 
     date.append(x.text) 
    except: 
     date.append("N/A") 
+0

你能提供一些示例HTML? –

+0

嘿,謝謝你的回覆。我添加了示例代碼,這有效嗎? –

+0

謝謝,看我的編輯。 –

回答

2

爲此,您可以通過管道(|)使用or operation,結合你的兩個XPath成一個:

僞代碼:

//div/price | //price 

編輯來自OP的代碼:

price_ = browser.find_elements_by_xpath('//*[@itemprop="price-class"]') 
no_price = browser.find_elements_by_xpath('//*[@class="estimation-class"]') 

可組合成:

price_ = browser.find_elements_by_xpath(
    '//*[@itemprop="price-class"] | //*[@class="estimation-class"]') 
+0

作品美麗。 –

+0

非常感謝你! –