Найти - Пользователи
Полная версия: Парсинг HTML
Начало » Python для новичков » Парсинг HTML
1 2
vic57
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


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

В результате у тебя будет список out с таблицами, расположенными между всеми span1 и span2.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB