Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 29, 2016 19:00:55

ss100s
Зарегистрирован: 2016-02-29
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Есть html такого типа:

<html>
<head>
<body>
var unit = new Array();
unit[0] = '642a6|7af7a569|arr1|543438';
unit[1] = 'f643d|183e97e6|arrnew|423324';
unit[2] = 'da0fa|e004bd72|newarr|423432';
......
unit[n] = 'da0fa|e004bd72|rrrrr|243232';
</body>
</html>
Необходимо собрать значения:
543438,423324,423432,.....,243232

Офлайн

#2 Фев. 29, 2016 20:26:59

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

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

a="...."
print(re.findall(r"\|(\d+)';",a))



Офлайн

#3 Март 1, 2016 02:25:34

ss100s
Зарегистрирован: 2016-02-29
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Да, отработало.
А реально загнать

642a6|7af7a569|arr1|543438
f643d|183e97e6|arrnew|423324
da0fa|e004bd72|newarr|423432
......
da0fa|e004bd72|rrrrr|243232
в массив?

Офлайн

#4 Март 1, 2016 06:54:57

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

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

ss100s
А реально загнать в массив?
Да.

p.s.
:) Это вопрос типа а слабо написать программу за меня? Ну по крайней мере так выглядит.
1. Попробуйте написать самостоятельно. Если что не получится вам поможем. Приведите ваши попытки. Объясните что не так.
2. Ответ на ваш вопрос очевиден, думаю для вас тоже. Желательно более понятно формулировать вопросы.
3. Решение многих задач сильно зависит от контекста. Если у вас высокие требования к надежности разбора . Например недопустимы отказы алгоритма и сложный вид входных данных, то тогда регулярные выражения лучше не использовать, можно взять pyparsing. Для таблиц,чем ваши данные и являются, можно использовать модули csv numpy или pandas и т.п. Что выбрать зависит от того что вы собираетесь потом делать. Если оно обернуто в html на первом этапе можно выкусить данные пакетам предназначенными для парсинга html. например lxml. Но это работает если данных относительно много но не слишком много вцелм.
Ваши данные валидный JS код. Почему бы вам не скинуть из из JS в формате JSON?
r"\(|(\d+))+';"



Отредактировано doza_and (Март 1, 2016 06:59:07)

Офлайн

#5 Март 2, 2016 01:02:17

ss100s
Зарегистрирован: 2016-02-29
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Не понятно как вырезать то, что можно скинуть в JSON.
Пытаюсь получить строки вида

'642a6|7af7a569|arr1|543438'
Таким образом:
print(re.findall(r"unit[\d+](.*?)';",a))
Это не получилось.

Офлайн

#6 Март 2, 2016 11:41:51

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

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

Это с числами в квадратных скобках

>>> import re
>>> 
>>> text = """
... <html>
... <head>
... <body>
... var unit = new Array();
... unit[0] = '642a6|7af7a569|arr1|543438';
... unit[1] = 'f643d|183e97e6|arrnew|423324';
... unit[2] = 'da0fa|e004bd72|newarr|423432';
... ......
... unit[n] = 'da0fa|e004bd72|rrrrr|243232';
... </body>
... </html>
... """
>>> 
>>> re.findall(r"unit\[\d+\] = '([^']+)'", text)
['642a6|7af7a569|arr1|543438', 'f643d|183e97e6|arrnew|423324', 'da0fa|e004bd72|newarr|423432']
>>>

Это с переменными в квадратных скобках
>>> import re
>>> 
>>> text = """
... <html>
... <head>
... <body>
... var unit = new Array();
... unit[0] = '642a6|7af7a569|arr1|543438';
... unit[1] = 'f643d|183e97e6|arrnew|423324';
... unit[2] = 'da0fa|e004bd72|newarr|423432';
... ......
... unit[n] = 'da0fa|e004bd72|rrrrr|243232';
... </body>
... </html>
... """
>>> 
>>> re.findall(r"unit\[.+?\] = '([^']+)'", text)
['642a6|7af7a569|arr1|543438', 'f643d|183e97e6|arrnew|423324', 'da0fa|e004bd72|newarr|423432', 'da0fa|e004bd72|rrrrr|243232']
>>>



Отредактировано py.user.next (Март 2, 2016 11:44:28)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version