2

我是 python 编码的新手(可能是几天),基本上是在 stackoverflow 上学习其他人的代码。我正在尝试编写的代码使用 beautifulsoup 来获取 craigslist 上摩托车的 pid 和相应的价格。我知道还有很多其他方法可以做到这一点,但我当前的代码如下所示:

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"

它工作正常,随着我不断学习,我计划对其进行优化。我现在遇到的问题是,没有价格的条目仍然出现。有什么明显的东西我失踪了。谢谢。

4

1 回答 1

3

问题是你如何比较prices. 你说:

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

在 BS.findAll中返回一个元素列表。当您将价格与空字符串进行比较时,它将始终返回 false。

>>>[] == ""
False

更改if prices == "":if prices == [],一切都应该没问题。

我希望这有帮助。

于 2013-03-21T21:11:47.383 回答