質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1262閲覧

Python サイトの更新を通知する スクレイピングしたテキストの復元

Daichi-tsubasa

総合スコア19

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2019/05/14 14:27

前提・実現したいこと

定期的にサイトに訪れ、サイトが更新されているかどうかをチェックする。

Scheduleで定期実行させることは実現しましたが、更新があったかをチェックするには、前回スクレイピングした値を復元して、[今回スクレイピングしたテキスト==前回のテキスト]で処理をする必要があると考えました。

そこで、前回スクレイピングしたテキストを復元し、今回のテキストと == で比較させたいのですが、前回のテキストを復元させる方法がわかりません。

該当のソースコード

import requests import schedule import time import urllib.request, urllib.error from bs4 import BeautifulSoup import base64 def job(): #今回のスクレイピング処理 url=[リンク内容](https://blogos.com/article/latest/) html = urllib.request.urlopen(url=url) soup = BeautifulSoup(html, "html.parser") elems=soup.select(".entry-title")[0] elem = elems.getText() """""""""""""""""""""""""""""""""""""" #前回のテキストを復元させる処理?????? """""""""""""""""""""""""""""""""""""" if elem == 前回スクレイピングしたテキスト: pass else: #通知させる処理 (省略) schedule.every(2).hours.do(job) while True: schedule.run_pending() time.sleep(1)

試したこと

以前に似た質問をこちらでし、教えて頂いたグローバル変数を試してみましたが、上手く出力できません。
変数を再宣言する必要があると思いますが、何か関数の外側での処理が必要なのでしょうか?
詳しい方がいましたら、ご教授頂けると幸いです。宜しくお願いいたします。

補足情報(FW/ツールのバージョンなど)

python 3.7.3
windows 10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

グローバル変数は関数の外で宣言し、関数内ではグローバル宣言「global 変数名」が必要ですね。

python

1import requests 2import schedule 3import time 4import urllib.request, urllib.error 5from bs4 import BeautifulSoup 6import base64 7 8前回スクレイピングしたテキスト = "" 9 10def job(): 11 12 #今回のスクレイピング処理 13 url="https://blogos.com/article/latest/" 14 15 html = urllib.request.urlopen(url=url) 16 soup = BeautifulSoup(html, "html.parser") 17 18 elems=soup.select(".entry-title")[0] 19 20 elem = elems.getText() 21 22 global 前回スクレイピングしたテキスト 23 24 if elem == 前回スクレイピングしたテキスト: 25 pass 26 else: 27 #通知させる処理 (省略) 28 29 前回スクレイピングしたテキスト = elem 30 31 32 33schedule.every(2).hours.do(job) 34 35while True: 36 schedule.run_pending() 37 time.sleep(1)

投稿2019/05/14 22:08

nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問