2016-12-02 3 views
-1

Я пытаюсь написать код, который принимает веб-сайты и пропускает первые 20 символов и печатает следующий 100.Unhashable наберете «ломтик»

Это код, который я до сих пор:

i = 0 
while i <len(urls): 
    html = urllib.request.urlopen(urls[i]) 
    bsobject = BeautifulSoup(html.read(), "html.parser")  
    print(bsobject.body[20:120]) 
    i+=1 

Я запустить его и он дает мне ошибку «TypeError: unhashable типа:„срез“»

Любая помощь приветствуется :)

+2

«bsobject.body» - это объект, чтобы получить текст, похожий на 'bsobject.body.string [20: 120]' –

+1

'bsobject.body' является объектом BeautifulSoup' Tag', а не строкой. Он представляет собой анализируемую структуру тела документа, а не только последовательность символов. – user2357112

+1

Сторона комментария к вашей петле. Более питоновский цикл будет «для URL-адресов в URL-адресах:». Тогда вам не нужно 'i' вообще. – CAB

ответ

0
for url in urls: 
    html = urllib.request.urlopen(url) 
    bsobject = BeautifulSoup(html.read(), "html.parser") 
    print(str(bsobject.body)[20:121]) 

Этот код работает, я не уверен, почему, но он это делает.

+0

Замечания выше ответят, почему 'bsobject.body' является объектом BeautifulSoup' Tag', а не строкой. По 'str()' -ing, вы создали строку, которую вы можете нарезать с помощью '[20: 121]'. –