2017-02-12 88 views
0

我對網絡抓取很陌生。我想從here那裏獲取數據,主要是有關國家的年份,國家和國內生產總值的權利數據。如何使用Python從本網站刮取所有數據

我的代碼如下:

from urllib.request import urlopen 
from bs4 import BeautifulSoup 
data = "http://databank.worldbank.org/data/reports.aspx?source=2&series=NY.GDP.MKTP.CD&country=#" 
page = urlopen(data) 

soup = BeautifulSoup(page,'html.parser') 
name_box = soup.find('div',attrs = {'class':'canvas'}) 
name = name_box.text.strip() 

print(name) 

我可以得到的數據卻是隻有那些在頂部10+。

所以我的問題是,當數據不在頁面本身(即從別處導入)時,如何解決這些問題。 預先感謝您的任何意見。

+1

搜索JavaScript呈現,使用Chrome開發人員工具檢查請求,或使用硒 – eLRuLL

+0

(1)您嘗試打開的URL中有空白。 (2)你試圖接收哪些數據? –

+0

感謝您指出這一點,這是網站:http://databank.worldbank.org/data/reports.aspx?source=2&series=NY.GDP.MKTP.CD&country=#否則你可以點擊'這裏'在題。 – learnandshare

回答

0

通常情況下,當JavaScript加載更多的數據時,它會調用端點。

當您撥打urlopen(data)時,您正在呼叫端點。在使用requests.get(data)requests.post(data)的較新版本的python中也有類似的調用。 urlopen的文檔有大量的例子和用法。如果你看看這個請求,javascript會讓它有很多部分(頭文件,參數,方法等)。您可以在urlopen中將這些部分添加到您的請求中,以便複製(模仿)javascript所調用的調用。

如果您可以模仿該呼叫,那麼您會將隨後呼叫中的數據加載到您的湯中。然後你可以解析數據。

如果你不能模仿這個電話,那麼你最好的選擇就是使用某種無頭瀏覽器。最常用的幾種是Dryscrape和Selenium。我個人比較喜歡Dryscrape

看看你的問題的意見,我看到你已經在使用硒。與滾動類似,當滾動完成時,通常會進行之前提到的後續調用。如果你可以完整地模仿它們(頭文件,params,qwargs等),那麼你可以讓你的瀏覽器加載數據。

+0

謝謝。我還沒有嘗試硒,正在閱讀如何使用硒,然後才能開始嘗試解決問題。我想問你通過模仿對端點的呼叫意味着什麼,是否有任何示例或外行術語來表達它? – learnandshare

+0

我添加了對端點,請求和urlopen的說明。希望有所幫助。 –

+0

現在更清楚了。謝謝。 – learnandshare

2

當我訪問鏈接時,有一個專門用於「下載選項」的完整菜單。爲什麼不使用它?

+0

我希望我可以但這是我的任務。 – learnandshare

+0

@austin認真的這個最佳答案我甚至在stackoverflow上看到:D –