1

I want to scrape the content of websites with Python. Just like this:

Apple’s stock continued to dominate the news over the weekend, with Barron’s placing it on the top of its favorite 2013 stock list.

But print them with error result:

Apple âs stock continued to dominate the news over the weekend, with Barronâs placing it on the top of its favorite 2013 stock list.

The symbol "’" can't be shown, here is my code:

    #-*- coding: utf-8 -*-

    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    import urllib
    from lxml import *
    import urllib
    import lxml.html as HTML

    url = "http://www.forbes.com/sites/panosmourdoukoutas/2012/12/09/apple-tops-barrons- 10-favorite-stocks-for-2013/?partner=yahootix"
    sock = urllib.urlopen(url)
    htmlSource = sock.read()
    sock.close()

    root = HTML.document_fromstring(htmlSource)
    contents = ' '.join([x.strip() for x in root.xpath("//div[@class='body']/descendant::text()")])

    print contents

    f = open('C:/Users/yinyao/Desktop/Python Code/data.txt','w')
    f.write(contents)
    f.close()

However, after setting, the function of printf is not useful. Why? And what should I do? I'm using Windows, and the default encoding approach is gbk.

4

1 に答える 1

1

まず、すべてのソフトウェア開発者が絶対的に、Unicodeと文字セットについて確実に知っている必要があることを確認してください(言い訳はできません!)

次に、常に内部でUnicodeを使用します。早くデコードし、遅くエンコードします。Webサイトをスクラップするときは、それをユニコードにデコードし、スクリプト内でユニコードとして処理します。そうしないと、たとえば中国語のWebページのコメントで予期しない文字が検出されたために、コードがランダムなポイントでクラッシュします。後でどこかで(たとえば、書き込み可能なストリームに)渡す場合にのみ、エンコードする必要があります(「utf-8」が望ましい)

第三に、BeautifulSoup4を使用します

于 2012-12-18T08:56:19.923 に答える