Подтвердить что ты не робот

Анализ HTML с помощью Lxml

Мне нужна помощь, разбор текста с страницы с помощью lxml. Я попробовал beautifulsoup, и html страницы, которую я разобрал, настолько сломан, что это не сработает. Поэтому я перешел к lxml, но документы немного запутываются, и я надеялся, что кто-то здесь может мне помочь.

Здесь - это страница, которую я пытаюсь разобрать, мне нужно получить текст в разделе "Дополнительная информация". Обратите внимание, что у меня есть много страниц на этом сайте, как это для синтаксического анализа, и каждый html-страницы не всегда одинаковы (могут содержать некоторые дополнительные пустые теги "td" ). Любые предложения относительно того, как получить этот текст, будут очень оценены.

Спасибо за помощь.

4b9b3361

Ответ 1

import lxml.html as lh
import urllib2

def text_tail(node):
    yield node.text
    yield node.tail

url='http://bit.ly/bf1T12'
doc=lh.parse(urllib2.urlopen(url))
for elt in doc.iter('td'):
    text=elt.text_content()
    if text.startswith('Additional  Info'):
        blurb=[text for node in elt.itersiblings('td')
               for subnode in node.iter()
               for text in text_tail(subnode) if text and text!=u'\xa0']
        break
print('\n'.join(blurb))

дает

На протяжении более 65 лет Карл Стирн Морской устанавливает новые стандарты превосходство и обслуживание для катания на лодках наслаждение. Потому что мы предлагаем качество товар, забота, добросовестность, продаж и обслуживания, мы смогли сделать наших клиентов нашими друзья.

Наш объект площадью 26 000 кв. футов включает комплектующие и аксессуары отдел, отдел полного обслуживания (Мерседес-дилер Premier с 2 днями полной загрузки Mercruiser Master Tech) и новые, продажи брокерских услуг.

Изменить: Вот альтернативное решение на основе Steven D. Majewski xpath, которое обращается к комментарию OP о том, что количество меток, разделяющих "Дополнительная информация" из рекламного объявления, может быть неизвестно:

import lxml.html as lh
import urllib2

url='http://bit.ly/bf1T12'
doc=lh.parse(urllib2.urlopen(url))

blurb=doc.xpath('//td[child::*[text()="Additional  Info"]]/following-sibling::td/text()')

blurb=[text for text in blurb if text != u'\xa0']
print('\n'.join(blurb))