毎日いくつかの情報を表示する小さなユーティリティ スクレーパーをコーディングしました。これは 100% 確実に実行され、ローカルで実行してもまったく問題はありません。接続を開き、BeautifulSoup オブジェクトを作成し、そのコンテンツをスクレイピングして、すべてを画面に出力します。すべては順調です。
しかし、App Engine で同じコードを実行すると、何らかの理由で突然解析エラーが発生します。
コードは可能な限り簡単です。
url = 'MY_URL'
agent = ('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 '
'(KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31')
headers = {'User-Agent' : agent}
data = urllib.urlencode(form_data)
req = urllib2.Request(url, headers=headers, data=data)
return urllib2.urlopen(req).read()
それで、これはページを開きます。次に、このページを取得して、次のように解析しますBeautifulSoup
page = get_page()
soup = BeautifulSoup(page)
それでおしまい。私が言ったように、うまくいきます。このスクリプトをローカルで何百回も問題なく実行しました。さて、App Engine に貼り付けようと思いました。リクエストが問題になると思っていましたurllib
が、コードが失敗している場所がBeautifulSoup
呼び出しにあることがわかりました。
AppEngine のログに次のエラーが表示されます。
soups = [BeautifulSoup(response) for response in responses]
File "libs\bs4\__init__.py", line 172, in __init__
self._feed()
File "libs\bs4\__init__.py", line 185, in _feed
self.builder.feed(self.markup)
File "libs\bs4\builder\_htmlparser.py", line 150, in feed
raise e
HTMLParseError: expected name token at u'<! /notices/notice.c', at line 51, column 3
リクエストが AppEngine から行われたときに正しいページを取得していることを確認しました。だから…私は完全に迷っています。解析の問題が突然発生するのはなぜですか?