繁体   English   中英

Python + BeautifulSoup +编码/解码网页

[英]Python + BeautifulSoup + Encode/Decode a web page

这是事实:

我想从网页上抓取特定文本。 此文本是一个价格: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”的新方法,该方法基本上可以完成我想要的操作,即,不带错误退出代码,而是继续打印”(无内容) 。 但是我无法找到/执行/编写更多内容,知道吗?

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

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

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

BeautifulSoup为您提供unicode; 特别是,如果页面的标题正确地描述了解码,它将为您处理解码。 您说您不关心编码-但是,如果您想将内容print到标准输出中,则可以这样做,而实际上您正在尝试这样做。 如果BS编码错误,但您知道正确的编码,请使用

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM