Извлечение текста из HTML-файла? - PullRequest
2 голосов
/ 01 октября 2011

У меня есть веб-страница, которая содержит кучу текста, и я хочу извлечь только текст со страницы и записать его в файл. Я пытаюсь использовать BeautifulSoup, но не уверен, что он легко делает то, что я хочу. Вот история: я считаю, что текст, который я хочу извлечь, лежит между:

<td colspan="2" class="msg_text_cell" style="text-align: justify; background-color: rgb(212, 225, 245); background-image: none; background-repeat: repeat-x;" rowspan="2" valign="top" width="100%">

и

<p></p><div style="overflow: hidden; width: 550px; height: 48px;">

То, что я хочу сделать, это выделить только текстовые строки между ними, но не включая начальный и конечный текст выше. Обратите внимание, что приведенный выше HTML-код находится в отдельной строке, но конечный текст иногда появляется сразу после последнего текста, который я хочу, но не в новой строке.

Кажется, я не вижу, как делать то, что я хочу, с BeautifulSoup, но, вероятно, мне мешает незнакомство.

Кроме того, текст, который я хочу извлечь, встречается на странице, скажем, 50 раз, поэтому я хочу, чтобы весь такой текст был отделен чем-то вроде '++++++++++++++++++++ +, чтобы было легче читать.

Большое спасибо за вашу помощь.

Ответы [ 3 ]

0 голосов
/ 31 июля 2013

Проще говоря, вы можете зацикливаться на ожидаемых элементах dom, которые содержат нужный текст, и извлекать его таким образом ... используя jquery что-то вроде $ ('td.msg_text_cell'). Each (function (idx, el) {idxбыть индексом в массиве объектов jQuery, найденных из селектора выше, получая все тдс с классом msg_text_cell ...})

вы также можете делать с нативным js, так что не думайте, что я толкаюJQuery ... просто рамки, я более знаком с

0 голосов
/ 07 ноября 2016

Вы можете сделать это легко с BeautifulSoup

from bs4 import BeautifulSoup as bs
soup = "<td colspan=\"2\" class=\"msg_text_cell\" style=\"text-align: justify; background-color: rgb(212, 225, 245); background-image: none; background-repeat: repeat-x;\" rowspan=\"2\" valign=\"top\" width=\"100%\"> <p>The text</p><div style=\"overflow: hidden; width: 550px; height: 48px;\">"
soup = bs(soup)
soup.find('p')

Теперь вы можете найти что-то вроде текста внутри тега

Output: <p>The text</p>

Теперь вы можете добавить цикл для измененияпеременная.

Затем вы можете сохранить в файл.

with open("data.csv","w") as tW:
writer = csv.writer(tW,delimiter=",")
writer.writerow(["Ptag"])
for i in soup:
    p = i.get_text()
    writer.writerow([p])
0 голосов
/ 01 октября 2011

Если вы когда-нибудь узнаете метку Руби, я могу указать вам на Нокогири, который является удивительным сокровищем для очистки экрана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...