Уведомления

Группа в Telegram: @pythonsu

#1 Май 20, 2017 18:41:01

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Парсинг HTML

grapefruit_ocean
Справилась таким образом:
имхо XPath проще и быстрее
 from lxml import html,etree
doc='''
 <html>
     <body>
         <span lang = "az"> ... </span>
         <div> … </div>
         <table><tr><td>11</td><td>12</td><td>13</td></tr></table>
         <table><tr><td>21</td><td>22</td><td>23</td></tr></table>
         <span lang = "en"> … </span>
         <table><tr><td>31</td><td>32</td><td>33</td></tr></table>
         <table></table>
    </body>
</html>
'''
def get_html(file_name):
    return html.fromstring(file_name)
def get_tags(tree,tag):
    return tree.xpath(tag)
tree = get_html(doc)
tags = get_tags(tree,'//table[position() < 3]/tr')   
for i in tags:
    for j in i:
        print '\t',j.text,
    print


Отредактировано vic57 (Май 20, 2017 22:31:28)

Офлайн

#2 Май 21, 2017 01:30:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9992
Репутация: +  857  -
Профиль   Отправить e-mail  

Парсинг HTML

grapefruit_ocean
Мне нужно извлечь таблицу (или таблицы, если их несколько), которые находятся между двумя тегами <span>. Все теги находятся на одном уровне.
Подскажите, пожалуйста, как это сделать?
1. Нужно зайти в родительский элемент.
2. Взять все дочерние узлы этого элемента.
3. Выбрать из взятых узлов узлы-таблицы по заданному принципу.
3.1. Для каждого элемента из списка узлов:
3.1.1. Если флаг снят и текущий элемент - это span1, то установить флаг.
3.1.2. Если флаг установлен и текущий элемент - это table, то добавить текущий элемент в список out.
3.1.3. Если флаг установлен и текущий элемент - это span2, то снять флаг.

В результате у тебя будет список out с таблицами, расположенными между всеми span1 и span2.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version