2016-07-21 5 views
0

長さが73,033の要素の長いリストがあります。私はそれからコンテキストを取得したいと思います。リストでは、各要素は同じ構造を持ち(次のコードのブロックが役に立つ場合)、<div align="center" class="photocaption"> Author/Designer Carleton Varney with Jim Druckman </div>のようになります。私が得ることに興味を持ってすることは長いリストをループする便利な方法があるかどうか、私は疑問に思ってテキストAuthor/Designer Carleton Varney with Jim Druckman.HTMLタグで73033要素のリストを再帰してコンテキストを取得します

メインコード

NewSoups = [BeautifulSoup(NewR) for NewR in NewRs]. 
captions = [soup.find_all("div", class_ = "photocaption") for soup in NewSoups] 
flattened_captions = [] 
for x in captions: 
    for y in x: 
     flattened_captions.append(y) 

print(len(flattened_captions)) #73033 

import re 
results = [re.sub('<[^>]*>', '', y) for y in flattened_captions] #where the error comes from 

エラー

Traceback (most recent call last): 
File "picked.py", line 22, in <module> 
results = [re.sub('<[^>]*>', '', y) for y in flattened_captions] 
File "/opt/conda/lib/python2.7/re.py", line 155, in sub 
return _compile(pattern, flags).sub(repl, string, count) 
TypeError: expected string or buffer 

です<div ></div>そうでない場合は、私が望むすべてのテキストを抽出する最良の方法は何でしょうか?どうもありがとうございました。

+0

はBeautifulSoupについては何も知らないが、私はflattened_captions' '内のオブジェクトは、いくつかの種類の'のgetText() 'や'テキスト() 'メソッドを持っていることを推測しているテストするには

str_flattened_captions = [str(flattened_captions[i]) for i in range(len(flattened_captions))] gains = [re.sub('<[^>]*>', '', item) for item in str_flattened_captions] 

あなたのためにdivのテキストコンテンツを単純に抽出します。 – Welbog

+0

ありがとう@Welbog、 'AttributeError: 'list'オブジェクトに属性 'getText''がなく、' AttributeError:' list 'オブジェクトに属性' text''がありません。 – achimneyswallow

+0

したがって、キャプションのリストにHTML要素を表すリストが含まれていますか?それは私には分かりません。私は 'soup.find_all'によって返される型についてのドキュメンテーションを見つけようとします。返すものは要素のテキストを取得するメソッドを持たなければならないからです。 – Welbog

答えて

0

私が投稿しようとしているのは、投稿された問題に対処する最もエレガントで効率的な方法ではありません。 Welbog氏が指摘するように、BeautifulSoup自体はコンテキストを抽出する機能を提供しています。しかし、元の質問を投稿したときにエラーを受け取ったので、エラーがどこから来たのか不思議でした。 flattented_captionsから返されたものは文字列ではないことが判明しました。それは解決するのが非常に簡単です。方法は次のとおりです。

print(gains[:5]) 
r Barbara Schorr ', ' Architect Joan Dineen with Alyson Liss ', ' Author/Designer Carleton Varney with Jim Druckman ', ' Designers Richard Cerrone, Lisa Hyman and Rhonda Eleish (front) in their room called "Holiday Nod To Nature" '] 
関連する問題