Python 抓取 Html 麻烦

Python Scraping Html Trouble

我目前正在尝试收集我的互联网提供商数据使用情况。我试着寻找 api 之类的,但他们没有。我求助于 scraping html whch 看起来像这样

</tr><tr class="top-border"><td>17&nbsp;&nbsp;Monday</td><td class='text-right'><span class='mb'>2,991.69&nbsp;MB</span><span class='gb'>2.92&nbsp;GB</span></td></td><td class='text-right'><span class='mb'>1,232.04&nbsp;MB</span><span class='gb'>1.20&nbsp;GB</span></td></td><td class='text-right'><span class='mb'>4,223.73&nbsp;MB</span><span class='gb'>4.12&nbsp;GB</span></td>         <td>
            <div class="progress"><div class="bar bar-success" style="width: 51%;"></div></div>         </td>

        </tr><tr><td>18&nbsp;&nbsp;Tuesday</td><td class='text-right'><span class='mb'>3,589.42&nbsp;MB</span><span class='gb'>3.51&nbsp;GB</span></td></td><td class='text-right'><span class='mb'>1,199.58&nbsp;MB</span><span class='gb'>1.17&nbsp;GB</span></td></td><td class='text-right'><span class='mb'>4,789.00&nbsp;MB</span><span class='gb'>4.68&nbsp;GB</span></td>           <td>
            <div class="progress"><div class="bar bar-success" style="width: 57%;"></div></div>         </td>

等等

我尝试使用 pythons re.search 但我只能从中获得一些信息。 例如:

search = re.search("class='gb'>(.*)&nbsp;GB</span>",raw_info)
for i in range(0,100):
    try:
        print(search.group(i))
    except:
        break

输出:

class='gb'>6.88&nbsp;GB</span></td></td><td class='text-right'><span class='mb'>
1,295.90&nbsp;MB</span><span class='gb'>1.27&nbsp;GB</span></td></td><td class='
text-right'><span class='mb'>8,340.12&nbsp;MB</span><span class='gb'>8.14&nbsp;G
B</span>
6.88&nbsp;GB</span></td></td><td class='text-right'><span class='mb'>1,295.90&nb
sp;MB</span><span class='gb'>1.27&nbsp;GB</span></td></td><td class='text-right'
><span class='mb'>8,340.12&nbsp;MB</span><span class='gb'>8.14

我了解到我不能使用这样的组来打印所有数字

tldr: 我需要打印所有引用 gb 的数字并像这样打印它们

2.92,1.20,4.12

3.51,1.17,4.68

您可能想尝试使用 BeautifulSoup,这是一个非常灵活的库,可以完全满足您的需求。

html = scraped
soup = BeautifulSoup(html)
spans = soup.findAll('span', attrs={'class': 'gb'})

然后您将得到一个列表,其中包含所有具有 gb class 的 span 标签。生成数字并将它们转换为浮点数,然后应用您想要打印的任何格式非常简单。