2016-07-10 1 views
1

У меня есть следующий тегвеб выскабливание ... получить все жгуты тега включая другие тег

<div class="example"> 
    <p> text <a href="#"> link </a> text</p> 
</div> 

Я хочу получить

<p> text <a href="#"> link </a> text</p> 

так все внутри DIV с примером класса. Я использую

from lxml import html 
page = requests.get('X') 
tree = html.fromstring(page.content) 

description = tree.xpath('//div[@class="example"]/p//text()') 

, который дает мне список тегов абзаца, который я затем присоединиться вместе с

description = ' '.join('<p>{0}</p>'.format(paragraph) for paragraph in description) 

но должен быть способ напрямую получить содержание в пределах DIV? благодаря деревенщина

ответ

0

Я нашел решение ... не очень, но это дает мне то, что я хочу ...

dummy = tree.xpath('//div[@class="example"]/div[2]/div/node()') 
description = '' 
for paragraph in dummy: 
    try: 
     description += html.tostring(paragraph) 
    except: 
     pass 
0

Вам просто нужно, чтобы получить все узлы внутри тега:

h = """<div class="example"> 
<p> text <a href="#"> link </a> text</p> 
<p> othertext <a href="#"> otherlink </a> text</p> 
</div>""" 

from lxml import html 

x = html.fromstring(h) 

print("".join(html.tostring(n) for n in x.xpath("//div[@class='example']/*"))) 

Выход:

<p> text <a href="#"> link </a> text</p> 
<p> othertext <a href="#"> otherlink </a> text</p> 

Или использовать .iterchildren:

"".join(html.tostring(n) for n in x.xpath("//div[@class='example']")[0].iterchildren()) 

Не нужно ни одной попытки/кроме того.