Yahooニュースから情報取得(Webスクレイピング超初級その2)

みなさんこんにちは。

前回の投稿から約3か月空いてしまいました…(忙しくてサボっていました 笑)またボチボチ更新していきますのでよろしくお願いします。

その1の出力結果↓

ここから「写真」、「new」を消したいと思います。色々やり方はあると思いますが、シンプルにsoupのなかから”span”タグを全て消してしまいます。それにはdecompose()を使います。

その1と合わせるとこんな感じになります。

当たり前ですがYahooニュースのHTML構造が変わってしまうとこのプログラムは動きません。(そんなに頻繁に変わるものではないと思いますが…)さてここまでできたらもうちょっと改良してみたい。

①プログラムを定期的に動かしてトピックスを取得する

②前回取得したトピックスと比較して、新しいトピックスがあれば通知する

①はLinuxだとcronがありますが、今使っているのはWindowsなのでよくわかりません。調べてみたらbatファイルを作ってタスクスケジューラで管理するのだとか。Pythonとあまり関係ないので、とりあえず②を先にやります。

前回の情報をどうやって保存しておくか、ですがシンプルにテキストファイルに毎回吐き出すことにしました。

前回保存したテキストファイルから前回のトピックスを読み込み→前回のトピックスを今回取得したトピックスと比較して、新しい項目がある場合は通知→今回のトピックスをテキストファイルに上書き保存、という流れにします。Yahooニュースの内部ロジックがよくわかりませんが、単純に新しい項目が追加されたら古い項目が下にずれていくということでも無さそうです。最大8項目というのは不変なようですが。ということで、リストとして上から比較していくのではなく、順番によらない要素ごとの比較(=集合の比較)を利用します。

前回のトピックスの要素からなる集合をold、今回のトピックスの要素からなる集合をnewとして差集合を求めます。もしグレーにあたる要素がひとつでもあれば、今回のトピックスだけにある要素ということになるので、新しいトピックスがあるとして表示します。差集合の長さ(=len)が1以上であれば「差集合がある」ということになります。

新しいトピックスがある場合はこのような形で表示されます。

ない場合は

もし上のソースをコピーしてそのまま張り付けた場合、hogehoge.txtがないのでエラーになるかと思います。pyファイルと同じディレクトリに空のhogehoge.txtを作成すれば問題ありません。再度実行して上書き保存されたhogehoge.txtをメモ帳などで開くと、新しく取得したトピックスが丸々記載されていると思います。その1よりはまとも?な処理ができたでしょうか。まだプログラミングを始めたばかりなので変数の指定のしかたが難しい。。読みにくい部分もあると思いますが長い目で生温かく見守ってください。タスクスケジューラへの登録などはまた後日。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です