我提前道歉,因为任何不清晰(我是编程新手)。我试图用lxml.etree解析一组本地文件。我使用lxml(和xpath)编写了一个解析脚本,该脚本从SEC网页中查找相关数据并导出到.csv文件。该脚本适用于单个URL,但我想概括为数千个html页面。我已经获得了本地下载的所有html文件(我使用curl获取链接,可以下载) - 但我没有取代我的解析器取得任何成功。有效的旧版本是:
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)
我的本地文件路径是否存在问题?
我不断得到的错误是:
文件" postss_up_updated.py",第26行,in etree.parse(page)File" lxml.etree.pyx",line 3299,in lxml.etree.parse(src / lxml / lxml.etree.c:72421)File" parser.pxi& #34 ;, 第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行,in 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)文件" parser.pxi",第690行,in 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列
答案 0 :(得分:2)
错误消息表明该文件为空,但是,我认为您更有可能尝试解析目录,就好像它是一个文件一样。此代码生成与您显示的相同的回溯:
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()
将在返回的列表中包含子目录。如果是这种情况,您可以尝试使用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)
值得做的另一点是,您似乎试图使用XML解析器解析HTML文件。这不可能成功,因为绝大多数HTML文件不是XML,因此无法使用XML解析器可靠地解析。我建议lxml.html
,但你似乎已经尝试过了。另一种替代HTML解析器是BeautifulSoup。