Selenium python3如何识别/处理从已删除网页中不需要的unicode?

Selenium python3如何识别/处理从已删除网页中不需要的unicode?,selenium,python-3.x,unicode,beautifulsoup,nltk,Selenium,Python 3.x,Unicode,Beautifulsoup,Nltk,我很难理解一些unicode,我是从用户通过web表单填充的网页中抓取的。最后,我想使用NLTK来标记和处理刮取的文本,但是不需要的字符正在妨碍我。我不知道如何移除这些 我首先使用selenium webdriver获取网页、提取文本内容并打印到文件: driver.get(URL) HTML = driver.page_source soup = bs(HTML) [s.extract() [s.extract() for s in soup(['style', 'script', '[doc

我很难理解一些unicode,我是从用户通过web表单填充的网页中抓取的。最后,我想使用NLTK来标记和处理刮取的文本,但是不需要的字符正在妨碍我。我不知道如何移除这些

我首先使用selenium webdriver获取网页、提取文本内容并打印到文件:

driver.get(URL)
HTML = driver.page_source
soup = bs(HTML) [s.extract()
[s.extract() for s in soup(['style', 'script', '[document]', 'head', 'title'])]
text = soup.getText()
outFile.write(text)
outFile.close()
建议使用s.extract comprehension,然后是soup.getText . 当我使用“cat”时,生成的文件看起来不错,但显示特殊字符,如项目符号、•、和™, 结果证明这是有问题的。毫无疑问还有其他的

首先,当我试图在打印到原始输出文件之前删除这些项目符号时,使用

clean = re.sub(r'•', r'', text)
outFile.write(clean)
我没有成功;子弹还在

第二,我读入了用NLTK进行后处理所生成的s。使用

raw=opentextFile.read tokens=nltk.word\u tokenizeraw

项目符号显示在原始字符串中,并在单词_标记化步骤后保留为不需要的标记。如果我打印令牌,这些代码点显示为'�\x80�'.

我试着用对表格的理解来去除子弹

words = [w.lower() for w in nltk.Text(tokens) \
         if w.lower() not in ['•', '®', '™']]
但这些特殊的角色依然存在

我怀疑转换成字节是解决这个问题的方法,但也许这方面的信息有些帮助。但是,请参见下面的解决方案/解决方法。当我将其编码为utf-8和拉丁语-1时,结果如下:

In [8]: '�\x80�'.encode('utf-8')
Out[8]: b'\xc3\xaf\xc2\xbf\xc2\xbd\xc2\x80\xc3\xaf\xc2\xbf\xc2\xbd'
In [9]: '�\x80�'.encode('latin-1')
Out[9]: b'\xef\xbf\xbd\x80\xef\xbf\xbd'
只需粘贴文本文件中的项目符号,我就可以得到以下字节表示:

In [10]: '•'.encode('utf-8')
Out[10]: b'\xc3\xa2\xc2\x80\xc2\xa2'
In [11]: '•'.encode('latin-1')
Out[11]: b'\xe2\x80\xa2'
Python的repr函数似乎没有提供任何清晰性:

In [35]: repr(tokens[303:309])
Out[35]: "['�\\x80�', 'Wealth', 'of', 'outdoor', 'recreational', 'activities']"

我已经读过几次了,但不知道如何理解这些组合信息。

在将原始文本标记为丑陋标记后,我使用以下方法删除了有问题的字符:

tokens = [t for t in uglyTokens if t.encode('utf-8') not in \
          [b'\xc3\xa2\xc2\x80\xc2\xa2', \
           b'\xc3\xa2\xc2\x80\xc2\x99']]
我通过列出uglytoken、识别不需要的示例,然后使用

In [21]: uglyTokens[2841].encode('utf-8')
Out[21]:b'\xc3\xa2\xc2\x80\xc2\xa2'
请注意,此案例与

'•'.encode('utf-8')

在原始帖子中。

如果您发布reprtext,或者至少是其中包含问题字符的部分,可能会提供一点额外的清晰度。这将告诉我们你们到底在处理什么字节或str。这个例子添加在原始帖子的底部。这真的很奇怪。我希望repr返回可打印字符的str,而不是带有�编码问题是Python的常见问题,尤其是在Windows上运行时。两个建议:1.首先尝试查看网页标题中字符集下是否有提及的编码,这将告诉您如何解码内容;如果您确定编码,请始终使用decode-例如,原始。decode'utf-8','ignore'-NB'-not ENcode而是decode。最后,如果您确定它是utf-8,并且希望处理那些易读的Unicode符号,最好尽可能使用unidecode模块将其转换为ASCII。必须帮助不要失去太多,如果刮非英语网页。@埃弗斯特如果这澄清了事情,我在linux下运行。我在原始网页上看不到编码信息。但如果用户从Word应用程序将内容粘贴到文本框中,这会有影响吗?我发现'str'对象没有'decode'属性,这让我想知道您是否将它们视为Python2.x字符串。。。我看看能不能用unidecode做点什么。