2013-03-21 54 views
2

我是新來的編碼python(也許幾天),並基本上學習其他人的代碼在stackoverflow。我試圖編寫的代碼使用beautifulsoup來獲取craigslist上的摩托車的pid和相應的價格。我知道有這樣做的其他許多方面,但我現在的代碼如下所示:使用beautifulsoup從craigslist得到價格

from bs4 import BeautifulSoup   
from urllib2 import urlopen    
u = "" 
count = 0 
while (count < 9): 
    site = "http://sfbay.craigslist.org/mca/" + str(u) 
    html = urlopen(site)      
    soup = BeautifulSoup(html)     
    postings = soup('p',{"class":"row"})      
    f = open("pid.txt", "a") 
    for post in postings: 
     x = post.getText() 
     y = post['data-pid'] 
     prices = post.findAll("span", {"class":"itempp"}) 
     if prices == "": 
      w = 0 
     else: 
      z = str(prices) 
      z = z[:-8] 
      w = z[24:] 
     filewrite = str(count) + " " + str(y) + " " +str(w) + '\n' 
     print y 
     print w 
     f.write(filewrite) 
    count = count + 1 
    index = 100 * count 
    print "index is" + str(index) 
    u = "index" + str(index) + ".html" 

它工作正常,當我不斷學習我打算去優化它。我現在面臨的問題是沒有價格的參賽作品仍然出現。有什麼明顯的,我失蹤了。 謝謝。

回答

3

問題是你如何比較prices。你說:

prices = post.findAll("span", {"class":"itempp"}) 

在BS .findAll返回一個元素列表。當您將價格與空字符串進行比較時,它將始終返回false。

>>>[] == "" 
False 

變化if prices == "":if prices == [],一切都應該罰款。

我希望這會有所幫助。

+0

謝謝,這確實有道理。但是,問題依然存在。寫入文件時,將沒有價格的行顯示爲空白而不是'0'。 – Rudy 2013-03-21 22:53:54