1

これが私のコードです。

 import requests
 from bs4 import BeautifulSoup
 res = requests.get('http://www.snapdeal.com/products/computers-laptops?sort=plrty&')
 soup = BeautifulSoup(res.text)
 price = soup.find_all('div', class_="product-price").children

このWebサイトからデータをスクレイピングしたいのですが、そのdivにはクラスがないため、その方法がわかりません.divタグの子を見つけることができることがわかりましたが、それも機能していないので試していますすべてのタグを取得します。

4

3 に答える 3

5

目的の価格値を取得するには、複数の方法があります。

CSS セレクターを使用して、各divhasproduct-priceクラスの最初の子を取得できます。

for price in soup.select("div.product-price > div:nth-of-type(1)"):
    print price.get_text(strip=True) 

これは次のように表示されます。

Rs  33490Rs 42990(22%)
Rs  26799Rs 31500(15%)
...
Rs  41790Rs 44990(7%)
Rs  48000Rs 50000(4%)

nth-of-typeドキュメント参照

実際の価格とともに、取り消し線フォントにある以前の価格が含まれていることに注意してください。それを取り除くには、withとdivを使用して から最上位のテキストのみを取得します。find()text=Truerecursive=False

for price in soup.select("div.product-price > div:nth-of-type(1)"):
    print price.find(text=True, recursive=False).strip()

版画:

Rs  33490
Rs  26799
...
Rs  41790
Rs  48000

さらに進んで、先頭の を省略しRs、int (または float) の価格値を取得できます。

for div in soup.select("div.product-price > div:nth-of-type(1)"):
    price = div.find(text=True, recursive=False).strip()
    price = float(price.replace("Rs  ", ""))
    print price

版画:

33490.0
26799.0
...
41790.0
48000.0
于 2015-04-18T22:56:20.867 に答える
1

これを試して:

import requests
from bs4 import BeautifulSoup

res = requests.get('http://www.snapdeal.com/products/computers-laptops?sort=plrty&')
soup = BeautifulSoup(res.text)
price_divs = soup.find_all('div', {'class': 'product-price'})

for price_div in price_divs:
    child_div = price_div.find('div')    
    print child_div.text
于 2014-09-18T09:04:46.210 に答える
1

これは、その div 内のテキストをすべてきれいにストライプ化したものです。

import requests
from bs4 import BeautifulSoup
res = requests.get('http://www.snapdeal.com/products/computers-laptops?sort=plrty&')
soup = BeautifulSoup(res.text)
price = soup.find_all('div', class_="product-price")

for p in price:
    soupInner = BeautifulSoup(str(p))
    print soupInner.find('div').find('div').get_text().strip()
于 2014-09-18T09:05:17.433 に答える