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()
你是
选择第一个价格而不是目标价格。相反,您可以使用主要内容 ID 作为正确部分的锚点,以 return 价格从
您试图在最后一行使用 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)
我正在抓取产品信息。但我刮了它的价格,它没有给我适当的输出。没有错误,但不是所需的输出。
而且在查找产品类别时也会出错。 这是我的代码。
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 classeswoocommerce-Price-amount amount
, and hence the output is 0.00
仅获取最后一个标签,即您可以使用的价格
price = soup.findAll('span',class_='woocommerce-Price-amount amount')[-1].text.strip()
你是
选择第一个价格而不是目标价格。相反,您可以使用主要内容 ID 作为正确部分的锚点,以 return 价格从
您试图在最后一行使用 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)