/ / Разработване на локални файлове с lxml.etree - python, parsing, path, lxml, elementtree

Разработване на локални файлове с lxml.etree - python, parsing, path, lxml, elementtree

Извинявам се предварително за всяка липса на яснота(Аз съм нов в програмирането). Опитвам се да анализирам набор от локални файлове с lxml.etree. Написах скрипт за анализ, като използвах lxml (и xpath), който намира подходящи данни от уеб страница на SEC и изнася за .csv файл. Този скрипт работи за един URL адрес, но искам да обобщя хиляди HTML страници. Получих всички html файлове, които се изтеглиха локално (използвах къдриците, за да получа връзките, да изтегля), но не съм имал успех при замяната на моя анализатор. Старата версия, която работи, беше:

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_up_updated.py", ред 26, в etree.файл (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) Файл "parser.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

Отговори:

2 за отговор № 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() ще включва поддиректории в върнатия списък. Ако това е така, можете да опитате да проверите за използване на обикновени файлове 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)

Друга по-важна точка е, че изглеждате такада се опитвате да анализирате HTML файлове с помощта на XML анализатор. Това не е вероятно да бъде успешно, защото по-голямата част от HTML файловете не са XML и следователно не могат да бъдат анализирани надеждно с XML анализатор. Аз бих препоръчал lxml.html но вече изглежда, че сте опитали това. Друг алтернативен HTML анализатор е BeautifulSoup.