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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

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

Python

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

Q&A

2回答

3667閲覧

pythonでWEBサイトの更新を通知

hide09090909

総合スコア68

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2021/05/17 14:11

python3で企業のHPに記載されているセミナー情報が更新されたらSlackに通知するソフトを作りたいです。
下記サイトを参考に作成しましたが、コードを実行してもcsvファイルは作成されません。
https://qiita.com/ryo-futebol/items/235c212fdfc3704b7e9c

プリントしているものは全て出力されます。
どこに原因があるかわかるかたいらっしゃいましたら教えていただきたいです。
slackに通知する部分はまだ作成していません。

import csv import os import sys import requests import slackweb import pandas as pd from bs4 import BeautifulSoup def scraping(): url = 'https://www.salesforce.com/jp/events/webinars/' r = requests.get(url) soup = BeautifulSoup(r.text, 'html.parser') result = [] for top_news in soup.find_all(class_='isp'): result.append([ top_news.text, top_news.get('href') ]) return result print('1') def output_csv(result): with open('last_log.csv', 'w', newline='',encoding='utf_8') as file: headers = ['Title', 'URL'] writer = csv.writer(file) writer.writerow(headers) for row in result: writer.writerow(row) print('2') def read_csv(): if not os.path.exists('last_log.csv'): raise Exception('ファイルがありません。') if os.path.getsize('last_log.csv') == 0: raise Exception('ファイルの中身が空です。') csv_list = pd.read_csv('last_log.csv', header=None).values.tolist() return csv_list print('3') def list_diff(result, last_result): return_list = [] for tmp in result: if tmp not in last_result: return_list.append(tmp) return return_list print('4')

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

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

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

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

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

guest

回答2

0

おはようございます。

問題文読ませていただきました。

こんな感じでいかがでしょうか?

Python

1import csv 2import os 3import requests 4 5import slackweb 6import pandas as pd 7from bs4 import BeautifulSoup 8 9# セミナー内容をスクレイピングする。 10 11 12def scraping(): 13 url = 'https://www.salesforce.com/jp/events/webinars/' 14 res = requests.get(url) 15 # スクレピング内容を整形する。 16 soup = BeautifulSoup(res.content, 'html.parser') 17 # リンク要素一覧を取得する。 18 linkList = soup.find_all(class_='abstract-register') 19 i = 0 20 result = [] 21 for topNews in soup.find_all(class_='text-link'): 22 result.append([ 23 # replace : 改行、空白の削除を行う。 24 topNews.text.replace(' ', '').replace('\n', ''), 25 linkList[i].get('href'), 26 ]) 27 i += 1 28 return result 29 30 31# 新規で追加されたセミナー情報をファイルへ書き込む。 32def outputCsv(result): 33 with open('last_log.csv', 'w', newline='', encoding='utf_8') as file: 34 headers = ['Title', 'URL'] 35 writer = csv.writer(file) 36 writer.writerow(headers) 37 for row in result: 38 writer.writerow(row) 39 40# 過去セミナーログファイル読み込み 41 42 43def readCsv(): 44 if not os.path.exists('last_log.csv'): 45 raise Exception('ファイルがありません。') 46 if os.path.getsize('last_log.csv') == 0: 47 raise Exception('ファイルの中身が空です。') 48 # 1行目は無視する。 49 return pd.read_csv('last_log.csv', header=0).values 50 51# 過去セミナーと取得したセミナー情報の精査を行う。 52 53 54def listDif(result, lastResult): 55 resList = [] 56 for lstRes in lastResult: 57 resList.append([lstRes[0], lstRes[1]]) 58 for tmp in result: 59 if tmp not in lastResult: 60 resList.append(tmp) 61 return resList 62 63 64res = listDif(scraping(), readCsv()) 65 66outputCsv(res)

ご確認のほど、よろしくお願いいたします。????‍♂️

投稿2021/05/17 23:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hide09090909

2021/06/03 11:36

ご丁寧にコードを作成いただきありがとうございます。 実行したところ下記エラーが表示されてしまいました。 確かにcsvファイルも生成されておりませんでした、何が原因でしょうか? Traceback (most recent call last): File "test.py", line 64, in <module> res = listDif(scraping(), readCsv()) File "test.py", line 45, in readCsv raise Exception('ファイルがありません。') Exception: ファイルがありません
退会済みユーザー

退会済みユーザー

2021/06/04 01:12

なるほど。。 ・同ディレクトリ内へlast_log.csvファイルを作成する。 ・Title,URL を書き込む。 ・pythonファイルを実行する。 をお願いいたします。????‍♂️
guest

0

ファイルを実行すると1,2,3,4が出力されるということを言っているのだとすると、そもそも関数を定義しているだけで、どこでも実行(呼び出し)していないからではないでしょうか?

投稿2021/05/17 14:54

TakaiY

総合スコア13790

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問