2016-04-11 2 views
1

У меня возникла проблема с попыткой сканирования страниц, обработанных JavaScript.Python Crawling Pastebin (JavaScript rendered webpages)

Я использую питон-qt4 модуль, после этого урока: https://impythonist.wordpress.com/2015/01/06/ultimate-guide-for-scraping-javascript-rendered-web-pages/

В учебнике, все прекрасно работает с примером страницы: http://pycoders.com/archive

Но я пытаюсь это с Pastebin, с этим URL:

http://pastebin.com/search?q=ssh

То, что я пытаюсь, чтобы получить все ссылки, чтобы нажимать на них, а также быть в состоянии следовать страницы (я не знаю, что я пока еще, возможно, Scrapy, но я хочу взглянуть на другие варианты).

Проблема заключается в том, что я не в состоянии извлечь ссылки, это мой код:

import sys 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
from PyQt4.QtWebKit import * 
from lxml import html 

#Take this class for granted.Just use result of rendering. 
class Render(QWebPage): 
    def __init__(self, url): 
    self.app = QApplication(sys.argv) 
    QWebPage.__init__(self) 
    self.loadFinished.connect(self._loadFinished) 
    self.mainFrame().load(QUrl(url)) 
    self.app.exec_() 

    def _loadFinished(self, result): 
    self.frame = self.mainFrame() 
    self.app.quit() 

url = 'http://pastebin.com/search?q=ssh' 
r = Render(url) 
result = r.frame.toHtml() 
formatted_result = str(result.toAscii()) 
tree = html.fromstring(formatted_result) 
archive_links = tree.xpath('//a[@class="gs-title"]/@data-ctoring') 
for i in archive_links: 
    print i 

Результат: я не получаю ничего.

ответ

2

В идеале вы должны изучить API Pastebin - вот Python wrapper.

Альтернативный подход предполагает автоматизацию браузера через selenium. Рабочий код, который печатает ссылки на результат поиска:

+0

Это решение довольно хорошо. Как я могу перейти на все 10 страниц и извлечь URL-адреса? В принципе, как щелкнуть вещи. Большое спасибо – aDoN

+0

Кстати, я не уверен, что делает эта строка: 'wait.until (EC.visibility_of_element_located ((By.CSS_SELECTOR, .gsc-result-info"))) ' – aDoN

+0

@aDoN считают создание отдельный вопрос для последующей проблемы. Эта строка помогает подождать, пока появится определенный элемент - см. Http://selenium-python.readthedocs.org/waits.html#explicit-waits. Благодарю. – alecxe