-1

基本的にはWeb検索エンジンを設計しているので、Webページを取得するクローラーを設計しました。

読み込むと、Web ページは html 形式なので、すべてのタグがそこにあります。本文とタイトルからキーワードを抽出する必要があるため、すべてのタグ (「<」と「>」の間のすべて) を削除しようとしています。

以下のコードは小さな HTML ページではうまく機能しますが、これを大規模に (つまり、http://www.google.comから開始して) 使用しようとすると、メモリが不足します。

0 def remove_tags(self, s):
1     while '<' in s:
2         start = s.index('<')
3         end = s.index('>')
4         s = s[:start] + " " + s[end+1:]
5     return s.split()

4 行目でメモリ エラーが発生します。

4

1 に答える 1

8

あなたの一般的なアプローチは間違っています。まず、実際の XML/HTML パーサーを使用します。BeautifulSoup のようなもので、不適切な HTML に関しては寛容です。<見てい>て、長くは生き残れないあなたのアプローチ。

第二に、すべてをメモリに読み込んで、そこで遊んでいます。これはメモリを消費し、実行している操作の一部でコピーが作成される可能性がありますが、これも良いことではありません。代わりに、入力ストリームを繰り返し処理し、データを確認しながら処理してください。remove_tagsテキスト処理機能ではなく、入力に対するフィルターと考えてください。

于 2012-07-29T07:45:38.113 に答える