ばーろぐわにる

SIerからWEB系?インフラエンジニアにジョブチェンジした見習いの備忘録

Pythonでスクレイピング

はじめに

コードブロック内で">"が">"に化けてるかもなので注意。今後直しますごめんなさい。

やりたいこと

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
人は、自然の悪を知ることを学んで死を軽蔑し、 社会の悪を知ることを学んで生を軽蔑する。

スクリプトのところは駆け足になってしまったので後日更新する。

 

参考

https://qiita.com/Azunyan1111/items/9b3d16428d2bcc7c9406