Python 抓取 Html 麻烦
Python Scraping Html Trouble
我目前正在尝试收集我的互联网提供商数据使用情况。我试着寻找 api 之类的,但他们没有。我求助于 scraping html whch 看起来像这样
</tr><tr class="top-border"><td>17 Monday</td><td class='text-right'><span class='mb'>2,991.69 MB</span><span class='gb'>2.92 GB</span></td></td><td class='text-right'><span class='mb'>1,232.04 MB</span><span class='gb'>1.20 GB</span></td></td><td class='text-right'><span class='mb'>4,223.73 MB</span><span class='gb'>4.12 GB</span></td> <td>
<div class="progress"><div class="bar bar-success" style="width: 51%;"></div></div> </td>
</tr><tr><td>18 Tuesday</td><td class='text-right'><span class='mb'>3,589.42 MB</span><span class='gb'>3.51 GB</span></td></td><td class='text-right'><span class='mb'>1,199.58 MB</span><span class='gb'>1.17 GB</span></td></td><td class='text-right'><span class='mb'>4,789.00 MB</span><span class='gb'>4.68 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'>(.*) GB</span>",raw_info)
for i in range(0,100):
try:
print(search.group(i))
except:
break
输出:
class='gb'>6.88 GB</span></td></td><td class='text-right'><span class='mb'>
1,295.90 MB</span><span class='gb'>1.27 GB</span></td></td><td class='
text-right'><span class='mb'>8,340.12 MB</span><span class='gb'>8.14 G
B</span>
6.88 GB</span></td></td><td class='text-right'><span class='mb'>1,295.90&nb
sp;MB</span><span class='gb'>1.27 GB</span></td></td><td class='text-right'
><span class='mb'>8,340.12 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
标签。生成数字并将它们转换为浮点数,然后应用您想要打印的任何格式非常简单。
我目前正在尝试收集我的互联网提供商数据使用情况。我试着寻找 api 之类的,但他们没有。我求助于 scraping html whch 看起来像这样
</tr><tr class="top-border"><td>17 Monday</td><td class='text-right'><span class='mb'>2,991.69 MB</span><span class='gb'>2.92 GB</span></td></td><td class='text-right'><span class='mb'>1,232.04 MB</span><span class='gb'>1.20 GB</span></td></td><td class='text-right'><span class='mb'>4,223.73 MB</span><span class='gb'>4.12 GB</span></td> <td>
<div class="progress"><div class="bar bar-success" style="width: 51%;"></div></div> </td>
</tr><tr><td>18 Tuesday</td><td class='text-right'><span class='mb'>3,589.42 MB</span><span class='gb'>3.51 GB</span></td></td><td class='text-right'><span class='mb'>1,199.58 MB</span><span class='gb'>1.17 GB</span></td></td><td class='text-right'><span class='mb'>4,789.00 MB</span><span class='gb'>4.68 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'>(.*) GB</span>",raw_info)
for i in range(0,100):
try:
print(search.group(i))
except:
break
输出:
class='gb'>6.88 GB</span></td></td><td class='text-right'><span class='mb'>
1,295.90 MB</span><span class='gb'>1.27 GB</span></td></td><td class='
text-right'><span class='mb'>8,340.12 MB</span><span class='gb'>8.14 G
B</span>
6.88 GB</span></td></td><td class='text-right'><span class='mb'>1,295.90&nb
sp;MB</span><span class='gb'>1.27 GB</span></td></td><td class='text-right'
><span class='mb'>8,340.12 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
标签。生成数字并将它们转换为浮点数,然后应用您想要打印的任何格式非常简单。