2011-12-30 4 views
1

おかげで私は名前と、私はこのコードを使用したいアイテムの価格を取得するために管理している:それは完璧つの結果を返すようPythonのBeautifulSoupループこのボードに

import urllib2 
from BeautifulSoup import BeautifulSoup 
import re 

html = urllib2.urlopen('http://www.toolventure.co.uk/hand-tools/saws/').read() 

soup = BeautifulSoup(html) 
item = re.sub('\s+', ' ', soup.h2.a.text) 
price = soup.find('p', '*price').text 
price = re.search('\d+\.\d+', price).group(0) 

print item, price 

これは素晴らしいです。私は今、ページ上のすべての結果を取得しようとしています。私はループで遊んでいますが、これには非常に新しいので、ループする方法を考えることができません。

さらに詳しい知識のある人が私に正しい方向を向けることができますか?

感謝

+0

すべてがアイテムは、あなたが探しているの? h2.a? 'findAll'が役に立ちます。これは、一致する要素のリストを返します。 – dm03514

+0

例えば、上記のコードが出る:Spear&Jackson Predator Universal Hardpoint Saw - 22 "5.95これは完璧です。現在のアイテム= re.sub( '\ s +'、 ''、soup.h2.a.テキストは)エラーを作成し、私はそうした場合 DESC = soup.findAll DESCでDESCのための( 'H2') :。 が、それはすべての項目を返します 印刷desc.textキットの –

+0

ルビSTAR50-N PLUSのタイルカッターBox Rubi STAR50-Nタイルカッター(キットボックスなど) しかし、私はループ内の価格要素を得ることができません。これは、reg式にエラーを投げます(文字列エラーが予想されます)。同時にすべての価格を返す。 –

答えて

1

私はこのためfindAll使用すると思います:

soup = BeautifulSoup(html) 

mostwant = {'class': 'productlist_mostwanted_item '} 
griditem = {'class': 'productlist_grid_item '} 

divs = soup.findAll(attrs = mostwant) + soup.findAll(attrs = griditem) 

for product in divs: 
    item = product.h2.a.text.strip() 
    price = re.search('\d+\.\d+', product.findAll('p')[1].text).group(0) 
    print "%s - (%s)" % (item, price) 
+0

叙事詩!ありがとう!私にも何かを学ぶ何かがあります。トップ作品。 –

+0

あなたがそれを気に入ってよかった:) –

関連する問題