Python + BeautifulSoup +编码/解码网页

时间:2015-02-25 23:13:20

标签: python beautifulsoup decode encode

以下是事实:

我想从网页上抓取特定文字。这个文字是一个价格:25€。 我从源代码中知道网页是用iso-8859-15编码的。

现在我正在使用windows cmd,但最终代码将在服务器上。

最终目标是仅记录数据库中的数字,我不关心€符号。这就是为什么我只关心iso-8859-15解码,而不是任何编码?如果它不能编码我想要我的代码什么都不编码...我正在寻找的命令(在我的梦中)如下:“如果你可以打印,如果你不能打印,不打印任何东西”。

截至今天,我的代码如下:

import codecs
import sys
streamWriter = codecs.lookup('iso-8859-15')[-1]
sys.stdout = streamWriter(sys.stdout)
import requests
from bs4 import BeautifulSoup

url = "Some url"
r = requests.get(url)
soup = BeautifulSoup(r.content)

links = soup.find_all("a")
for link in links:
  print link.contents[0].text

但我面临着几个带有特殊符号的错误,比如€。

我找到了一个解决方案的开头,可能是为了实现一个名为“myprint”的新方法,它基本上可以做我想要的,即不是通过错误退出代码,而是继续打印''(没有)相反。但我无法找到/做/写更多,任何想法?

1 个答案:

答案 0 :(得分:0)

要实现您指定的确切功能,

def myprint(text):
    try: print text
    except: print ''

但是,你可能会做得更好。

BeautifulSoup为您提供unicode;特别是,如果页面的标题正确描述它,它会为您处理解码。你说你不关心编码 - 然而,如果你想要print标准输出的东西,你确实如此,而且你确实在尝试这样做。如果BS编码错误但您知道正确的编码,请使用

soup = BeautifulSoup(markup, from_encoding="iso-8859-15")

并从soup获取现在正确提供的unicode。 (如果您确实需要编码,例如打印,请相应地编辑您的Q!)