我编写了一个小实用程序刮板,每天都会向我显示一些信息。这运行 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)
就是这样。就像我说的,运行良好。我已经在本地运行了这个脚本 100 次,没有问题。现在,我想我会把它放在 App Engine 上。我认为urllib
请求将是一个问题,但事实证明代码失败的地方是在BeautifulSoup
调用中。
AppEngines 的日志显示错误:
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 发出请求时,我已验证我获得了正确的页面。所以...我完全迷路了。为什么突然出现解析问题?