Python BeautifulSoup和HTML,带有不寻常的空格
我试图通过从网站上删除产品价格来更新产品价格。然而,我已经达到了一个不寻常的html格式,这给了我一些麻烦。我正在尝试返回没有空格的价格。目前,我的代码包含所有空格Python BeautifulSoup和HTML,带有不寻常的空格,python,beautifulsoup,Python,Beautifulsoup,我试图通过从网站上删除产品价格来更新产品价格。然而,我已经达到了一个不寻常的html格式,这给了我一些麻烦。我正在尝试返回没有空格的价格。目前,我的代码包含所有空格 <p class='product__price'> == $0 <span class='visuallyhidden'>Regular price</span> " £9.99 " == $0 </p> 但不
<p class='product__price'> == $0
<span class='visuallyhidden'>Regular price</span>
"
£9.99
" == $0
</p>
但不幸的是,使用.strip()方法不起作用,脚本返回带有大量空格和“常规价格”的价格
你知道我怎么才能拿到“9.99英镑”吗?你应该试试这个
product_price = product_price.strip().replace(" ","")
这不起作用的原因是
p
元素包含两个子元素:
- 一个
元素span
- 一个
节点文本
p
上.text
时,您将删除“span”标记。除此之外,内容还包含引号,这将使strip()
忽略这些引号内的空格
要解决此问题,必须首先将文本内容与span
节点隔离,可以使用.children
跳入span
节点
最后,您可以告诉.strip()
要删除哪些字符
因此,假设p
元素内部的结构总是这样,我们可以执行以下操作:
soup = BeautifulSoup(web_page, "html.parser")
for product in soup.find_all('div', class_="product-wrapper"):
# Get product name
product_title = product.find('p', class_='h4 product__title').text
# Get product price
product_price = product.find('p', class_='product__price').text
product_price.strip()
from bs4 import BeautifulSoup
data = """
<div>
<p class='product__price'>
<span class='visuallyhidden'>Regular price</span>
"
£9.99
"
</p>
</div>
"""
soup = BeautifulSoup(data, "html.parser")
for product in soup.find_all('div'):
# Get product price
product_price = product.find('p', class_='product__price')
raw_data = list(product_price.children)[-1]
# Remove spaces, newlines and quotes
cleaned = raw_data.strip(' \n"')
print(repr(cleaned))
从bs4导入美化组
data=”“”
正常价格
"
£9.99
"
"""
soup=BeautifulSoup(数据,“html.parser”)
对于汤中的产品。查找所有('div'):
#获得产品价格
product\u price=product.find('p',class='product\u price')
原始数据=列表(产品价格子项)[-1]
#删除空格、换行符和引号
已清理=原始数据条('\n')
打印(报告(已清洁))
另一种方法:regex如何
从bs4导入美化组
进口稀土
html=“”==0美元
正常价格
"
£9.99
" == $0
“”“
soup=BeautifulSoup(html,“html.parser”)
对于汤中的产品。查找所有('div'):
#获得产品价格
product\u price=product.find('p',class='product\u price')。文本
#正则表达式
价格=重新搜索((£\d*\?\d*)”,产品价格)
#仅当存在匹配项时打印
如果价格:打印(价格[0])
您可以使用内容
获取最后一个元素,然后使用“拆分字符串”
从bs4导入美化组
数据=''”==0美元
正常价格
"
£9.99
" == $0
''
soup=BeautifulSoup(数据,'html.parser')
项目=汤。选择一个('.product'.price')。内容
打印(项目[-1]。拆分(“)[1]。剥离()
谢谢你的建议。这确实改善了情况。它删除了价格后的所有空格,但没有删除之前的空格。你知道如何删除价格前的空格以及“正常价格”文本吗?非常感谢!这非常有效。非常感谢你的帮助。也许你可以帮我回答关于这个问题的后续问题?我已经更新了我的问题,包括您的代码建议。谢谢!这确实有效。非常感谢您的帮助。当然!我该怎么做?谢谢您的帮助。正则表达式确实有效。感谢您的帮助。
from bs4 import BeautifulSoup
data='''<p class='product__price'> == $0
<span class='visuallyhidden'>Regular price</span>
"
£9.99
" == $0
</p>'''
soup=BeautifulSoup(data,'html.parser')
items=soup.select_one('.product__price').contents
print(items[-1].split('"')[1].strip())