Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 1, 2019 18:53:55

Novichok
Зарегистрирован: 2019-04-01
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста с парсингом.

Всем привет, появилась задача распарсить большое колл-во xml файлов и данные залить в БД.
Проблема в том, что питон ругается TypeError: cannot parse from ‘list’.
Помогите пожалуйста.
Код:

 import os 
from lxml import etree
path = 'C:/Users/xxx/Desktop/python/python-parsing/data'
filename = os.listdir(path)
tree = etree.parse(filename)
test = tree.xpath('///p[@name="bName"]')
print ("".join(test))

Офлайн

#2 Апрель 2, 2019 01:14:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10024
Репутация: +  857  -
Профиль   Отправить e-mail  

Помогите пожалуйста с парсингом.

Неправильно получаешь путь к файлу. Сначала введи его напрямую, всё отладь на одном файле (сделай функцию обработки одного файла, которая принимает путь к файлу и возвращает результат его обработки), а потом уже делай получение файлов по очереди.



Офлайн

#3 Апрель 2, 2019 07:19:26

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Помогите пожалуйста с парсингом.

Novichok
filename = os.listdir(path)
1. В filename получаешь список файлов без путей
2. etree.parse(filename) принимает имя файла, строку, а не список из строк. Из-за этого ругается TypeError: cannot parse from ‘list’.
3. etree.parse лучше всего скармливать полное имя файла, с путями, а не не просто имя. Для этого можно воспользоваться, например glob.glob()
 import glob
for filenm in glob.glob('C:/Users/xxx/Desktop/python/python-parsing/data/*.xml'):
    # glob.glob выдаст полные имена только *.xml из указанной папки.
    # Сюда вызов функции парсинга, получение от этой функции данных и запись в БД
В цикл надо будет положить вызов функции, которую нужно сделать как советует py.user.next

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version