はじめに
コードブロック内で">"が">"に化けてるかもなので注意。今後直しますごめんなさい。
やりたいこと
Pythonを使ってここから最初の名言のみを抜き出す。いわゆるスクレイピング。ほぼほぼ後述する参考リンクの真似になるがPython練習ということで記事に残す。
準備
スクレイピングに必要なライブラリ(beautifulsoup4)をインストールする。初期状態だとpipすら導入されてなかったので、pipもインストール。
sudo apt-get install python-pip
sudo pip install beautifulsoup4
urllib2がインポートできない
ubuntu@ip-172-31-0-101:~/py_work$ python
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib.request, urllib.error
>>>
ここによると、Python3.Xではインポートの方法が異なるらしい。参考記事はPython2.Xでした。今回はPython3.5.2使ってます。
>>> import urllib.request, urllib.error
>>>
通った。しかしこんどはBeautifulSoupがインポートできない。
>>> from bs4 import BeautifulSoup
Traceback (most recent call last):
File "", line 1, in
ImportError: No module named 'bs4'
原因が判明。通常のpip install
の場合、Python2.X系に紐づくライブラリとしてインストールされていた。
ubuntu@ip-172-31-0-101:~/py_work$ sudo find / -name "*beautifulsoup4*"
/usr/local/lib/python2.7/dist-packages/beautifulsoup4-4.6.0.dist-info
ということでpip3をインストールしてデフォルトのpipコマンドとして使えるように修正して再度beautifulsoup4をインストール
sudo apt-get install python3-pip
echo "alias pip=pip3" >> ~/.bashrc
source ~/.bashrc
pip install beautifulsoup4
インポートできた
>>> from bs4 import BeautifulSoup
>>>
スクレイピングしてみた
ここを参考にスクリプトを作ってみるとこんな感じに出力された。
import urllib.request, urllib.error
from bs4 import BeautifulSoup
url = "http://www.meigensyu.com/quotations/index/random"
# URLにアクセスしてコンテンツを取得
html = urllib.request.urlopen(url)
# htmlで解析
soup = BeautifulSoup(html, "html.parser")
# 一番最初の"meigenbox"の"text"に保管された文字列のみを出力
print(soup.find(class_="meigenbox").find(class_="text").string)
出力結果
ubuntu@ip-172-31-0-101:~$ python meigen.py
人は、自然の悪を知ることを学んで死を軽蔑し、 社会の悪を知ることを学んで生を軽蔑する。
スクリプトのところは駆け足になってしまったので後日更新する。