1

私はこれをしました:

>>> from bs4 import BeautifulSoup; import urllib2
>>> data = urllib2.urlopen('http://api.stackexchange.com/docs/').read()
>>> soup = BeautifulSoup(data.replace('""','"')) # there are errors on page
>>> soup.prettify()
<!DOCTYPE HTML>
<html lang="en">
............... # cut short
</html>

data大丈夫だと思います。問題はの出力にありsoupます。

soup.prettify()データ内のすべてを含む文字列を出力していません。soup文字列全体(またはそれが行うこと)を解析していない ようです。

Webページのソースとの出力をsoup.prettify()調べると、それらが一致していないことがわかります。
ここで何が起こっているのか、そしてその理由は何ですか。

この投稿ではあまりはっきりしていない気がします。もしそうならコメントしてください。詳しく説明してみます。それ以外の場合は、この文を自由に削除してください...


更新
FakeRainBrigandのコメントに応えて、ブラウザを使用してhtmlを保存しても、問題は解決しません...したがって、これでも同じ問題が発生します。

 data = open('Stack Exchange API.htm').read()
4

1 に答える 1

0

PythonのデフォルトのHTMLパーサー以外のHTMLパーサーをインストールしていません(これは実際には素晴らしいことではありません)。

pip install lxml

すべてをリロードすると、BeautifulSoupは自動的にlxmlを取得し、代わりにそれを使用してHTMLを解析します。これは、引用符を書き直すことなく(何かが進行中であることを示すサインです)、私にとってはうまくいきます。

(HTMLはおそらく奇妙な方法で壊れており、PythonのHTMLパーサーは、bs4の助けを借りても、そのようなことを理解するのは得意ではありません。)

于 2013-03-16T12:14:45.507 に答える