라즈파이로 스크래핑 할 때의 패킹 포인트

계기



다니고 있는 학교 홈페이지에서 수업 변경을 확인하지만 매번 보러 가는 것이 까다롭다.
Python2계에서 스크래핑하고 라즈파이에 LINE으로 통지한다.

현재 상태



스크래핑에는 성공했지만 문자 코드 문제로 LINE에 보낼 수 없어 막혔다.
그보다 이전 단계에서 여러 번 막혔기 때문에, 다른 사람의 힌트가 된다고 생각했다.

포장 포인트 1



모듈 가져오기로 포장



소스 코드의 일부를 이하에 나타낸다.

jugyohenko.py (일부 발췌)
#授業変更を取得する
#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이 없어서 포장



스크래핑한다면, 아래의 소스 코드는 본 적이 있다고 생각한다.

jugyohenko.py (일부 발췌)
url="XXXXXXXXXXXXXXXXXXXXXXXXX"
html=urllib.urlopen(url).read()
soup=BeautifulSoup(html,"lxml")

Windows에서 실행했을 때는 보통으로 동작했기 때문에, 「좋아! 갈 수 있다!」 아무것도 생각하지 않고 라즈파이에 옮겨 실행! !

ERROR
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

아. 들어가 있다.

그리고, 문자 코드의 수수께끼를 해명하면 수업 변경 알림 봇이 완성되는 ZOY!(흰 눈)

좋은 웹페이지 즐겨찾기