こんな方におすすめ
- Pythonでwebスクレイピングをやりたい!
- Pythonでwebスクレイピングした内容をツイッターに投稿したい!
Pythonで、NewsWeekJapanのトピックスをwebスクレイピングをして、ツイッターに流す方法について説明します。この記事を読むことで、webスクレイピング自体のイメージと、それを効果的に使う方法までイメージできるようになると思います。
実際に、使ったソースコードも全部公開しますので、参考にしてトライしてみて下さい。
webスクレイピングをする内容
Newesweekのウェブサイトから、トピックスに該当する緑で囲った部分をスクレイピングします。
【世界で5万人が受講】実践 Python データサイエンス・オンライン講座
プログラムの内容
まずは、必要なモジュールをインポートします。webスクレイピングには、requestsとBeautifulSoupを使うよ。
tweepyはツイッターへの投稿に必要なモジュールです。
import requests
from bs4 import BeautifulSoup
import tweepy
import time
Consumer Key(CK),Consumer Secret Key(CS), Access Token(AK), Access Token Secret(AT)の設定。自分のツイッターの開発情報を入手して入れてね。入手方法は省略します。(ググれば出てきます)
CK=xxxx
CS=xxxx
AK=xxxx
AT=xxxx
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AK, AT)
api = tweepy.API(auth)
スクレイピングするwebサイトからhtmlの情報を入力しよう。今回は、newsweekjapanからトピックスを入手するよ。
target_url = "https://www.newsweekjapan.jp"
r = requests.get(target_url)
soup = BeautifulSoup(r.text, "html.parser")
soupの中身を表示すると、以下のようなhtmlの情報が入っているよ。
1 2 3 4 5 6 7 8 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html lang="ja" xml:lang="ja" xmlns="http://www.w3.org/1999/xhtml"> <head> <script type="text/javascript"> var _popIn_shost = "www.newsweekjapan.jp";var _popIn_mhost = "m.newsweekjapan.jp"; var _popIn_ua = navigator.userAgent; ...............(省略)............. |
soupからfind_allメソッドを用いて、<h3>タグの中身をスクレイピングする。それらをmessage_stackの変数に追加していき、tweepyのメソッドのupdate_statusを用いて送信する。ツイッターは文字数制限があるので、3行まで取得するようにcountで制限してます。
elems = soup.find_all(["h3"])
message_stack = ""
message_stack+="今日のnewsweekjapan"
message_stack+="\n"
count=0
for e in elems:
count=count+1
message_stack +="No."+str(count)+" "
message_stack +=e.getText()
message_stack +="\n"
if count==3:
break
print(message_stack)
message_stack+="Pythonから送信"
api.update_status(message_stack)
Python 3 入門+アメリカのシリコンバレー流コードスタイル
webスクレイピングの結果は
以下のように取得したい部分をスクレイピングしてツイートできました。(見やすいようにNo.をふりました。)
これを応用して、自分に必要なニュースや株価を毎朝定期的に取得して、ツイートするとかもできますね。応用は無限大です。
ぜひ、トライして見てください!