#きっかけ
通っている学校のホームページで授業変更を確認するけど、毎回見に行くのがだるい。
Python2系でスクレイピングしてラズパイにLINEで通知してもらう。
#現状
スクレイピングには成功したけど、文字コードの問題でLINEに送信できなくて詰んでる。
それよりも前の段階で何回も詰みかけたので、他の人のヒントになればと思い書いた。
#詰みポイント1
##モジュールインポートで詰む
ソースコードの一部を以下に示す。
#授業変更を取得する
#coding:utf-8
import urllib
from bs4 import BeautifulSoup
from linebot import LineBotApi
from linebot.models import TextSendMessage
3行目「import urllib」だが、スクレイピング方法をググりながらコーディングしてると、Python2系と3系で記述方法が異なるため、なんかうまくいかなくなることがあった。3系だと各モジュールが分割されたため、「import urllib.request」と書く。が、今回は2系で作るので、3行目のように書く。
urllib — URL による任意のリソースへのアクセス
#詰みポイント2
##lxmlが無くて詰む
スクレイピングするなら、以下のソースコードはみたことがあると思う。
url="XXXXXXXXXXXXXXXXXXXXXXXXX"
html=urllib.urlopen(url).read()
soup=BeautifulSoup(html,"lxml")
Windowsで実行した時は普通に動作したので、「よし!いける!」何も考えずにラズパイに移して実行!!
Traceback (most recent call last):
File "/home/pi/jugyohenko.py", line 65, in <module>
soup=BeautifulSoup(html,"lxml")
File "/usr/local/lib/python2.7/dist-packages/bs4/__init__.py", line 165, in __init__
% ",".join(features))
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?
lxmlがないとか言われてるっぽいので入れる。
「pip install lxml」等でうまくいかなかったので本当にくじけそうだった。
以下に解決したコマンドを示す。
pi@raspberrypi:~ $ sudo apt-get install python-lxml
で、入ったか確認してみる
pi@raspberrypi:~ $ pip freeze | grep -e request -e lxml -e beautiful
beautifulsoup4==4.6.0
lxml==3.4.0
requests==2.4.3