pythonのスクレイピングを用いて、特定のHPから記事をslackに送信する仕組みを作りたいです。
最終的には1時間に一度HPの更新を確認し、新規記事を自動でslackに届けてくれるような仕組みを考えています。
思考プロセスは
①まず特定のHPから欲しいURLをひっぱてくる
②それをslackに送信できる仕組みを作る
③定期更新を認識する仕組みを作る
と考えています。
##できたこと
a)スラックへのテストメッセージの送信
python
1slack = slackweb.Slack(url="質問なのでこのリンクは隠しています。") 2slack.notify(text="テストメッセージ") 3
b)スクレイピングによる欲しいURLの取得
参考コードの「#ここより上を実行すると、該当URLから記事のリンクをスクレイピングすることができます」に記載の通り欲しいURLのスクレイピングには成功しました。
##コード
python
1import requests 2from bs4 import BeautifulSoup 3import slackweb 4 5r = requests.get("https://blog.loco-partners.com/") 6soup = BeautifulSoup(r.content, "html.parser") 7 8urls = soup.find_all(class_='entry-thumb-link') 9 10for i in urls: 11 print(i.get('href')) 12 13#ここより上を実行すると、該当URLから記事のリンクをスクレイピングすることができます 14 15slack = slackweb.Slack(url="質問なのでこのリンクは隠しています。") 16slack.notify(text=i) 17 18
##課題
テストメッセージの送信・欲しいURLのスクレイピングは個別で行うと機能します。
しかし組み合わせるとうまく機能しません。
##エラーメッセージ
File "slack.py", line 15, in <module>
slack.notify(text=i)
File "/Users/user/.pyenv/versions/3.6.5/lib/python3.6/site-packages/slackweb/slackweb.py", line 26, in notify
return self.send(kwargs)
File "/Users/user/.pyenv/versions/3.6.5/lib/python3.6/site-packages/slackweb/slackweb.py", line 32, in send
payload_json = json.dumps(payload)
File "/Users/user/.pyenv/versions/3.6.5/lib/python3.6/json/init.py", line 231, in dumps
return _default_encoder.encode(obj)
File "/Users/user/.pyenv/versions/3.6.5/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/Users/user/.pyenv/versions/3.6.5/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/Users/user/.pyenv/versions/3.6.5/lib/python3.6/json/encoder.py", line 180, in default
o.class.name)
TypeError: Object of type 'Tag' is not JSON serializable
どこがダメなのか教えていただけると幸いです。
回答1件
あなたの回答
tips
プレビュー