9

BeautifulSoup を使用して Web サイト ( http://brooklynexposed.com/events/ )からコンテンツを抽出しようとしています。問題の例として、次のコードを実行できます。

import urllib
import bs4 as BeautifulSoup

url = 'http://brooklynexposed.com/events/'
html = urllib.urlopen(url).read()

soup = BeautifulSoup.BeautifulSoup(html)
print soup.prettify().encode('utf-8')

出力は、次のように html を切り取ったようです。

       <li class="event">
        9:00pm - 11:00pm
        <br/>
        <a href="http://brooklynexposed.com/events/entry/5432/2013-07-16">
         Comedy Sh
        </a>
       </li>
      </ul>
     </div>
    </div>
   </div>
  </div>
 </body>
</html>

Comedy Show という名前のリストと、その後に続く最後の終了タグまでのすべての html を切り離しています。HTML の大部分は自動的に削除されます。ページが長すぎると、BeautifulSoup がページ全体の解析に失敗し、テキストを切り取るだけであるという、多くの Web サイトで同様のことに気付きました。誰かがこれに対する解決策を持っていますか? BeautifulSoup がそのようなページを処理できない場合、prettify() に似た機能を持つ他のライブラリを知っている人はいますか?

4

2 に答える 2

4

いくつかのマシンで bs4 が html をカットする場合とそうでない場合があるという問題がありました。再現できませんでした……。

私はこれに切り替えました:

soup = bs4.BeautifulSoup(html, 'html5lib')

..そしてそれは今動作します。

于 2016-04-08T13:08:56.457 に答える
0

それは私にとってはうまくいきますが、私が言うとエラーが発生しますsoup.prettify().encode('utf-8')

>>> from BeautifulSoup import BeautifulSoup as bs
>>> 
>>> import urllib
>>> url = 'http://brooklynexposed.com/events/'
>>> html = urllib.urlopen(url).read()
>>> 
>>> 
>>> soup = bs(html)
>>> soup.prettify().encode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 8788: ordinal not in range(128)
>>>
>>> soup.prettify()
'<!doctype html>\n<!--[if lt IE 7 ]&gt; 
&lt;html class="no-js ie6" lang="en"&gt; &lt;![endif]-->\n
<!--[if IE 7 ]&gt;
...
...
...
...
</body>\n</html>\n'

. . . . 私はこれがあなたを助けるかもしれないと思います: BeautifulSoup、あなたは私の HTML をどこに置いていますか?

于 2013-10-28T18:06:56.413 に答える