以下是事实:
我想从网页上抓取特定文字。这个文字是一个价格: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”的新方法,它基本上可以做我想要的,即不是通过错误退出代码,而是继续打印''(没有)相反。但我无法找到/做/写更多,任何想法?
答案 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!)