首页 > 解决方案 > 在跨度标记中的引号内刮擦

问题描述

新刮。我正在尝试抓取引号和
标签中的元素。如果我输入:

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(评论数)

任何帮助是极大的赞赏!

标签: pythonhtmlcssscreen-scraping

解决方案


我想出了一个解决办法。

当有时缺少其中一个或两个值时,我也遇到了一个问题,我想指出这一点,因为我正在将列表编译为数据。

我选择“数据内容”元素中的所有数字,使用 [r'\d+(?:.\d+)?'] 作为第一个值(带小数位)和 [r'\d+(?:, \d+)?'] 用逗号表示第二个值。这也设法跳过“满分 5 星”。“除了 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:

推荐阅读