2016-12-03 59 views
0

當我試圖解析來自JavaScript書寫網站的數據時,遇到了一個非常奇怪的問題。也許是因爲我不是Web開發專家。Gigya API可以獲得隱藏的評論,但不可見

這裏是發生了什麼:

我試圖從The Globe and Mail得到所有的評論數據。如果您檢查其源代碼,則無法使用Python並解析源代碼中的評論數據,所有內容都是用JavaScript編寫的。

但是,有一個名爲「Gigya」API的神奇工具,它可以返回來自JS書寫網站的所有評論。 Gigya getComments method

當我在Python Scrapy Spider中使用這些代碼行時,它可能會返回所有評論。

data = {"categoryID": self.categoryID, 
       "streamID": streamId, 
       "APIKey": self.apikey, 
       "callback": "foo", 
       "threadLimit": 1000 # assume all the articles have no more then 1000 comments 
       } 
r = urlopen("http://comments.us1.gigya.com/comments.getComments", data=urlencode(data).encode("utf-8")) 
comments_lst = loads(r.read().decode("utf-8"))["comments"] 

然而,環球郵報正在更新自己的網站,11月28日之前發佈的所有意見已經從網絡隱伏現在。這就是爲什麼我在這裏展示的示例網址中,您只能看到2條評論,因爲它們是在11月28日之後發佈的。而且這2條新評論已添加新功能 - 「反應」按鈕。

奇怪的是,當我運行我的代碼時,我可以隱藏所有那些在11月28日之前發佈的數百條評論,但無法獲得我們現在可以在網站上看到的新通信。

我已經嘗試了所有的Gigya評論相關的方法,他們沒有工作,其他的Gigya方法,不喜歡看的東西有幫助...

有什麼辦法來解決這個問題呢?

或者至少,你知道爲什麼,我可以得到所有的隱藏的評論,但不能看到具有新功能的可見新的通信?

回答

0

最後,我用Python selenium庫解決了這個問題,它是免費的,它非常酷。

所以,似乎儘管在JS寫的網站的源代碼中,我們看不到內容,它實際上有HTML頁面,我們可以在其中解析內容。

  1. 首先,我在Firefox安裝螢火蟲,用這個插件,我能看到URL的HTML頁面,它很容易幫助您找到的內容,只是搜索關鍵詞在Firebug

  2. 然後我寫了這樣的代碼:

    from selenium import webdriver 
    import time 
    def main(): 
    comment_urls = [ 
    "http://www.theglobeandmail.com/opinion/a-fascists-win-americas-moral-loss/article32753320/comments/" 
          ] 
    
    for comment_url in comment_urls: 
        driver = webdriver.Firefox() 
        driver.get(comment_url) 
        time.sleep(5) 
        htmlSource = driver.page_source 
        clk = driver.find_element_by_css_selector('div.c3qHyJD') 
        clk.click() 
        reaction_counts = driver.find_elements_by_class_name('c2oytXt') 
        for rc in reaction_counts: 
         print(rc.text) 
    
    if __name__ == "__main__": 
        main() 
    

我在這裏分析這些數據的內容不能被發現HTML頁面,直到您點擊網站上的反應圖像。什麼讓硒超酷是click()方法。找到可以單擊的元素後,只需使用此方法,那些生成的元素將出現在HTML中並變爲可解析。超酷!

相關問題