2016-12-02 6 views
-1

私はこれがコードである100非ハッシュ型「スライス」

次の私がこれまで持っているウェブサイトをとり、最初の20個の文字をスキップして出力するコードを記述しようとしています:

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例外を:非ハッシュタイプ: 『スライス』を」

すべてのヘルプは高く評価され:)

+2

'bsobject.body'は、そのテキストを' bsobject.body.string [20:120] ' –

+1

のようにするオブジェクトです。' bsobject.body'は文字列ではなくBeautifulSoup 'Tag'オブジェクトです。それは文字列だけでなく、文書の本文の解析された構造を表します。 – user2357112

+1

あなたのループの側のコメント。より多くのpythonicループは、 'url in urls:'になります。それでは、私はまったく必要ありません。 – 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() 'を実行すると、' [20:121]'でスライスすることができる文字列を作成しました。 –