同じコードが別の 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 に戻すと、問題が修正されるようです。不可解!