我有一个本地html文件,我想读取并提取源代码中的urls。然而,我的正则表达式总是返回空的,所以我尝试打印出源代码,并注意到所有字符都是相互隔开的。你知道原因是什么吗?
下面是我读取文件和正则表达式的代码:
import re
file=open("C:/Documents/name.html",'r')
content=file.read()
match = re.findall(r'<a href="(.*?)".*>(.*)</a>', content)
print(match)
当我尝试打印内容时,我得到了:
< h t m l x m l n s : v = " u r n : s c h e m a s ...
编辑:多亏了abernert,这是一个编码问题,更正后的代码将是:
import re
import codecs
file=codecs.open("C:/Users/140263/Documents/name.html",,encoding='utf-16-le')
content=file.read()
match = re.findall(r'<a href="(.*?)".*>(.*)</a>', content)
print(match)
发布于 2018-06-07 08:56:33
问题是您的文件是以UTF-16-LE编码的,但是您读取它时采用的是默认编码,而不是UTF-16-LE。
许多Windows软件使用UTF-16-LE作为文本文件的默认编码-这很烦人,但没有办法。
UTF-16-LE将大多数字符存储为两个字节。对于像<
和a
这样的ASCII码字符,这两个字节是ASCII码字节后跟一个空字节。
因此,如果您将UTF-16-LE读取为ASCII,那么您将得到字符,字符之间有空字节。
通常,您可以通过打印字符串的repr
来诊断此问题,而不是打印字符串本身,而不是这样:
< h t m l … >
…你会得到这个:
'<h\0t\0m\0l\0 … >\0'
修复方法是使用正确的编码读取文件:
file = open("C:/Documents/name.html", 'r', encoding='utf-16-le')
https://stackoverflow.com/questions/50731359
复制相似问题