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 标签的子级,但它也不起作用,我正在尝试获取所有标签。
有多种方法可以获得所需的价格值。
您可以使用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)
请注意,除了实际价格之外,它还包含删除线字体上的先前价格。要摆脱它,请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)