【发布时间】:2016-04-27 00:21:20
【问题描述】:
我目前正在学习 Python3,我正在为一些数据抓取一个站点,这工作正常,但是在打印出 p 标签时,我无法让它按我的预期工作。
import urllib
import lxml
from urllib import request
from bs4 import BeautifulSoup
data = urllib.request.urlopen('www.site.com').read()
soup = BeautifulSoup(data, 'lxml')
stat = soup.find('div', {'style' : 'padding-left: 10px';})
dialog = stat.findChildren('p')
for child in dialog:
childtext = child.get_text()
#have tried child.string aswell (exactly the same result)
childlist.append(childtext.encode('utf-8', 'ignore')
#Have tried with str(childtext.encode('utf-8', 'ignore'))
print (childlist)
一切正常,但打印是“字节”
b'This is a ptag.string'
b'\xc2\xa0 (probably  '
b'this is anotherone'
ascii 编码的真实示例文本:
b"Announcementb'Firefox users may encounter browser warnings encountering SSL SHA-1 certificates"
请注意,Announcement 是 p,其余的是 p 标签下的“strong”。
使用 utf-8 编码的相同样本
b"Announcement\xc2\xa0\xe2\x80\x93\xc2\xa0b'Firefox users may encounter browser warnings encountering SSL SHA-1 "
我希望得到:
"Announcement"
(newline / new item in list)
"Firefox users may encounter browser warnings encountering SSL SHA-1 certificates"
如您所见,不正确的字符在“ascii”中被删除,但有些是  ,它破坏了一些换行符,我还没有弄清楚如何正确打印,而且 b 仍然在那里!
我真的不知道如何删除 b 并正确编码或解码。我已经尝试了所有可以搜索到的“解决方案”。
HTML 内容 = utf-8
我最不想在处理之前更改完整的数据,因为它会扰乱我的其他工作,我认为没有必要。
美化不起作用。
有什么建议吗?
【问题讨论】:
标签: python beautifulsoup python-3.5 bs4