- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个抓取器,可以在特定产品页面上查找定价。我只对当前价格感兴趣 - 无论产品是否打折。
我将这样的识别标签存储在 JSON 文件中:
{
"some_ecommerce_site" : {
"product_name" : ["span", "data-test", "product-name"],
"breadcrumb" : ["div", "class", "breadcrumbs"],
"sale_price" : ["span", "data-test", "sale-price"],
"regular_price" : ["span", "data-test", "product-price"]
},
}
并具有以下功能来选择当前价格并清理价格文本:
def get_pricing(rpi, spi):
sale_price = self.soup_object.find(spi[0], {spi[1] : spi[2]})
regular_price = self.soup_object.find(rpi[0], {rpi[1] : rpi[2]})
return sale_price if sale_price else regular_price
def get_text(obj):
return re.sub(r'\s\s+', '', obj.text.strip()).encode('utf-8')
调用者:
def get_ids(name_of_ecommerce_site):
with open('site_identifiers.json') as j:
return json.load(j)[name_of_ecommerce_site]
def get_data():
rpi = self.site_ids['regular_price']
spi = self.site_ids['sale_price']
product_price = self.get_text( self.get_pricing(rpi, spi) )
到目前为止,除了一个网站之外,这适用于所有网站,因为它们的定价格式如下:
<div class="product-price">
<h3>
£15.00
<span class="price-standard">
£35.00
</span>
</h3>
</div>
那又怎样product_price
返回的是“£15£35”,而不是所需的“£15”。
有没有一种简单的方法来排除嵌套的 <span>
哪个不会破坏工作 field ?
我认为解决方案是获取一个列表并选择索引 0,但检查标签的内容,这不起作用,因为它是列表中的单个项目:
>> print(type(regular_price))
>> <class 'bs4.element.Tag'>
>> print(regular_price.contents)
>> [u'\n', <h3>\n\n\xa325.00\n\n<span class="price-standard">\n\n\xa341.00\n</span>\n</h3>, u'\n']
我尝试从结果的 NavigableString 元素中创建一个列表,然后过滤掉空字符串:
filter(None, [self.get_text(unicode(x)) for x in sale_price.find_all(text=True)])
这修复了一种情况,但破坏了其他一些情况(因为它们通常将货币放在与值(value)金额不同的标签中) - 我返回“£”。
最佳答案
如果你想获取没有子元素one的文本,你可以这样做
from bs4 import BeautifulSoup,NavigableString
html = """
<div class="product-price">
<h3>
£15.00
<span class="price-standard">
£35.00
</span>
</h3>
</div>
"""
bs = BeautifulSoup(html,"xml")
result = bs.find("div",{"class":"product-price"})
fr = [element for element in result.h3 if isinstance(element, NavigableString)]
print(fr[0])
question may be duplicate of this
关于python - BeautifulSoup find - 从感兴趣的 block 中排除嵌套标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52855089/
我正在尝试检索用户兴趣列表。所以我正在调用 graph api 来检索书籍、音乐等内容。似乎“喜欢”下的所有内容也包括书籍、音乐等下列出的所有内容。他们有任何异常(exception)吗,或者我可以调
这是一道代码组织题。我有将渐变背景放在 View 上的代码。我想在多个 View 上使用相同的代码 - 因此,我想将代码放在一个函数中,并在配置相关 View 时调用它。 我的问题是,放置这样一个函数
我是一名优秀的程序员,十分优秀!