Парсер BeautifulSoup добавляет ненужные закрывающие HTML-теги - PullRequest
0 голосов
/ 10 декабря 2018

Например

у вас есть html как

<head>
  <meta charset="UTF-8">
  <meta name="description" content="Free Web tutorials">
  <meta name="keywords" content="HTML,CSS,XML,JavaScript">
  <meta name="author" content="John Doe">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

python:

from bs4 import BeautifulSoup as bs
import urllib3

URL = 'html file'

http = urllib3.PoolManager()

page = http.request('GET', URL)
soup = bs(page.data, 'html.parser')

print(soup.prettify())

И если вы анализируете его с помощью BeautifulSoup в pythonи напечатайте его с помощью prettify, он выдаст такой вывод

output:

<html>
<head>
  <meta charset="UTF-8">
    <meta name="description" content="Free Web tutorials">
        <meta name="keywords" content="HTML,CSS,XML,JavaScript">
            <meta name="author" content="John Doe">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                </meta>
             </meta>
         </meta>
     </meta>
  </meta>
</head>

, но если у вас есть метатег html, например

<meta name="description" content="Free Web tutorials" />

Это даст выход как есть.Не будет добавлен конечный тег

, как остановить BeautifulSoup от добавления ненужных конечных тегов?

1 Ответ

0 голосов
/ 10 декабря 2018

Чтобы решить эту проблему, вам просто нужно изменить html парсер на lxml парсер

, тогда ваш скрипт на python будет

from bs4 import BeautifulSoup as bs
import urllib3

URL = 'html file'

http = urllib3.PoolManager()

page = http.request('GET', URL)
soup = bs(page.data, 'lxml')

print(soup.prettify())

, вы простонужно изменить soup = bs(page.data, 'html.parser') на soup = bs(page.data, 'lxml')

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