現在下記のページ(JSON形式)からデータをスクレイピングして、CSVに落とし込もうとしております。
ただ、一つ条件があり、このページはURL末尾の数字が100ずつ増えるとします。
https://nonfungible.com/api/v1/market/decentraland/history/?start=0&length=99
https://nonfungible.com/api/v1/market/decentraland/history/?start=100&length=199
https://nonfungible.com/api/v1/market/decentraland/history/?start=200&length=299
.
.
.
なので、for loopを使い、ひとつづつスクレイピングしようとしていますが、
URLが複数の場合、それぞれをスクレイピングした後のbytesをどのように蓄積すればいいかわかりません。
下記のようにコードを書きました(コードが汚いのはご了承ください)
コード1: URLのリストを作ります
Python
1import csv 2import time 3import urllib 4import urllib.request 5import numpy as np 6import json 7from collections import OrderedDict 8import pprint 9import pandas as pd 10 11url = 'https://nonfungible.com/api/v1/market/decentraland/history/?start=0&length=100' 12headers = { 13 "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0", 14 } 15request_interval = 5 # interval 16 17df = [] 18for i in range(0, 2):#試しに2つのURLをスクレイピングします。 19 url = urllib.parse.urljoin(url, '?start='+str(i*100)+'&length='+str((i+1)*100-1)) 20 df.append(str(url)) 21print(df)
これでURL末尾の数字が100ずつ増えるURLをリストとして取得しました。
そして取得したURLのJsonを下記のコード2で取得しようとしましたが
Python
1for i in range(0, 2): 2 url=df[i] 3 headers = {"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0",} 4 request = urllib.request.Request(url=url, headers=headers) 5 html = urllib.request.urlopen(request).read()
下記のコード3でshapeを見てみると、
Python
1Json_df=pd.read_json(html) 2Json=pd.read_json((Json_df["data"]).to_json(), orient='index') 3# カンマ区切りで分割 4Json.shape
(100,23)
となりこの場合、期待していた(200,23)が得られていません。
これはなぜかというとコード2のfor loopの
html = urllib.request.urlopen(request).read()
のhtmlデータを蓄積していないからですが、
type(html)はbytesであり、このbytesをどのように蓄積して、CSVに落とし込めばいいのかわかりません。
お手数をおかけしますが解決策についてアドバイス頂きたいです。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー