Соскоб экрана с Python - PullRequest
       24

Соскоб экрана с Python

14 голосов
/ 03 февраля 2010

Имеются ли в Python библиотеки очистки экрана, которые поддерживают JavaScript?

Я использовал pycurl для простых запросов HTML и Java HtmlUnit для более сложных запросов.требуется поддержка JavaScript.

В идеале я хотел бы иметь возможность делать все из Python, но я не встречал библиотек, которые позволили бы мне это делать.Они существуют?

Ответы [ 7 ]

12 голосов
/ 07 февраля 2010

При работе со статическим HTML существует много опций, которые охватывают другие ответы. Однако, если вам нужна поддержка JavaScript и вы хотите остаться в Python, я рекомендую использовать webkit для рендеринга веб-страницы (включая JavaScript), а затем изучить полученный HTML-код. Например:

import sys
import signal
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import QWebPage

class Render(QWebPage):
    def __init__(self, url):
        self.app = QApplication(sys.argv)
        QWebPage.__init__(self)
        self.html = None
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        self.connect(self, SIGNAL('loadFinished(bool)'), self._finished_loading)
        self.mainFrame().load(QUrl(url))
        self.app.exec_()

    def _finished_loading(self, result):
        self.html = self.mainFrame().toHtml()
        self.app.quit()


if __name__ == '__main__':
    try:
        url = sys.argv[1]
    except IndexError:
        print 'Usage: %s url' % sys.argv[0]
    else:
        javascript_html = Render(url).html
11 голосов
/ 03 февраля 2010

Красивый суп все еще, вероятно, ваш лучший выбор.

Если вам нужна «поддержка JavaScript» для перехвата Ajax-запросов, вам следует также использовать некоторый тип захвата (например, YATT ), чтобы отслеживать, что это за запросы, а затем эмулировать / анализировать их. .

Если вам нужна «поддержка JavaScript» для того, чтобы увидеть конечный результат страницы со статическим JavaScript, то мой первый выбор - попытаться выяснить, что JavaScript делает в случае -case base (например, если JavaScript делает что-то на основе некоторого Xml, просто вместо этого просто анализируйте Xml)

Если вы действительно хотите «поддержку JavaScript» (как вы хотите увидеть, что такое html после запуска скриптов на странице), то я думаю, что вам, вероятно, потребуется создать экземпляр какого-либо элемента управления браузером, а затем прочитать Получив html / dom, верните его из элемента управления браузера после завершения загрузки и, как правило, анализируйте его с помощью красивого супа. Это было бы моим последним средством, однако.

4 голосов
/ 03 февраля 2010

Scrapy - это быстрый высокоуровневый фреймворк для сканирования экрана и веб-сканирования, используемый для сканирования веб-сайтов и извлечения структурированных данных из их страниц. Он может использоваться для самых разных целей, от интеллектуального анализа данных до мониторинга и автоматического тестирования.

Вот, пожалуйста: http://scrapy.org/

3 голосов
/ 16 сентября 2011

Селен возможно? Это позволяет вам автоматизировать реальный браузер (Firefox, IE, Safari), используя python (среди других языков). Он предназначен для тестирования веб-сайтов, но, по-видимому, его также можно использовать для очистки. (отказ от ответственности: никогда не использовал его сам)

1 голос
/ 18 апреля 2013

Библиотека Webscraping превращает PyQt4 WebView в простой и удобный API.

Вот простой пример загрузки веб-страницы, отображаемой с помощью WebKit, и извлечения заголовкаэлемент, использующий XPath (взят из приведенного выше URL):

from webscraping import download, xpath
D = download.Download()
# download and cache the Google Code webpage
html = D.get('http://code.google.com/p/webscraping')
# use xpath to extract the project title
print xpath.get(html, '//div[@id="pname"]/a/span')
0 голосов
/ 03 февраля 2010

вы можете попробовать spidermonkey ?

Этот модуль Python позволяет реализовать Javascript? классы, объекты и функции в Python, а также оценка и вызов сценариев и функций Javascript. Это занимает много из модуля Perl Javascript Клэса Джейкобсена, который в свою очередь основан на привязке PerlConnect в Mozilla.

0 голосов
/ 03 февраля 2010

Я ничего не нашел для этого. Я использую комбинацию Beautifulsoup и пользовательских процедур ...

...