windows - Python ødelagte links efter BeautifulSoup

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er nybegynder til Python. Just installeret den til Windows og prøv at scrape HTML.
Her er min testkode:


from bs4 import BeautifulSoup

html = 'text <a href="Transfert.php?Filename=myfile\_x86&version=5&param=13" class="nav" style="color: #000000" title = "">Download</a> text'
print(html)

soup = BeautifulSoup(html, "html.parser")
for link in soup.find\_all('a'):
    print(link.get('href'))


Denne kode returnerer samlet men brudt link:


Transfert.php?Filename=myfile\_x86&version=5¶m=13


Indtast billedbeskrivelse her
Hvordan kan jeg rette det? [11]

Bedste reference



  Du fodrer parseren ugyldig HTML, den rigtige måde at medtage &
  i en URL i en HTML-attribut er at undslippe den til &amp;



Du skal blot ændre & til &amp;


html = 'text <a href="Transfert.php?Filename=myfile\_x86&amp;version=5&amp;param=13" class="nav" style="color: #000000" title = "">Download</a> text'
soup = BeautifulSoup(html, "html.parser")

for link in soup.find\_all('a'):
    print(link.get('href'))


Output:


Transfert.php?Filename=myfile\_x86&version=5&param=13


Grunden til at det virker med html5lib og lxml er, fordi nogle parsere kan håndtere brudte HTML bedre end andre. Som nævnt af Goyo i kommentarerne kan du ikke forhindre andre i at skrive brudt HTML:)


Dette er et godt svar på dit spørgsmål, der forklarer det i detaljer: https://stackoverflow.com/a/26073147/4796844.