2017-06-29 101 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

非常感谢你! –