使用lxml.etree解析本地文件

dav*_*k13 5 python parsing lxml path elementtree

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

page = requests.get('url')
tree = html.fromstring(page.text)
Run Code Online (Sandbox Code Playgroud)

我尝试用 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)
Run Code Online (Sandbox Code Playgroud)

我的本地文件路径有问题吗?

我不断收到的错误是这样的:

文件“postings_up_updated.py”,第 26 行,在 etree.parse(page) 文件“lxml.etree.pyx”,第 3299 行,在 lxml.etree.parse (src/lxml/lxml.etree.c:72421) 文件“ parser.pxi”,第 1791 行,在 lxml.etree._parseDocument (src/lxml/lxml.etree.c:105883) 文件“parser.pxi”,第 1817 行,在 lxml.etree._parseDocumentFromURL (src/lxml/lxml. etree.c:106182) 文件“parser.pxi”,第 1721 行,在 lxml.etree._parseDocFromFile (src/lxml/lxml.etree.c:105181) 文件“parser.pxi”,第 1122 行,在 lxml.etree 中。 _BaseParser._parseDocFromFile (src/lxml/lxml.etree.c:100131) 文件“parser.pxi”,第 580 行,位于 lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:94254) 文件“解析器” .pxi”,第 690 行,lxml.etree._handleParseResult (src/lxml/lxml.etree.c:95690) 文件“parser.pxi”,第 620 行,lxml.etree._raiseParseError (src/lxml/lxml.etree) .c:94757) lxml.etree.XMLSyntaxError: 文档为空,第 1 行,第 1 列

mha*_*wke 2

错误消息表明该文件是空的,但是,我认为您更有可能尝试像文件一样解析目录。此代码产生与您所示相同的回溯:

from lxml import etree

etree.parse('/tmp')
Traceback (most recent call last):
.
.
lxml.etree.XMLSyntaxError: Document is empty, line 1, column 1
Run Code Online (Sandbox Code Playgroud)

如果“/Users/dbk13/Desktop/SEC/bullseye”中有子目录,则可能会发生这种情况,因为os.listdirs()返回的列表中将包含子目录。如果是这种情况,您可以尝试使用以下命令检查常规文件os.path.isfile()

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)
Run Code Online (Sandbox Code Playgroud)

另一点值得一提的是,您似乎正在尝试使用 XML 解析器来解析 HTML 文件。这不太可能成功,因为绝大多数 HTML 文件不是 XML,因此无法使用 XML 解析器进行可靠的解析。我会推荐lxml.html,但你似乎已经尝试过。另一种替代的 HTML 解析器是BeautifulSoup