2010-10-13 67 views
2

此處的免責聲明:我真的不是程序員。我渴望學習,但是我的經驗在20年前的c64和幾天的Python學習中非常基礎。在屏幕抓取時處理javascript重頁的選項

我剛剛開始一個相當大的(對於我來說,作爲一個初學者)屏幕抓取項目。到目前爲止,我一直在使用python和mechanize + lxml進行瀏覽/解析。現在我遇到了一些真正的JavaScript重載頁面,沒有顯示任何沒有啓用JavaScript的任何內容,這意味着機械化的麻煩。

從我搜索我種來,我有一個基本的幾個選項的結論:

  1. 試圖找出什麼JavaScript是這樣做在我的代碼(我不模仿一個牛逼很知道從哪裏開始與此有關。;-))

  2. 使用pywin32控制Internet Explorer或類似的東西,喜歡用從PyQt4的WebKit的瀏覽器,甚至使用telnet和mozrepl(這似乎真的很難)

  3. Sw發癢的語言perl自www ::機械化似乎是每個(插件和這樣的JavaScript)更成熟。對此完全不瞭解太多。

如果有人在這裏有一些指針,那將是偉大的。我知道我需要做大量的試驗和錯誤,但是如果有這樣的事情,我不會離「真實」的答案太遠。

+0

你一般想解決什麼問題? – Daenyth 2010-10-14 00:56:08

+0

我需要將表中存儲的數據(通常不總是)存儲到數據庫中。 – user475168 2010-10-14 05:09:31

回答

0

第四個選項可能是使用browserjs

這應該是一種在Mozilla Rhino或其他命令行JavaScript引擎中運行瀏覽器環境的方法。據推測,你可以(至少在理論上)在該環境中加載頁面,並在JS使用它之後轉儲HTML。

我自己並沒有真正使用它,我嘗試了幾次,但發現它對我的目的太慢了。儘管我沒有很努力,但是可能有一個選項需要設置,或者其他的選項。

0

我對簡單任務使用Chickenfoot,對於更復雜的任務使用python-webkit。兩人都有很好的經驗。

這裏是渲染網頁(包括執行任何JavaScript),並返回生成的HTML片段:

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.html = str(self.mainFrame().toHtml()) 
    self.app.quit() 

html = Render(url).html 
+0

這看起來很有趣。我遇到的一個問題是我得到一個QString類型的對象。如果我嘗試將此傳遞給lxml,我會遇到問題,因爲它不知道這是什麼。如何將QString轉換爲Unicode字符串?雞爪的事情也很酷!我在一個小時內寫了大量的腳本。 – user475168 2010-10-14 05:07:02

+0

是啊QString的煩人的時候與其他圖書館集成。幸運的是,您可以使用str(qstring_variable)輕鬆轉換。 – hoju 2010-10-15 01:26:41

1

你也許可以找到你正在尋找其他地方的數據。嘗試使用Firefox中的web開發者工具欄來查看javascript加載的內容。這可能是你可以在js文件中找到數據。

否則,您可能確實需要使用機械化。有兩個教程,你會發現這裏很有用:

http://scraperwiki.com/help/tutorials/python/

0

對於非程序員,我使用電子書籍IRobotSoft。它以視覺爲導向,並提供全面的JavaScript支持。缺點是它只能在Windows上運行。好事是你可以通過反覆試驗來學習軟件。