2016-01-06 44 views
0

刮靜態頁面的正常工作是這樣的:Python PhantomJS&Beautifulsoup Scraping Java - 這裏有什麼遺漏?

soup = BeautifulSoup(driver.page_source, "lxml") 


for results in soup.findAll("li", {"class" : "open"}): 
    print(results.get_text()) 

但Javascript網站上都引起了我的問題。

因此,我使用PhantomJS,開始時顯而易見的想法是「它只是在我試圖抓取時才加載」。

所以,我被困在一個time.sleep(不理想 - 我知道我會交換到presence_of_element_locate)和:

driver.save_screenshot('screenshot.png') # save a screenshot to disk 

這截圖顯示了我要找的已加載數據。我能夠使用與上面相同的代碼來刪除那些頁面中的其他數據,而不使用Java來加載這些元素。

根據屏幕截圖數據在頁面上。我使用的數據與我在.Net庫中讀取相同的網站的數據相同。

for names in soup.findAll("span", {"class" : "the-name ng-name ng-big-scope"}): 
     print(names) 

我在這裏刪除了.get_text(),以防萬一導致某些事情中斷。但無論哪種方式,這不會返回。我無法弄清楚爲什麼。

我可以在vb.net中使用完全相同的數據:

For Each element As HtmlElement In Me.Browser.Document.GetElementsByTagName("span") 
    If element.GetAttribute("className").Contains("the-name ng-name ng-big-scope") Then 
        print(element.innertext) 
    End If 
Next 

我知道我在.NET比如有使用。載,但我已經三重檢查這是正確的類名在這種情況下, 。

因此,該語法對靜態數據有效。 我有類名等等,因爲我可以在.Net上刮。 我正在查找的數據已加載(根據所需的屏幕截圖)。

我很難過。如果有人能指出我在這裏搞亂了什麼,我會很感激。

/編輯:

我跑在不同的基於JavaScript的網站測試,並獲得了第一個結果和一點點的第二個。那裏有十幾個結果。 .Net再次處理這個沒有問題。

所以我正在考慮可能性,我的語法是好的,問題是BF處理網站上的格式錯誤的代碼。去嘗試一兩個替代方案,看看是否會改變任何事情。

回答

0

結果沒有錯的代碼。

網站上格式錯誤的HTML導致lxml出現問題,導致無法讀取結果。