在span标签的引号内抓取



刮痧新手。我试图在引号和
标签内刮掉一个元素。如果我输入:

for rating in flex.find_all("div", class_="article-seller-rating m-t-1"):
print(rating)

得到如下结果:

<div class="article-seller-rating m-t-1">
<div>
<span class="rating relative js-popover pointer" data-container="body" data-content="Buyers rated this dealer:&lt;br&gt;&lt;br&gt;4.9 out of 5 stars&lt;br&gt;Number of reviews: 18" data-placement="top" data-title="Reviews">
<More un-important stuff here>
</span></div>
</div>

我想提取2个元素:

4.9(评审评分),

18(评论数)

任何帮助都非常感谢!

使用re

import re
text = '''<div class="article-seller-rating m-t-1">
<div>
<span class="rating relative js-popover pointer" data-container="body" data-content="Buyers rated this dealer:&lt;br&gt;&lt;br&gt;4.9 out of 5 stars&lt;br&gt;Number of reviews: 18" data-placement="top" data-title="Reviews">
<More un-important stuff here>
</span></div>
</div>'''

numbers = re.findall(r"[-+]?d*.d+|d+",text)
print(numbers[1])
print(numbers[-1])

输出
4.9
18

我想到了一个解决办法。

我也遇到了一个问题,有时这些值中的一个或两个都丢失了,我想指出的是,因为我正在编译一个列表到数据。

我选择了"data-content"中的所有数字元素,使用[r'd+(?:.d+)?']为第一个值(带小数点)和[r'd+(?:,d+)?']表示第二个值,并使用逗号。这也成功地跳过了"五星"。除了IndexError:"处理丢失的情况。

for rating in flex.find_all("div", class_="article-seller-rating m-t-1"):
try:
starrate = rating.select('span')[0].get("data-content")
stars = re.findall(r'd+(?:.d+)?',starrate)
s=stars[0]
master_list[c].append(s)
ratings = re.findall(r'd+(?:,d+)?',starrate)
r=ratings[3]  
master_list[c].append(r)
except IndexError:

最新更新