2017-01-23 1 views
0

Я пытаюсь использовать Pyside для рендеринга HTML-кода, созданного с помощью веб-страницы, а затем использовать этот html для webscraping. Я начал использовать this quick example, но результаты очень несовместимы.Почему QtWebkit для python не загружает большинство веб-страниц?

Проблема в том, что некоторые страницы работают отлично, но другие весят бесконечно. И я не говорю о том, чтобы уйти через несколько секунд, я позволил своему сценарию работать в течение нескольких часов в разное время, и никаких успехов не предпринимается.

Мой текущий код выглядит следующим образом:

import sys 
from PySide.QtCore import * 
from PySide.QtGui import * 
from PySide.QtWebKit import * 

class Render(QWebPage): 
    def __init__(self, url): 
     self.app = QApplication(sys.argv) 
     QWebPage.__init__(self) 
     self.loadFinished[bool].connect(self.end) 
     self.mainFrame().load(url) 

     self.app.exec_() 

    def end(self, result): 
     print 'end' 
     self.finalFrame = self.mainFrame() 
     self.app.quit() 

r = Render('http://pyside.github.io/docs/pyside/PySide/QtWebKit/index.html') 
print r.finalFrame.toHtml().encode('ascii', 'ignore') 
print 'done' 

Эта страница работает, как и страницы, указанные в this answer, но большинство других ('https://www.google.ca/', 'https://webscraping.com') нет.

Как загрузить эти страницы?

+0

Проблема должна быть в конце, потому что у меня нет проблем с загрузкой каких-либо из этих веб-страниц. Таким образом, это действительно просто дубликат вашего другого вопроса по этому вопросу, если у вас нет какой-то важной новой информации для добавления. Попробовали загрузить эти URL-адреса с помощью другого метода, например [urllib2] (https://docs.python.org/2/library/urllib2.html#module-urllib2)? – ekhumoro

+0

Да, я могу загрузить их с помощью urllib2, и он работает правильно. В адресах, о которых я упоминал, никогда не загружается или занимает дольше 6 часов (пока). Из того, что я читаю, возможно, что это может быть ошибка SSL, но ни одна из предложенных исправлений, которую я нашел, не может быть реализована по различным причинам (я не использую сокеты, модуль QSslConfiguration не может быть импортирован и т. Д.) – GreySage

+0

Can укажите, какие версии PySide и Qt4 вы используете, и на какой платформе? Кроме того, убедитесь, что вы проверяете код на стандартной консоли, а не на IDE или отладчике. – ekhumoro

ответ

0

Проблема связана с SSL. Я до сих пор не уверен, что именно эта проблема была, но она была зафиксирована:

  1. деинсталлировать версию Anaconda (1.2.1) из PySide и установить его с пип (1.2.4). Похоже, что сборка Anaconda принципиально нарушена, поскольку различные атрибуты классов не существуют, когда они должны, и есть неразрешимые круговые зависимости.

  2. downloading openSSL (lite) и размещение 2 dlls (ssleay.dll и libeay.dll) в каталоге, в котором запущена программа, и в среде/Library/bin. Либо один из них не работал. Кредит для этой части составляет this question.

Смежные вопросы