BeautifulSoup:如何获取 div 选项卡的子级

Vai*_*ule 1 python beautifulsoup python-requests

这是我的代码。

 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
Run Code Online (Sandbox Code Playgroud)

我想从这个网站上抓取数据,但该 div 没有类,这就是为什么我不知道该怎么做,然后我发现你可以找到 div 标签的子级,但它也不起作用,我正在尝试获取所有标签。

ale*_*cxe 5

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

您可以使用CSS 选择器div并获取每个类的第一个子级product-price

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

这将打印:

Rs  33490Rs 42990(22%)
Rs  26799Rs 31500(15%)
...
Rs  41790Rs 44990(7%)
Rs  48000Rs 50000(4%)
Run Code Online (Sandbox Code Playgroud)

nth-of-type文档参考

请注意,除了实际价格之外,它还包含删除线字体上的先前价格。要摆脱它,请div使用find()withtext=True和只获取顶级文本recursive=False

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

印刷:

Rs  33490
Rs  26799
...
Rs  41790
Rs  48000
Run Code Online (Sandbox Code Playgroud)

您可以进一步省略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
Run Code Online (Sandbox Code Playgroud)

印刷:

33490.0
26799.0
...
41790.0
48000.0
Run Code Online (Sandbox Code Playgroud)