美味的汤4无法正确打印。Python3

2024-10-03 15:34:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在学习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 &nbsp'
b'this is anotherone'

ascii编码的真实示例文本:

b"Announcementb'Firefox users may encounter browser warnings encountering SSL SHA-1 certificates"

注意公告是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

我宁愿在处理之前不更改完整的数据,因为它会打乱我的其他工作,我认为这是不必要的。你知道吗

美化不起作用。你知道吗

有什么建议吗?你知道吗


Tags: importbrowserchildssl编码urllibfirefoxusers
1条回答
网友
1楼 · 发布于 2024-10-03 15:34:36

首先,您将得到形式b'stuff'的输出,因为您正在调用.encode(),它返回一个bytes对象。如果要打印字符串以供阅读,请将它们保留为字符串!你知道吗

作为猜测,我假设您希望很好地打印HTML中的字符串,就像在浏览器中看到的一样。为此,您需要对HTML字符串编码进行解码,如this SO answer中所述,这对于Python3.5意味着:

import html
html.unescape(childtext)

除此之外,这将把HTML字符串中的任何 序列转换成'\xa0'字符,这些字符作为空格打印。但是,如果您想在这些字符上断行,尽管 字面意思是“不间断空格”,您必须在打印之前用实际空格替换这些字符,例如使用x.replace('\xa0', ' ')。你知道吗

相关问题 更多 >