Ветряная мельница не получает весь контент HTML - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь очистить данные с веб-страницы с помощью фреймворка Python Windmill.Однако у меня проблемы с получением содержимого таблицы HTML со страницы.Таблица сгенерирована Javascript - поэтому я использую Windmill для захвата контента.Однако содержимое не возвращает таблицу - что вызывает ошибки, если я использую BeautifulSoup, чтобы попытаться проанализировать содержимое.

from windmill.authoring import WindmillTestClient
from BeautifulSoup import BeautifulSoup

from copy import copy
import re

def get_massage():
    my_massage = copy(BeautifulSoup.MARKUP_MASSAGE)
    my_massage.append((re.compile(u"document.write(.+);"), lambda match: ""))
    my_massage.append((re.compile(u'alt=".+">'), lambda match: ">"))
    return my_massage

def test_scrape():
    my_massage = get_massage()
    client = WindmillTestClient(__name__)
    client.open(url='http://marinetraffic.com/ais/datasheet.aspx?MMSI=636092060&TIMESTAMP=2&menuid=&datasource=POS&app=&mode=&B1=Search')
    client.waits.forPageLoad(timeout='60000')
    html = client.commands.getPageText()
    assert html['status']
    assert html['result']
    soup=BeautifulSoup(html['result'],markupMassage=my_massage)
    print soup.prettify()

Когда вы смотрите на вывод из супа, таблица отсутствует, но она отображается, если вы посмотрите на содержимое веб-страницы с чем-то вроде firebug.В целом, я пытаюсь захватить содержимое таблицы и разобрать его в какую-то структуру данных для дальнейшей обработки.Любая помощь очень ценится!

1 Ответ

0 голосов
/ 11 марта 2012

Проблема в том, что используемый вами разметочный массаж не работает нормально для страницы, над которой вы работаете, то есть он удаляет больше HTML-кода, чем должен.

Чтобы проверить, BeautifulSoup мог бы проанализировать нужную вам веб-страницу, я только что попробовал это:

soup = BeautifulSoup(html['result'])
soup.table

, и все заработало нормально, так что, похоже, в этом случае не требуется никакого разметочного массажа.

...