http://feeds.reuters.com/~r/reuters/technologyNews/~3/ZyAuZq5Cbz0/story01.htmから Body-Tag を取得しようとしています。
しかし、BeautifulSoup はそれを見つけられません。これは無効な HTML が原因ですか? もしそうなら、どうすればこれを防ぐことができますか?
また、PyTidyLib ( http://countergram.com/open-source/pytidylib/docs/index.html )を使用して HTML エラーのプレフィックスを付けようとしました。
コードの一部を次に示します。
def getContent(url, parser="lxml"):
request = urllib2.Request(url)
try:
response = opener.open(request).read()
except:
print 'EMPTY CONTENT',url
return None
doc, errors = tidy_document(response)
return parse(url, doc)
def parse(url, response, parser="lxml"):
try:
soup = bs(response,parser)
except UnicodeDecodeError as e:
if parser=="lxml":
return parse(url, response, "html5lib")
else:
print e,url
print 'EMPTY CONTENT',url
return None
body = soup.body
...
Soup をプリントアウトすると body-Tag の開閉が確認できるのですが、body=soup.body のあとに None が表示されます。
Python 2.7.3 と BeautifulSoup4 を使用しています。BeautifulSoup3 で動作するようですが、パフォーマンスの問題から BS4 に固執する必要があります。