2017年10月17日

VALUの別の情報もつぶやいてみる(Python+MySQL+Tweepy)

下記のエントリでVALUの時価総額ランキングを呟くようにしました。
下記のエントリーでVALUの情報をスクレイピングしてMySQLに格納しました。...
今回は、時価総額だけでなく追加の情報もつぶやくようにしました。その内容についてのエントリーです。

追加のつぶやき

今回は、騰落率と新規公募時の時価総額のランキングをつぶやくようにしました。
下記をつぶやくまでに、幾つか注意した点を明記しておきます。

追加でスクレイピングした情報

今まではVALUのページの左側の情報のみを入手していましたが、今回は右側の情報も取得しました。

20171016_valu_0.png

また、今回は、右のように前日終値がついていないものは新規公募扱いとしてフラグを立てています。

20171016_valu_1.png

該当箇所のコードは下記となります。
    # em tagで順番に 現在値:時価総数:発行VA数:VALUER数となる
current_value = float(re.sub(",","",soup.select(".news_valu_left em")[0].string))
ag_market_value = float(re.sub(",","",soup.select(".news_valu_left em")[1].string))
value_issue = float(re.sub(",","",soup.select(".news_valu_left em")[2].string))
numerical_value = float(re.sub(",","",soup.select(".news_valu_left em")[3].string))

if soup.select(".news_valu_right em")[0].string == "---":
# 新規メンバーの場合
last_close_value = float(0)
last_first_value = float(re.sub(",","",soup.select(".news_valu_right em")[1].string))
last_top_value = float(0)
trunover = float(re.sub(",","",soup.select(".news_valu_right em")[3].string))
yearly_high = float(0)
yearly_low = float(0)
diff_rate = 0
newid = 1
else :
last_close_value = float(re.sub(",","",soup.select(".news_valu_right em")[0].string))
last_first_value = float(re.sub(",","",soup.select(".news_valu_right em")[1].string))
last_top_value = float(re.sub(",","",soup.select(".news_valu_right em")[2].string))
trunover = float(re.sub(",","",soup.select(".news_valu_right em")[3].string))
yearly_high = float(re.sub(",","",soup.select(".news_valu_right em")[4].string))
yearly_low = float(re.sub(",","",soup.select(".news_valu_right em")[5].string))
diff_rate = 100 * (current_value - last_close_value) / last_close_value
newid = 0

連投制限

Twitterでは全く同じ発言をつぶやこうとするとErrorが発生します(20回に1回ぐらいなら良いのかもしれませんが)。そのため前日と全く同じデータ・ランキングの場合にはTweetすることが出来ません。そのため、ランダムな数字を文末に挿入することにしました。該当箇所のコードは下記となります。
    for row in cur.fetchall():
tweet = tweet_prev + str(rank)+"位:"+row[1]+"("+row[0]+"):"+str(row[index])+str(unit)+"\n"
#140文字以上になる場合は、140文字以内になるように分割してリストに追加
if len(tweet) > 130:
tweet_list.append(tweet_prev+"\n"+str(random.randint(1,100)))
tweet_prev = str(rank)+"位:"+row[1]+"("+row[0]+"):"+str(row[index])+str(unit)+"\n"
tweet = ""
else:
tweet_prev = tweet
では、これらのことに注意して修正した全コードに続きます。
続きを読む
posted by くまなべ at 21:00 | Comment(0) | TrackBack(0) | Python