Python 使用lxml.etree解析本地文件

Python 使用lxml.etree解析本地文件,python,parsing,path,lxml,elementtree,Python,Parsing,Path,Lxml,Elementtree,我为任何不清晰的地方提前道歉(我是编程新手)。我正在尝试用lxml.etree解析一组本地文件。我使用lxml(和xpath)编写了一个解析脚本,从SEC网页中查找相关数据并导出到.csv文件。该脚本适用于单个url,但我想将其推广到数千个html页面。我已经在本地下载了所有的html文件(我使用curl获取链接,wget下载)——但是我没有成功地替换我的解析器。有效的旧版本是: page = requests.get('url') tree = html.fromstring(page.tex

我为任何不清晰的地方提前道歉(我是编程新手)。我正在尝试用lxml.etree解析一组本地文件。我使用lxml(和xpath)编写了一个解析脚本,从SEC网页中查找相关数据并导出到.csv文件。该脚本适用于单个url,但我想将其推广到数千个html页面。我已经在本地下载了所有的html文件(我使用curl获取链接,wget下载)——但是我没有成功地替换我的解析器。有效的旧版本是:

page = requests.get('url')
tree = html.fromstring(page.text)
我尝试用etree.parse替换它,以便解析本地下载到“Bullseye”目录中的文件

path = "/Users/dbk13/Desktop/SEC/bullseye"
dirs = os.listdir( path )

for files in dirs: 
    page = os.path.join(path,files)
    etree.parse(page)
我的本地文件路径有问题吗

我经常遇到这样的错误:

文件“postings\u up\u updated.py”,第26行,在 在lxml.etree.parse(src/lxml/lxml.etree.c:72421)文件“parser.pxi”中的etree.parse(第页)文件“lxml.etree.pyx”,第3299行, 第1791行,在lxml.etree.文件(src/lxml/lxml.etree.c:105883)中 lxml.etree中的文件“parser.pxi”,第1817行。\u parseDocumentFromURL (src/lxml/lxml.etree.c:106182)文件“parser.pxi”,第1721行,在 lxml.etree._parseDocFromFile(src/lxml/lxml.etree.c:105181)文件 “parser.pxi”,第1122行,在lxml.etree.\u BaseParser.\u parseDocFromFile中 (src/lxml/lxml.etree.c:100131)文件“parser.pxi”,第580行,在 lxml.etree.\u ParserContext.\u handleParseResultDoc (src/lxml/lxml.etree.c:94254)文件“parser.pxi”,第690行,在 lxml.etree.\u handleParseResult(src/lxml/lxml.etree.c:95690)文件 “parser.pxi”,第620行,在lxml.etree中。\u raiseParserError (src/lxml/lxml.etree.c:94757)lxml.etree.XMLSyntaxError:文档是 空,第1行,第1列


错误消息表明该文件是空的,但是,我认为更可能的情况是您试图解析一个目录,就好像它是一个文件一样。此代码生成的回溯与您显示的相同:

from lxml import etree

etree.parse('/tmp')
Traceback (most recent call last):
.
.
lxml.etree.XMLSyntaxError: Document is empty, line 1, column 1
如果“/Users/dbk13/Desktop/SEC/bullseye”中存在子目录,则可能会发生这种情况,因为
os.listdirs()
将在返回的列表中包含子目录。如果是这种情况,您可以尝试使用以下方法检查常规文件:


另一点值得一提的是,您似乎正在尝试使用XML解析器解析HTML文件。这不太可能成功,因为绝大多数HTML文件不是XML,因此无法用XML解析器可靠地解析。我建议您使用
lxml.html
,但您似乎已经尝试过了。另一种可选的HTML解析器是。

空文件不是有效的XML文档!显然,在
/Users/dbk13/Desktop/SEC/bullseye
中有一个空文件。
import os

path = "/Users/dbk13/Desktop/SEC/bullseye"
dirs = os.listdir( path )

for filename in dirs:
    page = os.path.join(path, filename)
    if os.path.isfile(page):
        etree.parse(page)