使用lxml.etree解析本地文件

时间:2015-02-07 10:26:59

标签: python parsing path lxml elementtree

我提前道歉,因为任何不清晰(我是编程新手)。我试图用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列

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