Извинявам се предварително за всяка липса на яснота(Аз съм нов в програмирането). Опитвам се да анализирам набор от локални файлове с 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.