更新チェッカを作っています。
単体で動作を確認できたので、CSVからデータを配列化して
ファイルの最後まで読み込んで複数のデータをチェックしたいのですが、うまく動作しません。
どこが悪いかわからず四苦八苦しています。アドバイスを頂けないでしょうか?
このプログラムの動作:
データを取得し、code.txtで保存
次回取得時にcode.txtとデータを比較し、差がないかを比較
期待する動作:
変化あり[前回のデータ][今回のデータ]
True
現状の動作:
変化なし[][]
False
このように、データの取得値が空になり、尚且txtファイルも作成されません。
◎ 単体動作確認済み
import requests import bs4 import re import datetime import pytz code = '6653' name = '正興電機製作所' url = 'https://www.seiko-denki.co.jp/news/' class_name ='#contents > table > tr:nth-child(1)' file = code + '.txt' res = requests.get(url) res.raise_for_status() soup = bs4.BeautifulSoup(res.text,'html.parser') # Parser title = soup.find('title').text # title 取得 now = datetime.datetime.now(pytz.timezone('Asia/Tokyo')) def get_website(): # 更新を検知したい箇所を指定 elems = soup.select(class_name) # copy -> selector str_elems = str(elems) # stringに変換 str_elems = str_elems.replace('\r','') # '\r'を削除 try: f = open(file) old_elems = f.read() except: old_elems = ' ' if(str_elems == old_elems): print ('変化なし' + str_elems + old_elems) return False else: f = open(file, 'w') # 上書きする f.writelines(str_elems) f.close() print('変化あり' + str_elems + old_elems) return True get_website()
× CSVを読み込み配列化したデータを読み込んで繰り返し処理
import requests import bs4 import re import datetime import pytz import csv with open("search_list.csv") as f: for row in csv.reader(f): code = f"{row[0]}" name = f"{row[1]}" url = f"{row[2]}" class_name = f"{row[3]}" file = code + '.txt' res = requests.get(url) res.raise_for_status() soup = bs4.BeautifulSoup(res.text,'html.parser') # Parser title = soup.find('title').text # title 取得 now = datetime.datetime.now(pytz.timezone('Asia/Tokyo')) def get_website(): # 更新を検知したい箇所を指定 elems = soup.select(class_name) # copy -> selector str_elems = str(elems) # stringに変換 str_elems = str_elems.replace('\r','') # '\r'を削除 try: f = open(file) old_elems = f.read() except: old_elems = ' ' if(str_elems == old_elems): print ('変化なし' + str_elems + old_elems) return False else: f = open(file, 'w') # 上書きする f.writelines(str_elems) f.close() print('変化あり' + str_elems + old_elems) return True get_website()
上記用CSVファイル「search_list.csv」
6653,正興電機製作所,https://www.seiko-denki.co.jp/news/,#contents > table > tr:nth-child(1) 5491,日本金属,https://www.nipponkinzoku.co.jp/,#wrap > section:nth-child(1) > div > div.info > ul > li.first
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー