1

同じコードが別の URL で動作する場合、urllib2.urlopen() でフェッチしているガーディアンの記事からスープを作成できません。これが私のコードです:

import urllib2
from bs4 import BeautifulSoup

url = 'http://www.guardian.co.uk/sport/2012/mar/29/jessica-ennis-london-2012'
myfile = urllib2.urlopen(url)
data = myfile.read()
soup = BeautifulSoup(data)

次のエラーが発生します。

トレースバック (最新の呼び出しが最後): ファイル "/home/myhome/workspace/guardiangrep/testing.py"、13 行目、スープ = BeautifulSoup(data) ファイル "/usr/lib/python2.7/site-packages/beautifulsoup4 -4.0.2-py2.7.egg/bs4/ init .py"、168 行目、init self._feed() ファイル "/usr/lib/python2.7/site-packages/beautifulsoup4-4.0.2-py2 .7.egg/bs4/ init.py"、181 行目、_feed 内 self.builder.feed(self.markup) ファイル "/usr/lib/python2.7/site-packages/beautifulsoup4-4.0.2-py2.7.egg/bs4/builder/ _htmlparser.py"、133 行目、フィード parser.feed(markup) ファイル内 "/usr/lib/python2.7/HTMLParser.py"、108 行目、フィード内 self.goahead(0) ファイル "/usr/lib/ファイル "/usr/lib/python2.7/HTMLParser.py"、229 行目、parse_starttag endpos = self.check_for_whole_start_tag(i) ) ファイル "/usr/lib/python2.7/HTMLParser.py"、304 行目、check_for_whole_start_tag self.error("不正な開始タグ") ファイル "/usr/lib/python2.7/HTMLParser.py"、115 行目、エラーで HTMLParseError(message, self.getpos()) HTMLParser.HTMLParseError を発生させます:不正な開始タグ、3025 行、16 列

この場合、ヘッダーが役立つ情報になる可能性があることを理解しています。追加すると

headers = myfile.info()
print headers

私は得る

サーバー: Apache X-GU-jas: 05-1559 Vary: Accept-Encoding,User-Agent X-GU-gen-jas: 05 Content-Type: text/html; charset=UTF-8 P3P: CP="CAO CURA ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa TELa OUR IND ONLi UNI PURi NAV STA PRE LOC" Date: Fri, 30 Mar 2012 09:10:54 GMT X-GU-PageRenderer: DefaultPageRenderer Keep-Alive: timeout=5, max=70 Transfer-Encoding: チャンク X-GU-tm: 01 Content-Language: en-US Connection: close X-GU-httpd: 05

どんな助けでも大歓迎です。

編集: BeautifulSoup 3 に戻すと、問題が修正されるようです。不可解!

4

1 に答える 1

1

レナード・リチャードソンから他のチャネルを通じて次の回答を受け取りました。それは私の問題を解決しました

Python の組み込みパーサー クラスである HTMLParser を使用していますが、これは Beautiful Soup 3 で使用される組み込みの SGMLParser ほど寛容ではありません。

組み込みの HTMLParser は、Python 2.7.3 および Python 3.2.2 からより寛大になりますが、最も簡単な解決策は、外部の解析ライブラリをインストールすることです。lxml または html5lib のいずれかがこのドキュメントを解析できるはずです。

これはここで説明されています:

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser

于 2012-03-30T20:31:09.357 に答える