我在谷歌应用引擎中的延期任务中使用feedparser,如下所示:
class RSSFetchHandler(webapp.RequestHandler):
def get(self):
deferred.defer(parse_dk_indeed_com, feed)
然后在parse_dk_indeed_com
我有以下代码段:
import feedparser
def parse_dk_indeed_com(feed):
d = feedparser.parse(feed.url)
我可以看到,当我记录asset.url时,它返回一个有效的URL,我知道feed中有项目。但是当我记录len(d['entries'])
时它返回0?当我使用nosetest运行相同的代码段时,以下测试通过:
assert len(d['entries']) > 0
我错过了什么?
答案 0 :(得分:2)
from google.appengine.api import urlfetch
import feedparser
feed = urlfetch.fetch(asset.url)
if feed.status_code == 200:
rss = feedparser.parse(feed.content)
logging.info("%d", len(rss['entries']))
日志现在包含一个条目,表示有20个条目可用。
答案 1 :(得分:0)
我遇到了与AppEngine限制相关的非常类似的问题。虽然我的原始代码是这样的:
raw_feed = urlfetch.fetch(self.rss_feed_url).content
feed = feedparser.parse(raw_feed)
所有的单元测试都经过了,但是当使用dev_appserver测试时,我得到了一些来自feedparser的无意义的异常(钻取后)似乎是缓冲区溢出(当feedparser试图从字符串中读取时)。我试图解析的Feed很大,我遇到了一些引擎限制 解决方法是用StringIO(和/或临时文件)替换字符串。现在我的代码看起来像这样
tf = tempfile.TemporaryFile()
tf.write(urlfetch.fetch(self.rss_feed_url).content)
tf.seek(0)
feed = feedparser.parse(tf)