Разобрать HTML с AJAX JSON внутри - PullRequest
0 голосов
/ 26 августа 2010

У меня есть такие файлы для анализа (из списков) с Python:

some HTML and JS here...
SomeValue = 
{
     'calendar': [
     {       's0Date': new Date(2010, 9, 12),
             'values': [
                     { 's1Date': new Date(2010, 9, 17), 'price': 9900 },
                     { 's1Date': new Date(2010, 9, 18), 'price': 9900 },
                     { 's1Date': new Date(2010, 9, 19), 'price': 9900 },
                     { 's1Date': new Date(2010, 9, 20), 'price': 9900 },
                     { 's1Date': new Date(2010, 9, 21), 'price': 9900 },
                     { 's1Date': new Date(2010, 9, 22), 'price': 9900 },
                     { 's1Date': new Date(2010, 9, 23), 'price': 9900 }]
     },
     'data': [{
     index: 0,
     serviceClass: 'Economy',
     prices: [9900, 320.43, 253.27],
     eTicketing: true,
     segments: [{
             indexSegment: 0,
             stopsCount: 1,
             flights: [{
                     index: 0,

... and a lot of nested data and again HTML and JS...

Мне нужно проанализировать его и извлечь все данные JSON.Теперь я использую регулярное выражение с очисткой всех функций '\ n' и '\ t' и eval () для преобразования его в словарь Python. Мне действительно не нравится это решение, особенно eval ().Но я посмотрел на BeautifulSoup и lxml и не нашел того, что поможет разобрать его.
Можете ли вы предложить что-то лучше, чем regex и eval () для этой задачи?
Пример страницы: http://codepaste.ru/3830/

1 Ответ

5 голосов
/ 26 августа 2010

aarrghhh нет регулярных выражений не использовать регулярных выражений нет регулярных выражений нет нет нет nooooooo


Используйте модуль json для обработки данных JSON:

import json
json.loads( <string> )

Используйте BeautifulSoup или lxml для обработки анализа html-страницы:

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup( <string> )

Если вам нужна конкретная помощь, вам необходимо предоставить конкретные данные, например, класс тегов, в которые заключены эти данные. Например, вы можете soup.findAll теги сценария, затем обрезать несколько строк, чтобы добраться до JSON, и затем передать их в json.loads.

...