bs4 中的网络抓取不需要输出

not desired output in web scraping in bs4

我正在抓取产品信息。但我刮了它的价格,它没有给我适当的输出。没有错误,但不是所需的输出。

而且在查找产品类别时也会出错。 这是我的代码。

import requests
from bs4 import BeautifulSoup as bs
import pandas

url='https://shop.eziline.com/product/uncategorized/umrah-management-system/'
r=requests.get(url)
soup=bs(r.content,'html.parser')

name=soup.find(class_='product_title entry-title').text.strip()
print(name)
price=soup.find('span',class_='woocommerce-Price-amount amount').text.strip()
print(price)
detail=soup.find(class_='woo-product-details_short-description').text.strip()
print(detail)
category=soup.find('cats-link a').text.strip()
print(category)

您在find方法中使用的属性适用于多个标签,您可以使用findAll查看所有标签如下:

for t in soup.findAll('span',class_='woocommerce-Price-amount amount'):
    print(str(t) + "\n")

这将导致以下输出

<span class="woocommerce-Price-amount amount"><bdi>0.00<span class="woocommerce-Price-currencySymbol">$</span></bdi></span>

<span class="woocommerce-Price-amount amount"><bdi>0.00<span class="woocommerce-Price-currencySymbol">$</span></bdi></span>

<span class="woocommerce-Price-amount amount">350.00<span class="woocommerce-Price-currencySymbol">$</span></span>

<span class="woocommerce-Price-amount amount"><bdi>850.00<span class="woocommerce-Price-currencySymbol">$</span></bdi></span>

in your code the find method returns the first occurrence of a span with classes woocommerce-Price-amount amount, and hence the output is 0.00

仅获取最后一个标签,即您可以使用的价格

price = soup.findAll('span',class_='woocommerce-Price-amount amount')[-1].text.strip()

你是

  1. 选择第一个价格而不是目标价格。相反,您可以使用主要内容 ID 作为正确部分的锚点,以 return 价格从

  2. 您试图在最后一行使用 css 选择器语法,而没有通过适当的方法应用并添加 class 选择器的语法。您也可以使用 category=soup.find(class_='cats-link').a.text.strip()

改为:

import requests
from bs4 import BeautifulSoup as bs

url='https://shop.eziline.com/product/uncategorized/umrah-management-system/'
r=requests.get(url)
soup=bs(r.content,'lxml')
name=soup.find(class_='product_title entry-title').text.strip()
print(name)
price=soup.select_one('#main-content .woocommerce-Price-amount bdi').text.strip()
print(price)
detail=soup.find(class_='woo-product-details_short-description').text.strip()
print(detail)
category=soup.select_one('.cats-link a').text.strip()
print(category)