前提・実現したいこと
あるサイト(https://www.spamcop.net/w3m?action=inprogress)に掲載されたあるIPアドレスを重複なく,定期的に取得したい.
上のサイトのIPアドレスを上から順に取得し,重複がある時はcsvに出力しないようにしたい.
現在のプログラムではwhile文が終わるたびに,csv_list = []により,初期化されてしまい,前回のcsv_listのデータが消えてしまう.
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
# coding: UTF-8 import urllib.request, urllib.error from bs4 import BeautifulSoup from datetime import datetime import csv import time time_flag = True # 永久に実行させます while True: if datetime.now().minute != 0 and datetime.now().minute != 30: continue time.sleep(58) # csvを追記モードで開きます→ここでcsvを開くのはファイルが大きくなった時にcsvを開くのに時間がかかるためです f = open('IPlist.csv', 'a') # csvに記述するレコードを作成します csv_list = [] # 現在の時刻を年、月、日、時、分、秒で取得します time_ = datetime.now().strftime("%Y/%m/%d %H:%M:%S") # アクセスするURL url = "https://www.spamcop.net/w3m?action=inprogress" # URLにアクセスする htmlが帰ってくる html2 = urllib.request.urlopen(url) # htmlをBeautifulSoupで扱う soup = BeautifulSoup(html2, "html.parser") IP = "" try: IP = (soup.select_one(' tr:nth-child(2) > td:nth-child(3) > a').text) print (time_, IP) if IP in csv_list: print ("同じIPアドレスが存在します", time_, IP) else: writer = csv.writer(f, lineterminator='\n') csv_list.pop(0) csv_list.pop(0) # 1カラム目に時間を挿入します csv_list.append(time_) csv_list.append(IP) # csvに追記敷きます writer.writerow(csv_list) IP = (soup.select_one(' tr:nth-child(3) > td:nth-child(3) > a').text) print (time_, IP) if IP in csv_list: print ("同じIPアドレスが存在します", time_, IP) else: writer = csv.writer(f, lineterminator='\n') csv_list.pop(0) csv_list.pop(0) # 1カラム目に時間を挿入します csv_list.append(time_) csv_list.append(IP) # csvに追記敷きます writer.writerow(csv_list)
試したこと
csv_list = []により毎回,初期化が行われていると考えたため,while文の中で一回だけ
csv_list = []が実行されるようにした.
Pyhton
1i=1 2 3# 永久に実行させます 4while True: 5 if datetime.now().minute != 0 and datetime.now().minute != 30: 6 continue 7 time.sleep(58) 8 9 # csvを追記モードで開きます→ここでcsvを開くのはファイルが大きくなった時にcsvを開くのに時間がかかるためです 10 f = open('IPlist.csv', 'a') 11 12 # csvに記述するレコードを作成します 13 csv_list = [] 14 15 if i >= 2: 16 print("二回目以降です") 17 else: 18 csv_list = [] 19 i+=1
csvの出力結果です.
16:41と16:42にプログラムを実行しました.二回目の16:42の時は同じものが二回出力されました.
また,一回目と二回目で同じIPアドレスがありました.(csv_listが初期化されてる?)
補足情報(FW/ツールのバージョンなど)
時間がある時に答えて頂けたら嬉しいです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/20 07:28