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