2017-02-12 1 views
0

私はウェブスクレイピングにはまったく新しいです。私はhereのデータを削りたいと思っています。主に、その国の年、国、GDPのデータがあります。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のレンダリングを検索し、クローム開発ツールでリクエストを確認するか、またはセレンを使用してください – 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を好む。

ご質問のコメントを見ると、すでにセレンを使用していることがわかります。スクロールと同様に、スクロールが行われると、通常、前に述べた後続の呼び出しが行われます。それらを完全に模倣することができれば(ヘッダ、params、qwargsなど)、あなたはブラウザにデータをロードさせることができます。

+0

ありがとうございます。私はまだセレンを試してみる必要があります、私は自分の問題を試してみる前にそれを使用する方法について読んでいた。私は、エンドポイントへの呼び出しを模倣することによって何を意味するのかを尋ねたいと思います。 – learnandshare

+0

エンドポイント、要求、およびurlopenの説明を追加しました。希望が役立ちます。 –

+0

今ははるかに明確です。ありがとう。 – learnandshare

2

リンクにアクセスすると、「ダウンロードオプション」専用のメニューが表示されます。なぜそれを使用しないのですか?

+0

私はできることを望みますが、これは私の割り当てです。 – learnandshare

+0

@austin真剣に私がstackoverflowで見たこの最高の答え:D –

関連する問題