BeautifulSoup:如何获得div选项卡的子项

时间:2014-09-18 08:47:17

标签: python beautifulsoup python-requests bs4

这是我的代码。

 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

我想从这个网站上搜索数据,但是div没有上课,这就是为什么我不知道如何做到这一点然后我发现你可以找到div标签的孩子,但它也是不工作,我试图得到所有标签。

3 个答案:

答案 0 :(得分:4)

有多种方法可以获得所需的价格值。

您可以使用CSS selector并获得divproduct-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%)

这将打印:

div

nth-of-type documentation reference

请注意,除了实际价格外,它还包含删除线字体上的先前价格。要摆脱它,请使用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

您可以进一步省略开头的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 并获取int(或float)价格值:

33490.0
26799.0
...
41790.0
48000.0

打印:

{{1}}

答案 1 :(得分: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

答案 2 :(得分: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()