Скачать HTML URL с Python - но с включенным JavaScript - PullRequest
0 голосов
/ 09 июля 2011

Я пытаюсь загрузить эту страницу , чтобы можно было просмотреть результаты поиска. Однако, когда я загружаю страницу и пытаюсь обработать ее с BeautifulSoup, я обнаруживаю, что части страницы (например, результаты поиска) не включены, так как сайт обнаружил, что javascript не включен.

Есть ли способ загрузить HTML-код URL с включенным JavaScript в Python?

Ответы [ 4 ]

2 голосов
/ 09 июля 2011

Я хотел бы изучить использование модуля QtWebKit в библиотеке PyQt4. Модуль позволит запускать код JS на странице, и как только это будет сделано, вы можете сохранить HTML-код, используя стандартные методы, которые я считаю.

В противном случае Selenium - это путь. Он позволяет вам управлять веб-браузером из скрипта Python, чтобы открыть страницу, а затем извлечь все содержимое DOM.

2 голосов
/ 09 июля 2011

@ kstruct: Мой предпочтительный способ, вместо написания полноценного браузера с QtWebKit и PyQt4, это использовать уже написанный. Это проект PhantomJS (C ++) или PyPhantomJS (Python). По сути, Python - это QtWebKit и Python.

Они оба безголовые браузеры, которыми вы можете управлять напрямую из JavaScript. Версия Python имеет систему плагинов, которая позволяет вам расширять ядро, чтобы позволить дополнительные функции, если вам нужно.

Вот пример сценария для PyPhantomJS (с плагином saveToFile )

// create new webpage
var page = new WebPage();

// open page, set callback
page.open('url', function(status) {
    // exit if page couldn't load
    if (status !== 'success') {
        console.log('FAIL to load!');
        phantom.exit(1);
    }

    // save page content to file
    phantom.saveToFile(page.content, 'myfile.txt');
    phantom.exit();
});

Полезные ссылки:
Справочник по API | Как писать плагины

0 голосов
/ 10 июля 2011

Вы можете использовать htql на http://htql.net.

import htql;
browser=htql.Browser(2);
page, url=browser.goUrl('http://docs.python.org/search.html?q=chdir&check_keywords=yes&area=default');
import time; 
time.sleep(2);
page, url=browser.getUpdatedPage();

Кстати, вам нужно установить IRobot на http://irobotsoft.com/

0 голосов
/ 09 июля 2011

Как только вы захотите включить JavaScript, все, что вы запрашиваете, будет очень близко к браузеру.Вы можете использовать jython, а затем использовать HtmlUnit, который является браузером без поддержки Java.Это довольно быстро, но не очень стабильно (потому что он имитирует браузер, а не браузер).Я думаю, что самый быстрый и простой способ - использовать селен (ide или желательно rc).Selenium дает вам возможность управлять вашим любимым браузером (FF, IE, chrome, ..).Хотя он предназначен для тестирования целей, он, вероятно, будет работать для вас.Это стабильно и довольно быстро (я думаю, что это даже быстрее, чем HtmlUnit).

...