PythonでWebクローラー+スクレイピング その1
Python3 + requests + BeatifulSoup4 + MeCab + MongoDB を使って西野七瀬の公式ブログを解析してやるっ!
tl;dr
とりあえず各ライブラリのインストールと基本的な使い方を調べた.
対象サイト
西野七瀬 公式ブログ
生物界最強の可愛さ.
目的
西野七瀬の公式ブログを巡回して, 今までの記事を全件データベースに保存する.
そして形態素解析をして, 西野七瀬botを作成し, 新世界の神となる.
BeautifulSoup4 + requests
BeautifulSoup4 + requestsでブログをHTML解析する.
requests
PythonのHTTPライブラリは
urllib2
よりrequests
がラクらしい.
Requests: 人間のためのHTTP
pip install requests
import requests
url = 'http://blog.nogizaka46.com/nanase.nishino/'
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers) # <Response [200]>
headers
を適当に付与しないと403
が返ってくるページがある.
BeautifulSoup4
いわずとしれたHTML解析ライブラリ.
他にpyqueryがある.
Beautiful Soup Documentation
pip install beautifulsoup4
import requests
from bs4 import BeautifulSoup
url = 'http://blog.nogizaka46.com/nanase.nishino/'
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers) # <Response [200]>
soup = BeautifulSoup(response.text, 'html.parser')
<div class="right2in"></div>
内を取得するときは,
right2in_content = soup.find(attrs={'class': 'right2in'})
この要素は一つしかないのでfind_all
メソッドではなくfind
メソッドを利用.
さらに入れ子の中の<h1 class="clearfix"></h1>
も全件取得したい.
clearfix_contents = right2in_content.find_all(attrs={'class': 'clearfix'})
[<h1 class="clearfix"><span class="date"><span class="yearmonth">2017/01</span><span class="daydate"><span class="dd1">31</span><span class="dd2">Tue</span></span></span><span class="heading"><span class="author">西野七瀬</span><span class="entrytitle"><a href="http://blog.nogizaka46.com/nanase.nishino/2017/01/036710.php" rel="bookmark">冷たい爪</a></span></span></h1>,
<h1 class="clearfix"><span class="date"><span class="yearmonth">2017/01</span><span class="daydate"><span class="dd1">13</span><span class="dd2">Fri</span></span></span><span class="heading"><span class="author">西野七瀬</span><span class="entrytitle"><a href="http://blog.nogizaka46.com/nanase.nishino/2017/01/036476.php" rel="bookmark">りんご風呂</a></span></span></h1>,
<h1 class="clearfix"><span class="date"><span class="yearmonth">2017/01</span><span class="daydate"><span class="dd1">08</span><span class="dd2">Sun</span></span></span><span class="heading"><span class="author">西野七瀬</span><span class="entrytitle"><a href="http://blog.nogizaka46.com/nanase.nishino/2017/01/036348.php" rel="bookmark">賀正</a></span></span></h1>,
<h1 class="clearfix"><span class="date"><span class="yearmonth">2016/12</span><span class="daydate"><span class="dd1">31</span><span class="dd2">Sat</span></span></span><span class="heading"><span class="author">西野七瀬</span><span class="entrytitle"><a href="http://blog.nogizaka46.com/nanase.nishino/2016/12/036220.php" rel="bookmark">紙とペン</a></span></span></h1>,
<h1 class="clearfix"><span class="date"><span class="yearmonth">2016/11</span><span class="daydate"><span class="dd1">25</span><span class="dd2">Fri</span></span></span><span class="heading"><span class="author">西野七瀬</span><span class="entrytitle"><a href="http://blog.nogizaka46.com/nanase.nishino/2016/11/035603.php" rel="bookmark">定食好き</a></span></span></h1>]
</span></span></span></h>]
Mecab
Mecabをインストール
brew
で入れる
$ brew install mecab mecab-ipadic
Pythonドライバー
pip
で入れられる
pip install mecab-python3
実装例
import MeCab
m = MeCab.Tagger('-Ochasen')
print(m.parse('テストです'))
テスト テスト テスト 名詞-サ変接続
です デス です 助動詞 特殊・デス 基本形
EOS
import MeCab
m = MeCab.Tagger('-Ochasen')
node = m.parseToNode('テストです')
# node.surface 単語
# node.feature 単語の品詞などの情報
while node:
print(node.surface)
node = node.next
テスト
です
まとめ
とりあえずインストールした.
Comments !