2

私はPythonでコーディングするのが初めてで(おそらく数日)、基本的にstackoverflowで他の人のコードを学習しています。私が書こうとしているコードは、beautifulsoup を使用して pid と 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"

それはうまく機能し、学習を続けながら最適化する予定です。私が今抱えている問題は、価格のないエントリがまだ表示されていることです. 私が行方不明であることは明らかです。ありがとう。

4

1 に答える 1

3

問題は、あなたがどのように比較しているかですprices。あなたは言う:

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

BS では.findAll要素のリストを返します。price を空の文字列と比較すると、常に false が返されます。

>>>[] == ""
False

に変更if prices == "":するif prices == []と、すべてがうまくいくはずです。

これが役立つことを願っています。

于 2013-03-21T21:11:47.383 に答える