【发布时间】:2018-05-08 05:28:53
【问题描述】:
所以我正在使用 Python 3.6.something 并且我一直在尝试找出这个完全直观的 Unicode/ASCII 噩梦。我正在尝试将网页中的文本保存到文件中,然后使用正则表达式对其进行解析。
当我尝试读取文件并解析它时,我需要找到模式:
Note 1 –
这显然不同于:
Note 1 -
我不断收到错误:
SyntaxError: Non-UTF-8 code starting with '\x96' in file C:\Users\Steve\eclipse-workspace\scraper\BeautifulSoupTest.py on line 28, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
关于我正在尝试做的正则表达式。这真的很奇怪,因为 '\x96' 是我在网上看到的 Unicode 字符。 Unicode 或 ASCII 发生了一些事情,我不知道它是什么。我也不能用 replace() 删除 '\x96' 字符,它给出了同样的错误。有人可以帮忙吗?
from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
def downloadCleanText(url, year):
urlObject = urlopen(url)
rawHTML = urlObject.read()
cleanedText = BeautifulSoup(rawHTML, 'html.parser').body.getText()
outputFile = open(str(year) + '.txt', 'w')
outputFile.write(cleanedText)
outputFile.close()
def pullNote1(year):
inputFile = open(str(year) + '.txt', 'r')
inData = inputFile.read()
outData = re.findall('Note 1 –(.*?)Note 2 ', inData)
print(outData)
inputFile.close()
downloadCleanText('https://www.sec.gov/Archives/edgar/data/320193/000032019317000070/a10-k20179302017.htm#s2A826F0B8B5755F787D29B5B8C8C7D16', 2000)
pullNote1(2000)
【问题讨论】:
-
异常信息非常清楚。您是否按照 URL 并将源代码编码声明添加到您的代码中?
-
\x96不是 ASCII 字符。 ASCII 从 0x00 到 0x7F。 -
“URL”是错误消息中的那个; python.org/dev/peps/pep-0263
-
您的正则表达式中有一个U+2013 EN DASH 字符,并将您的文件编码为Windows Codepage 1252,其中EN DASH 编码为0x96。您还使用了 字节字符串,而不是 Unicode 字符串。除非您的输入数据实际上也被编码为 CP1252,否则您的正则表达式将不匹配。
标签: python unicode encoding utf-8