bs4_03_mycount_01b.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import urllib.request
from bs4 import BeautifulSoup
#
keys=[] #地震場所名のリスト
values=[] #地震場所名の出現回数のリスト
#
# リストデータを要素(keys),重複数(values) のリストにする
def chg_Data(l_dat):
#キーと重複値のリストデータを形成する
for s in l_dat:
#キーデータがない場合は追加し、値を1で登録する
if s not in keys:
keys.append(s)
values.append(1)
#キーが重複しているので重複場所を探して値を+1する 場所を毎回探すので遅い?
else:
for i in range(len(keys)):
if keys[i]== s:
values[i]=values[i]+1
return keys,values
#
#地震データ取得ページ数
page=int(input ('Enter page(1-479): '))
#
s=0 #
数
total=0
count=0
place=[] # 場所だけ
for p in range(page):
p_val=str(p)+'01'
url='https://typhoon.yahoo.co.jp/weather/jp/earthquake/list/?sort=1&key=1&b='+p_val
req = urllib.request.Request(url)
html = urllib.request.urlopen(req)
soup = BeautifulSoup(html, "html.parser")
q_index=soup.find(id="eqhist")
#
数
s=s+len(q_index.find_all('tr'))
for tr in q_index.find_all('tr'):
d_dat=[]
for td in tr.find_all('td'):
m_data=td.string
if m_data== None:
#None なら追加しない
continue
#日時、場所、マグニチュード、最大震度
d_dat.append(m_data)
if d_dat==[]:
# 空なら追加しない 項目行が空
continue
total=total+1
#
#震度が'1'と'---'、場所が'---'は除外する
if d_dat[3]=='1' or d_dat[3]=='---' or d_dat[1]=='---':
continue
#
count=count+1
if count==1:
d_st=d_dat[0] #最初の日時
#場所データをdef_chg_Dataで累積
keys,values=chg_Data([d_dat[1]]) #場所だけ
d_en=d_dat[0] #最後の日時
d=dict(zip(keys, values))
r=sorted(d.items(),key=lambda x:x[1], reverse=True)#値の大きい順
#地震データ頻度結果
print('')
print(s,total,count) #処理数(tr)、データ数、条件内使用データ数
print('rank10', r[0:10]) #上位10表示
print(f'{d_st.split()[0]} ~ {d_en.split()[0]}') #収集データ期間