gpt4 book ai didi

带有异常空格的 Python BeautifulSoup 和 HTML

转载 作者:太空宇宙 更新时间:2023-11-04 04:01:39 24 4
gpt4 key购买 nike

我正在尝试通过从网站上抓取产品价格来更新产品价格。但是我遇到了一种不寻常的 html 格式,这给我带来了一些麻烦。我试图在没有空格的情况下返回价格。目前我的代码引入了所有空格。

<p class='product__price'> == $0
<span class='visuallyhidden'>Regular price</span>
"


£9.99

" == $0
</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()

但不幸的是,使用 .strip() 方法不起作用,脚本会返回带有一堆空格和“正常价格”的价格。

关于如何准确获得“9.99 英镑”有什么想法吗?

最佳答案

这不起作用的原因是 p 元素包含两个子元素:

  • span 元素
  • 一个文本节点

当您在父级 p 元素上添加 .text 时,您将删除“span”标签。除此之外,内容包含引号,这将使 strip() 忽略这些引号内的空格。

要解决此问题,您必须首先将文本内容与 span 节点隔离,您可以使用 .children< 深入到 span 节点来实现这一点.

最后,您可以告诉 .strip() 要删除哪些字符。

因此,假设 p 元素内的结构总是这样,我们可以执行以下操作:

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))

关于带有异常空格的 Python BeautifulSoup 和 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58186445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com