刮痧新手。我试图在引号和
标签内刮掉一个元素。如果我输入:
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:<br><br>4.9 out of 5 stars<br>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:<br><br>4.9 out of 5 stars<br>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: