unerwartetes Ergebnis beim Parsen von HTML mit BS4 - python - Program QA

unerwartetes Ergebnis beim Parsen von HTML mit BS4

2020-06-30 python python-3.x beautifulsoup web-crawler python-unicode

Ich versuche diesen Code in Python 3.8.2:

from bs4 import BeautifulSoup
import urllib.request

html = urllib.request.urlopen(
    'https://vietnamnet.vn/').read()

soup = BeautifulSoup(html, "html.parser").encode("utf-8")

print(soup.title)

aber ich erhielt:

Geben Sie hier die Bildbeschreibung ein

statt erwartet: <title>Báo VietNamNet - Tin tức online, tin nhanh Việt Nam và thế giới</title>

Was mache ich falsch und wie kann ich das beheben?

Ich muss .encode("utf-8") da die HTML-Zeichenfolge ein Unicode-Zeichen enthält. Beeinflusst es die Suppe ?

Vielen Dank!

Answers

Wenn Sie .encode() auf dem Parser ausführen, .encode() Sie der Suppe eine Byte-Zeichenfolge zu. Der Parser geht vollständig verloren, da .encode() eine Byte-Zeichenfolge zurückgibt.

bs4 sollte den Zeichensatz für Sie behandeln.

soup = BeautifulSoup(html, "html.parser")
print(soup.title)

Ausgabe:

>>> from bs4 import BeautifulSoup
>>> import urllib.request
>>> html = urllib.request.urlopen(
...     'https://vietnamnet.vn/').read()

>>> soup = BeautifulSoup(html, "html.parser")
>>> print(soup.title)
<title>Báo VietNamNet - Tin tức online, tin nhanh Việt Nam và thế giới</title>
>>> 
from bs4 import BeautifulSoup
import urllib.request

html = urllib.request.urlopen(
    'https://vietnamnet.vn/').read().decode("utf-8")

soup = BeautifulSoup(html, "html.parser")

title = soup.title
print(title)
print(title.string)

Sie müssen beim Lesen dekodieren.

Nachdem Sie Ihre URL gelesen haben, sollten Sie sie mit dem entsprechenden Codierungsformat wie unten dekodieren.

from urllib import request
from bs4 import BeautifulSoup
import urllib.request

html = urllib.request.urlopen(
    'https://vietnamnet.vn/').read().decode('utf8')

soup = BeautifulSoup(html, "html.parser")
title = soup.find('title')

print("title is :", title)

Related