2012-02-01 11 views
5

mi è stato dato un url e voglio per estrarre il contenuto del tag <BODY> dall'URL. Sto usando Python3. Mi sono imbattuto in sgmllib ma non è disponibile per Python3.tag html analisi con Python

Qualcuno può guidarmi per favore con questo? Posso usare HTMLParser per questo?

Ecco quello che ho provato:

import urllib.request 
f=urllib.request.urlopen("URL") 
s=f.read() 

from html.parser import HTMLParser 
class MyHTMLParser(HTMLParser): 
    def handle_data(self, data): 
     print("Encountered some data:", data) 

parser = MyHTMLParser() 
parser.feed(s) 

questo mi dà errore: TypeError: Impossibile convertire oggetto 'byte' a str implicitamente

+8

"per favore guidami": lo farà. Ricerca. È stato chiesto Molte, molte volte. Dopo aver effettuato la ricerca (nell'angolo in alto a destra), sentiti libero di porre ** domande ** specifiche in base alle risposte già fornite. –

+0

per essere specifici possiamo analizzare url nel metodo parser.feed()? – Nerd

+0

@ghbhatt: mostraci un esempio di ciò che ti serve. Altrimenti vedi la mia risposta è questo che stai chiedendo. – RanRag

risposta

10

Per fissare la linea di cambiamento TypeError # 3 a

s = str (f.read())

La pagina Web che stai ricevendo viene restituito sotto forma di byte, e avete bisogno per cambiare i byte in una stringa per dar loro da mangiare al parser.

+0

+1 anche per la risposta giusta. – RanRag

+1

Dovresti trovare la codifica dalle intestazioni HTTP in modo da sapere quale codifica utilizzare. –

4

Se si dà un'occhiata al vostro s variabile il suo tipo è un byte

>>> type(s) 
<class 'bytes'> 

e se si dà un'occhiata al Parser.feed richiede una stringa o unicode come argument.So, fare

>>> x = s.decode('utf-8') 
>>> type(x) 
<class 'str'> 
>>> parser.feed(x) 

o fare x = str(s).

+1

Sembra che abbiamo dato la stessa risposta in un minuto l'uno dall'altro. – pycoder112358

+0

Dovresti trovare la codifica dalle intestazioni HTTP in modo da sapere quale codifica utilizzare. –