2016-10-28 2 views
1

В настоящее время я пытаюсь очистить использование данных интернет-провайдеров. Я пробовал искать апи, но у них их нет. Я прибегая к выскабливанию HTML whch выглядит следующим образомPython Scraping Html Trouble

</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> 

ЭСТ

Я пытался использовать питон 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

+0

Советуйте, никогда не используйте регулярное выражение для HTML. См. [This] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) ответ – Wondercricket

ответ

3

Вы можете попробовать использовать BeautifulSoup, это очень гибкая библиотека, которая может делать то, что вы ищете.

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

Затем у вас будет список всех span тегов, которые имеют gb класс. Создание чисел и преобразование их в float, а затем применение любого формата, который вы хотите распечатать, довольно просто.