Необработанный HTML против DOM-скриптов в Python с использованием механизации и красивого супа - PullRequest
3 голосов
/ 04 марта 2012

Я пытаюсь написать программу, которая, например, соскребет максимальную цену с этой веб-страницы:

http://www.kayak.com/#/flights/JFK-PAR/2012-06-01/2012-07-01/1adults

Во-первых, я легко могу найтиHTML, выполнив следующее:

from urllib import urlopen 
from BeautifulSoup import BeautifulSoup
import mechanize

webpage = 'http://www.kayak.com/#/flights/JFK-PAR/2012-06-01/2012-07-01/1adults'
br = mechanize.Browser()
data = br.open(webpage).get_data()

soup = BeautifulSoup(data)
print soup

Однако необработанный HTML не содержит цены.Браузер делает ... это вещь (пояснение здесь может помочь мне также) ... и получает цену из другого места, пока он создает дерево DOM.

Я был убежден, что механизация будет действовать так же, как мойбраузер и вернуть дерево DOM, в которое я также верю, это то, что я вижу, например, когда смотрю на страницу Chrome Developer Tools (если я ошибаюсь, как мне получить что-тоинформация о цене хранится в?) Есть ли что-то, что я должен сказать механизировать, чтобы увидеть дерево DOM?

Как только я смогу вставить дерево DOM в python, все остальное, что мне нужно сделать, должносовсем несложноСпасибо!

Ответы [ 2 ]

3 голосов
/ 04 марта 2012

Mechanize и Beautiful soup - непревзойденные инструменты веб-поиска в python.

Но вам нужно понять, для чего это нужно:

Mechanize: имитирует функциональность браузерана веб-странице.

BeautifulSoup: синтаксический анализатор HTML, работает хорошо, даже если HTML плохо сформирован.

Похоже, ваша проблема javascript.Цена заполняется с помощью вызова ajax, используя javascript.Mechanize, однако, не поддерживает javascript, поэтому любой контент, полученный из javascript, останется невидимым для механизации.

Взгляните на это: http://github.com/davisp/python-spidermonkey/tree/master

Это делает обертку дляМеханизированный и красивый суп с js исполнением.

0 голосов
/ 08 декабря 2017

Отвечая на мой собственный вопрос, потому что за годы, прошедшие с тех пор, как я задал этот вопрос, я многому научился.Сегодня я бы использовал Selenium Webdriver для этой работы.Selenium - это именно тот инструмент, который я искал еще в 2012 году для этого типа проекта по очистке веб-страниц.

https://www.seleniumhq.org/download/

http://chromedriver.chromium.org/

...