2014-10-03 74 views
0

我有代碼來湊一個網頁,它會返回這多個實例:美麗的湯分揀輸出

<div class="post"><a title="Brass-plated door knob" href="http:URL-LINK"> 
<img src="IMAGE SOURCE LINK" alt="IMAGE ALTERNATE TEXT" /> 
<span class="det"><em class="fl">3.87 dollars</em><em class="fr">Housewares</em></span> 
<strong class="vtitle">Brass-plated door knob</strong></a> 
<div class="desc"><p>Brass-plated door knob</p></div></div> 

我想獲得從每一個在href鏈接和相應的價格,對它們進行排序,具有理想的輸出是

HIGHEST PRICE, URL-LINK 

'... 

LOWEST PRICE, URL-LINK 

我可以拉動價格(雖然他們與我可以做沒有「元」字)與

price = soup.find_all("em", class_="fl") 

但不知道如何獲得相應的href鏈接,然後對它們進行排序和列出。

現在我通過輸出迭代如下:

if len(price) < 100: 
    for x in range(1, len(price)): 
     print price[x] 
else: 
    print len(price)** 

想法?

回答

1

這個想法是迭代所有帖子,並獲得每個鏈接和價格。

工作示例根據您的輸入:

from bs4 import BeautifulSoup 

data = """ 
<div> 
    <div class="post"> 
     <a title="Brass-plated door knob" href="http:URL-LINK"> 
      <img src="IMAGE SOURCE LINK" alt="IMAGE ALTERNATE TEXT"/> 
      <span class="det"><em class="fl">3.87 dollars</em><em class="fr">Housewares</em></span> 
      <strong class="vtitle">Brass-plated door knob</strong> 
     </a> 

     <div class="desc"><p>Brass-plated door knob</p></div> 
    </div> 
    <div class="post"> 
     <a title="Brass-plated door knob2" href="http:URL-LINK2"> 
      <img src="IMAGE SOURCE LINK" alt="IMAGE ALTERNATE TEXT"/> 
      <span class="det"><em class="fl">410.25 dollars</em><em class="fr">Housewares</em></span> 
      <strong class="vtitle">Brass-plated door knob2</strong> 
     </a> 

     <div class="desc"><p>Brass-plated door knob2</p></div> 
    </div> 
</div> 
""" 

soup = BeautifulSoup(data) 
result = [] 
for post in soup.select('div.post'): 
    link = post.a.get('href') 
    price = float(post.find('em', class_='fl').text.split(' ')[0]) 
    result.append({'link': link, 'price': price}) 

print result 

打印:

[ 
    {'price': 3.87, 'link': 'http:URL-LINK'}, 
    {'price': 410.25, 'link': 'http:URL-LINK2'} 
] 
+0

非常感謝亞歷克!請參閱Salman對後續評論的評論。 – Greg 2014-10-03 18:32:21

+0

@Greg當然,我已將答案 - 收集結果更新到字典列表中。 – alecxe 2014-10-03 19:49:43

0

從HTML,你可以得到的價格這樣的相應鏈接,

prices = soup.find_all("em", class_="fl") 
for price in prices: 
    print price.findParent('a').get('href'), price.text.split()[0] 

它在刮臉時排序不方便。您可以將價格和鏈接存儲在字典中。讓價格浮動在alecxe的回答中,並在刮取後對其進行分類。

+0

謝謝 - 你和亞歷克提供了我所需要的輸出。現在進行分類。我會定義一個空字典[]並將每個記錄追加到它(代替您提供的打印語句)嗎?但是,然後排序字典是另一個問題,我想。更好地使用列表?再次感謝你們兩位! – Greg 2014-10-03 18:35:04

+0

實際上正常'dict'無法排序。但是如果你有一個你可以使用它們或者以一種排序的方式打印字典的項目。 – 2014-10-03 20:36:07