2015-02-07 63 views
2

因为缺乏清晰度(我是编程新手),我很抱歉。我试图用lxml.etree解析一组本地文件。我使用lxml(和xpath)编写了一个解析脚本,该脚本从SEC网页中查找相关数据并导出到.csv文件。该脚本适用于单个url,但我想推广到数千个html页面。我已经获得了本地下载的所有html文件(我使用curl获取链接,wget下载) - 但是我没有取代任何解析器的成功。该工作的老版本是:用lxml.etree解析本地文件

page = requests.get('url') 
tree = html.fromstring(page.text) 

我试着调用etree.parse来取代它,这样我在目录中“靶心”下载到本地解析文件

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

for files in dirs: 
    page = os.path.join(path,files) 
    etree.parse(page) 

是否有问题与我的路径本地文件?

我不断收到的错误是一样的东西:

File "postings_up_updated.py", line 26, in etree.parse(page) File "lxml.etree.pyx", line 3299, in lxml.etree.parse (src/lxml/lxml.etree.c:72421) File "parser.pxi", line 1791, in lxml.etree._parseDocument (src/lxml/lxml.etree.c:105883) File "parser.pxi", line 1817, in lxml.etree._parseDocumentFromURL (src/lxml/lxml.etree.c:106182) File "parser.pxi", line 1721, in lxml.etree._parseDocFromFile (src/lxml/lxml.etree.c:105181) File "parser.pxi", line 1122, in lxml.etree._BaseParser._parseDocFromFile (src/lxml/lxml.etree.c:100131) File "parser.pxi", line 580, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:94254) File "parser.pxi", line 690, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:95690) File "parser.pxi", line 620, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:94757) lxml.etree.XMLSyntaxError: Document is empty, line 1, column 1

+0

空文件不是有效的XML文档!显然,在'/ Users/dbk13/Desktop/SEC/bullseye'中有一个空文件。 – 2015-02-07 10:39:52

回答

2

错误消息表明,该文件是空的,但是,我认为它更可能是你正在试图解析一个目录,就好像是一个文件。此代码生成,你已经证明了相同的回溯:

from lxml import etree 

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

是否有“/用户/ dbk13 /桌面/秒/靶心”子目录这可能发生,因为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