0

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 に固執する必要があります。

4

1 に答える 1

1

やっと実行できました。コードは次のとおりです。

import urllib2
from lxml import html

url = "http://www.reuters.com/article/2013/04/17/us-usa-immigration-tech-idUSBRE93F1DL20130417?feedType=RSS&feedName=technologyNews"
response = urllib2.urlopen(url).read().decode("utf-8")
test = html.fromstring(response)

for p in test.body.iter('p'):
    print p.text_content()
于 2013-05-06T18:36:32.433 に答える