2012-06-08 3 views
-3

Можно создать дубликат:
Extracting text from HTML file using Python
Parsing Source Code (Python) Approach: Beautiful Soup, lxml, html5lib difference?Извлечение текста из разметки HTML?

В настоящее время есть большой сайт, исходный код ~ 200,000 линии почти все (если не все) HTML. Более конкретно, это веб-страница, содержимое которой составляет несколько тысяч блоков текста, разделенных разрывами строк (хотя разрыв строки не означает, что существует разделение по контенту)

Моя основная цель - извлечь текст из источника код, как если бы я копировал/вставлял веб-страницу в текстовый редактор. Существует другая функция синтаксического анализа, которую я хотел бы использовать, изначально взятый в скопированном/вставляемом тексте, а не в исходный код.

Для этого я в настоящее время использую urllib2 и вызываю .get_text() в Beautiful Soup. Проблема заключается в том, что Beautiful Soup оставляет в моем коде огромное количество пробелов, и трудно передать результат во второй «текстовый» синтаксический анализатор. Я провел довольно много исследований по разбору HTML-файлов, но я откровенно не уверен, как легко решить эту проблему. Кроме того, я немного смущен тем, как использовать импорт, например lxml, для извлечения текста.

tl; dr: Есть ли какой-либо возможный способ добиться результата, как если бы я просто выбрал All, Copy, Paste на веб-странице?

+2

Для большей ясности HTML не является исходным кодом. Это разметка. –

+0

Если у вас есть решение, но единственная проблема - слишком много пробелов, разве вы не можете просто удалить лишнее пространство? Попробуйте 're.sub (r" \ s + "," ", текст)'. –

+0

- Давид Спасибо за исправление! @GregHewgill Что бы устранить расстояние между разделами, присутствующим на исходной веб-странице, нет? Другая функция разбора я использую эти белые пробелы в своей функции в качестве разделителя, поэтому я бы предпочел не удалять их.): – zhuyxn

ответ

1

Похоже, вы хотите визуализировать HTML как текст, а не извлекать содержимое различных тегов.

Если это так, рассмотрим один из них работать как subprocess из кода Python:

0

У вашего пробовали искать в HTML синтаксический анализатор. Если вы просто хотите мясо страницы HTML с вне тега записи, вы можете просто использовать:

from HTMLParser import HTMLParser 

class MyHTMLParser(HTMLParser): 
    def __init__(self): 
     HTMLParser.__init__(self) 
     self.tags = [] 
     self.attrs = [] 
    def handle_starttag(self, tag, attrs): 
     self.tags.append(tag) 
     self.attrs.append(attrs) 
    def handle_endtag(self, tag): 
     if tag not in self.tags:return 
     for x in reversed(self.tags): 
      self.tags.pop() 
      self.attrs.pop() 
      if tag == x:return 
    def handle_data(self, data): 
     print data 

parser = MyHTMLParser() 
f = file("temp.html") 
parser.feed(f.read()) 
f.close() 

Это будет анализировать данные внутри страницы HTML. <div><h1>This is my webpage</h1><div></div></div> будет напечатан как This is my webpage. Вы можете изменить любой метод, который вы хотите показать в разных разделах, разных форматах и ​​т. Д. Просто измените базовый класс по своему вкусу, мой код должен просто начать работу по правильному пути.

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