2017-05-18 4 views
1

Ich versuche BBCs Quelle in zwei Teile zu spalten, um die Top-Schlagzeile zu bekommen:Fehler bei der Verwendung der .split() Funktion mit urllib.request

import urllib.request 

url = 'http://www.bbc.com/' 
page = urllib.request.urlopen(url) 
contents = page.read() 
page.close() 

split1 = '<a class="media__link" href="/news/world-us-canada-39965107" rev="hero1|headline">\n' 
split2 = '\n</a>' 

title = contents.split(split1)[1].split(split2)[1] 

print(title) 

Aber ich bin immer diese Fehlermeldung:

title = contents.split(split1)[1].split(split2)[1] 
TypeError: a bytes-like object is required, not 'str' 
+0

'contents' ist vom Typ' bytes' und kann daher nur durch Trennzeichen dieses Typs 'geteilt' werden. – ForceBru

+0

Sie müssen ein Objekt vom Typ Bytes in Python3 übergeben. Es sieht so aus, als ob Sie versuchen, die URL-Referenz (href) aufzuteilen. Sehen Sie sich also [urllib.parse] (https://docs.python.org/3/library/urllib.parse.html) an) – Mogarrr

Antwort

1

HTTPResponse.read([amt]) :

Reads and returns the response body, or up to the next amt bytes.

contents = page.read() 

gibt ein Byte-Objekt nicht str. Daher muss das Aufteilungsbegrenzer auch ein Byte-Objekt sein. Fügen Sie einfach einen b vor der Zeichenfolge hinzu.

split1 = b'<a class="media__link" href="/news/world-us-canada-39965107" rev="hero1|headline">\n' 
split2 = b'\n</a>' 
Verwandte Themen