そうだ、基本的なこととしてテキストファイルの出力を忘れていた。データ取得したら何かしらのファイルへ出力するんだから、これくらいはやっておかないと。
#=============================== # WEBスクレイピング # tenki.jpの天気予報情報を取得 # テキストファイルへ書き出す #=============================== import requests import bs4 #=============================== # 特定WEBサイトから情報を取得 #=============================== # 情報取得したいURL URL = 'https://tenki.jp/forecast/3/17/4610/14100/1hour.html' # URLへアクセス r = requests.get(URL) # 解析しやすいデータに s = bs4.BeautifulSoup(r.text, 'html.parser') #------------------------------ # データ収集 # 当日含む3日分(24*3=72) # 要素数・・・72こ #------------------------------ # 気温情報の取得 list_date= [] for j in s.find_all('tr' , class_ ='head'): for i in j.find_all('p'): list_date.append(i.text) # 気温情報の取得 list_temp= [] for j in s.find_all('tr' , class_ ='temperature'): for i in j.find_all('span' ): list_temp.append(i.string) # 天気情報(晴れとか)の取得 list_weather = [] for j in s.find_all('tr' , class_ ='weather'): for i in j.find_all('p'): list_weather.append(i.string) # 時刻の取得 list_hour = [] for j in s.find_all('tr' , class_ ='hour'): for i in j.find_all('span'): list_hour.append(i.string) # 風向きの取得 list_windblow = [] for j in s.find_all('tr' , class_ ='wind-blow'): for i in j.find_all('p'): list_windblow.append(i.string) # 風速の取得 list_windspeed = [] for j in s.find_all('tr' , class_ ='wind-speed'): for i in j.find_all('span'): list_windspeed.append(i.string) # 湿度の取得 list_humid = [] for j in s.find_all('tr' , class_ ='humidity'): for i in j.find_all('td'): list_humid.append(i.string) #------------------------------ # 各情報を2次元配列へ格納する #------------------------------ List_all =[list_hour, list_weather, list_temp, list_windspeed,list_windblow, list_humid] #------------------------------ # テキストファイルへ書き込み #------------------------------ # ファイル名指定 fileName = "httpText.txt" # ファイル作成、書き込み with open(fileName, "wt", encoding="utf-8") as f: # 2次元配列を文字列に直してから書き込み f.write(str(List_all)) f.close() #------------------------------ # ファイル読込、ディスプレイ表示 #------------------------------ f = open(fileName, "r", encoding="utf-8") text = f.read() print(text) f.close() print('-------------------------------') print('end of line') input() """ 備考; テキストファイルの書き込み:open(filename, "w")は、「w」「a」にして、f.write()命令を。 テキストファイルの読み込み:open(filename, "r")は、「r」にして、f.read()命令を。 ※readするときに「w」とするとエラー。 ※writeするときに「r」とするとエラー。 """
◆ディスプレイへの出力結果
◆テキストファイルへの出力結果
テキストファイルへ出力できたからなんやねんって話だけど、2次元配列(リスト)をそのままwriteできなかったというハマりもあった。リストはディスプレイにはそのままprint()でいけるけど、テキストファイルにはいったんstr()で文字列にしてからじゃないとアカン。わかっている人には当たり前じゃん!ってことなんだろうけど、いちおうハマったのでここに書いておこう。
◆もっとシンプルに出しておきたい
何かしらで抽出したデータをテキストファイルにし、その後DBに読み込ます場合は単純な文字列のほうが良さそう。その場合は、こちらのほうがシンプルかな。
# ファイル作成、書き込み str_temp=','.join(list_temp) with open(fileName, "wt", encoding="utf-8") as f: f.write(str_temp) f.close()
joinってこういう風に使うんだ、、、勉強になります。