2016-05-04 2 views
1

Im пытается создать автоматический сценарий, который будет загружать таблицу с веб-сайта, а затем использовать регулярные выражения для получения соответствующих данных. HTML являетсяКак добавить открывающий тег только к HTML-документу в Python

<tr> 
    <td class="data0"><b><a target="blank" href="index.php?section=consegne_ucraina">UKRAINE</a></td> 
    <td class="value0" style="font-style:italic;text-align:center">Jan-Feb 2016</td> 
    <td class="value0" style="text-align:right"><small>(e)</small> 1.181</td>  
    <td class="value0" style="text-align:right;border-left:1px dotted"><i style="color:red">-12</i></td> 
    <td class="value0" style="text-align:right"><i style="color:red">-1,0%</i></td> 
    <td class="value0" style="text-align:right;border-left: dotted 1px"><i style="color:red">-71</i></td> 
    <td class="value0" style="text-align:right"><i style="color:red">-5,7%</i></td> 
    <td class="value0" style="text-align:right;border-left: dotted 1px"><i style="color:red">-42</i></td> 
    <td class="value0" style="text-align:right"><i style="color:red">-3,4%</i></td> 
</tr> 

    <td class="data1"><a target="blank" href="index.php?section=consegne">EU-28</a></td> 
    <td class="value1" style="font-style:italic;text-align:center">Jan-Feb 2016</td> 
    <td class="value1" style="text-align:right">25.045</td>  
    <td class="value1" style="text-align:right;border-left:1px dotted"><i style="color:green">+1.779</i></td> 
    <td class="value1" style="text-align:right"><i style="color:green">+7,6%</i></td> 
    <td class="value1" style="text-align:right;border-left: dotted 1px"><i style="color:green">+1.559</i></td>  
    <td class="value1" style="text-align:right"><i style="color:green">+6,6%</i></td> 
    <td class="value1" style="text-align:right;border-left: dotted 1px"><i style="color:green">+2.743</i></td> 
    <td class="value1" style="text-align:right"><i style="color:green">+12,3%</i></td>    
</tr> 

Пока мой код может выйти первый погладить из <tr>, в том числе первые 3 значений, т.е. Украина, январь-февраль 2016 и 1,18. Но, как вы можете видеть из-за ошибки на странице html, в следующем разделе нет открытого тега <tr>, который останавливает мою программу. Есть ли способ вставить только тег <tr> в это место, на данный момент я могу получить только BeautifulSoup, чтобы вставить открывающий и закрывающий теги вокруг тега <a>, используя этот код.

soup = BeautifulSoup(webpage,'html.parser') 
a= soup.find("a", attrs={"href":"index.php?section=consegne"}) 
tr = soup.new_tag('tr') 
a_idx = a.parent.contents.index(a) 
a.parent.insert(a_idx , tr) 

Это дает мне следующее

</tr> 
<td class="data1"><tr></tr><a href="index.php?section=consegne" target="blank">EU-28</a></td> 

Итак, в заключение мне нужно кого-то, чтобы помочь мне двигаться лишь открытие <tr> тег вне <td> тега и в случае неудачи сделать только отверстие <tr> тег и открытие <td> бирка.

ответ

0

Molloy! Вместо этого вы можете проанализировать HTML с регулярными выражениями и urllib. Код будет выглядеть примерно так:

import urllib 
import re 
try: 
     url = ('url that youre trying to access') 
     req = urllib.request.Request(url) 
     resp = urllib.request.urlopen(req) 
     respData = resp.read() 
    except (TimeoutError, urllib.error.URLError) as e: 
     print(e) 

    month = re.findall(r'<td class="value0" style="font-style:italic;text-align:center">(.*?)</td>', str(respData)) 
    number = re.findall(r'<td class="value0" style="text-align:right"><small>(e)</small>(.*?)</td>', str(respData)) 

Вы бы повторить поиск переменных (т.е. re.findall) для всех данных, которые вы пытаетесь найти. Удачи!

+0

Спасибо за помощь. единственная проблема заключается в том, что, к сожалению, на странице html есть 2 таблицы с примерно 14 странами на каждом, и я не уверен, изменился ли код. Мой код работает, если я загружаю html и вставляю '' вручную, я просто ищу способ вставить его, прежде чем попробовать другой метод. –

Смежные вопросы