Pythonのスクレイピングができるライブラリは、Requestsライブラリと、Beautifl Soupライブラリがあります。
今回はより初心者向けのBeautifl Soupライブラリを使います。
事前準備
python3とpip3のインストール
python3が入っていない人は、pythonを入れておきましょう。
このコマンドでpip3も同時にインストールされます。
$ brew install python3
無事にインストールできたか確認します。
$ python3 --version
Python 3.6.5
$ pip3 --version
pip 10.0.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)
これでオーケー!!
webページを取得するためにRequestsをインストールする
先ほどのpipを使って、Requestsをインストールします。
$ pip3 install requests
ちょっとだけRequestsの使い方を勉強しました
- ファイルの先頭でインポートする必要がある
import requests
基本的な使い方はこちらを参照ください。↓↓
Requests の使い方 (Python Library)
多分、全部書くと恐ろしく見にくい記事になってしまう。
Beautiful Soupをインストールする
$ pip3 install beautifulsoup4
pythonの開発環境を整える
XAMPPでpythonを使おうと思ったんですけど、うまくいかず。
anacondaで開発環境を整えたいと思います!
開発環境がある方は飛ばしてください。
- anacondaインストール
ココからインストールできます。
先ほどpython3をインストールしたので、python3.Xの方をインストールしてください。
これはwindows向けですが、macも似たようにやるとできたので、これをもとにインストールを進めると良いと思います
科学計算向けPython環境を簡単にインストールできる「Anaconda」入門
anacondaをインストールしたら、launchpadから「anaconda navigator」っていうのがあると思うので、それを押してください。
そして、jupyter notebookのところの「launch」をクリックします。すると、jupyter notebookが開きます。
newから、python3を選べば、オーケー
実践してみる
Qiitaにアクセスして、適当にデータをとってみる
import requests
r = requests.get('https://qiita.com/') # Qiitaのデータをとる
r.content # データの中身を表示
結果はこれ
すごいことになってるwww
なるほどね、なるほどね
Qiitaにアクセスしてhtmlのデータを取得してみる
import requests
from bs4 import BeautifulSoup
r = requests.get('https://qiita.com/')
data = BeautifulSoup(r.text, 'html.parser')
data
なるほどなるほど、
NewsPicksのホーム画面にあるニュースのタイトルを取得する
早速ですがコードはこちら
import requests
from bs4 import BeautifulSoup
r = requests.get('https://newspicks.com/')
data = BeautifulSoup(r.text, 'html.parser')
elems = data.find_all("div", class_="title _ellipsis")
for e in elems:
print(e.getText())
おーすげええ
html要素を特定する時に使える小技
これやったらめっちゃわかりやすくコードを書けました
手順
- pythonのコードと同じところに「data.html」を作る ←名前はなんでもいいですが
- 下記のコードを自分でアレンジして貼る(with以降がデータを上書きするコードです)
import requests
from bs4 import BeautifulSoup
r = requests.get('https://newspicks.com/')
data = BeautifulSoup(r.text, 'html.parser') # 書き込みたいデータ
with open('data.html', mode='w', encoding = 'utf-8') as fw:
fw.write(data.prettify()) # data.htmlに書き込みモードで「data」を整形して上書きします!
そうしたら、長いの一部だけ見せますが、こんな感じになりました
!DOCTYPE html>
<html class="anonymous">
<head>
<meta charset="utf-8"/>
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta content="width=device-width,user-scalable=no" name="viewport"/>
<meta content="origin" name="referrer"/>
<meta content="PF0KOWBojqnTWtUDrPqsejuE9xPUPqVEJWMdoodG5Aw" name="google-site-verification"/>
<title>
NewsPicks | 経済を、もっとおもしろく。
</title>
<link href="https://newspicks.com/favicon.ico" rel="shortcut icon"/>
<meta content="newspicks,dow jones,news,economics,politics" name="keywords"/>
<link href="https://newspicks.com/" rel="canonical"/>
<link href="https://newspicks.com/np_logo.png" rel="apple-touch-icon"/>
<link href="" rel="alternate"/>
<meta content="「経済を、もっとおもしろく。」ビジネスパーソンや就活生必携のソーシャル経済メディア。国内外の最先端の経済ニュースを厳選。専門家や著名人の解説コメントでニュースがわかる。" name="description"/>
<meta content="NewsPicks | 経済を、もっとおもしろく。" property="og:title"/>
<meta content="website" property="og:type"/>
<meta content="https://newspicks.com/" property="og:url"/>
<meta content="NewsPicks" property="og:site_name"/>
<meta content="「経済を、もっとおもしろく。」ビジネスパーソンや就活生必携のソーシャル経済メディア。国内外の最先端の経済ニュースを厳選。専門家や著名人の解説コメントでニュースがわかる。" property="og:description"/>
<meta content="https://newspicks.com/ogp.png" property="og:image"/>
<meta content="ja_JP" property="og:locale"/>
<meta content="summary" name="twitter:card"/>
<meta content="@NewsPicks" name="twitter:site"/>
<meta content="@NewsPicks" name="twitter:creator"/>
<meta content="NewsPicks | 経済を、もっとおもしろく。" name="twitter:title"/>
<meta content="「経済を、もっとおもしろく。」ビジネスパーソンや就活生必携のソーシャル経済メディア。国内外の最先端の経済ニュースを厳選。専門家や著名人の解説コメントでニュースがわかる。" name="twitter:description"/>
<meta content="https://newspicks.com/ogp.png" name="twitter:image"/>
<meta content="JP" name="twitter:app:country"/>
<!-- まだまだ下に続きますが、省略します -->
すげええええ
簡単にできたーーー
参考ウェブサイト
初心者向けにPythonでWebスクレイピングをする方法をまとめる