Как извлечь необработанный текст (включая комментарии) со страницы HTML с Beautifulsoup python? - PullRequest
1 голос
/ 24 апреля 2020

Допустим, у меня есть следующий фрагмент HTML:

<html>
<body>
<p>This is a paragraph <!-- and a comment --></p>
</body>
</html>

Я хочу извлечь весь текст тега <p>, включая <!-- and a comment -->. Использование .get_text () возвращает только «Это абзац».

Мне нужен весь необработанный текст, подобный этому: This is a paragraph <!-- and a comment -->.

Как этого можно достичь с Beautifulsoup4?

Ответы [ 4 ]

2 голосов
/ 24 апреля 2020

Использование decode_contents() ( до c), т. Е.

from bs4 import BeautifulSoup

html = """
<html>
<body>
<p>This is a paragraph <!-- and a comment --></p>
</body>
</html>
"""

soup = BeautifulSoup(html, "html5lib")
for para_tag in soup.find_all('p'):
    print(para_tag.decode_contents())
    # This is a paragraph <!-- and a comment -->
2 голосов
/ 24 апреля 2020

Найдите тег p и используйте атрибут text, чтобы получить его текст:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html)

for para_tag in soup.find_all('p'):
    print(para_tag.text)

Редактировать :

Если вы ищете комментарий также внутри тега, вы можете использовать comment import из bs4:

s = """
<html>
<body>
<p>This is a paragraph <!-- and a comment --></p>
</body>
</html>
"""
from bs4 import BeautifulSoup
from bs4 import Comment
soup = BeautifulSoup(s)

for para_tag, comment in zip(soup.find_all('p'), soup.find_all(text=lambda text: isinstance(text, Comment))):
    if comment:
       print(para_tag.text, "<!--" + comment + "-->")
    else:
        print(para_tag.text)

Edit 2:

Использование .decode_contents () :

for para_tag, comment in soup.find_all('p'):
       print(para_tag.decode_contents())

ВЫХОД:

This is a paragraph <!-- and a comment -->
0 голосов
/ 24 апреля 2020

Вы можете найти все элементы p, а затем, поскольку у вас есть часть комментария, вы должны удалить p из приведенной строки

html = """
<html>
<body>
<p>This is a paragraph <!-- and a comment --></p>
</body>
</html>
"""

from bs4 import BeautifulSoup

object = BeautifulSoup(html)
for i in objectin.find_all('p'):
    print(str(i).replace('<p>', '').replace('</p>', ''))
0 голосов
/ 24 апреля 2020

Сначала определите свою библиотеку Jsoup и назовите ее там, где хотите, затем используйте этот метод для извлечения тега P из HTML

pgTagExtract = find('p')

?

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