就活のためのキーワード収集

# 目的
就活で履歴書やエントリーシートで何を書こうと悩んだ時に，キーワードとなる単語があれば書きやすいかなと思いました．なので企業のサイトをスクレイピングして，形態素解析にかけ，出現頻度の高い単語をリストアップしようと考えました．

結論から言うと，微妙な結果に終わりました．

# 実行環境
Ubuntu 16.04.4 LTS
Python 3.5.2

# スクレイピング
スクレイピングするサイトはfreee株式会社の新卒採用ブログです．このサイトを選んだ理由はこの会社を志望しているからです．~~これを書いている今，1時面接の結果待ちです．~~おちました．

freeeさんの新卒採用ブログの最新記事のurlを基点に記事を遡っていきます．一つ前の記事のaタグにはrel属性にprevが指定してありますので，そのurlを取得します．なければ終了です．このブログの本文はspanタグとbタグで囲まれているので，これを取得します．

```python:Python3
import time
import urllib.request

from bs4 import BeautifulSoup

# 最初にアクセスするurl
url = 'http://jobs.freee.co.jp/recruitblog/aboutus/kauteishinkoku-freee-team/'

# 保存するcsvファイルを開く
f_span = open('freee_span.txt', 'a')
f_b = open('freee_b.txt', 'a')

while True:
    # urlにアクセスする htmlが帰ってくる
    html = urllib.request.urlopen(url)

    # htmlをbeautifulsoupで扱う
    soup = BeautifulSoup(html, 'html.parser')

    # spanとbタグの部分をすべて取得する
    span = soup.find_all('span')
    b = soup.find_all('b')

    # タグに囲まれた文字の部分を抽出します．抽出できない場合はスルーします．
    for tag in span:
        try:
            f_span.write(tag.string)
        except:
            pass
    for tag in b:
        try:
            f_b.write(tag.string)
        except:
            pass

    try:
        # 過去記事のurlを取得する．なければ終了する
        a = soup.find('a', rel='prev')
        url = a.attrs['href']
        time.sleep(1)
    except:
        print('すべて終了しました')
        break
```

# 形態素解析
次に形態素解析を行います．形態素解析はMeCabを使用しました．mecab-python3をインストールするのが一番苦労しました．やることはスクレイピングして得られた文章を形態素解析にかけ，名詞を抜き出し，重複をカウントして多い順に並べ替えることです．

```python:python3
import MeCab

# 読み込みファイル，書き込みファイル
read_file = 'freee_b.txt'
write_file = 'freee_b_kaiseki.txt'

# ファイル読み込み
f = open(read_file, 'r')
data = f.read()
f.close()

# taggerはデフォルト，
tagger = MeCab.Tagger()
nones = []

# 名詞ならnonesに追加する
for chunk in tagger.parse(data).splitlines()[: - 1]:
    (surface, feature) = chunk.split('\t')
    feature = feature.split(',')[0]
    if feature == '名詞':
        nones.append(surface)

# 重複する要素を数え上げ，降順にソートする
rank = [[word, nones.count(word)] for word in set(nones)]
rank.sort(key=lambda x: x[1], reverse=True)

# 得られた結果をファイルに書き込む
f = open(write_file, 'w')
for element in rank:
    f.write(element[0] + ' ' + str(element[1]) + '\n')
f.close()
```

# 結果(一部)
正直参考になるとは思えない，微妙な結果に終わってしまいました．

```text:text
freee 286
- 219
採用 162
こと 121
新卒 96
の 90
人 87
中途 74
エンジニア 61
さん 60
入社 58
インターン 55
的 53
ん 53
よう 53
会社 53
自分 48
年 45
チーム 41
仕事 37
1 35
開発 35
担当 34
月 32
成長 32
メンバー 31
内定 30
中 30
2017 30
者 29
営業 28
企業 28
何 27
社員 27
方 27
事業 26
会計 26
セールス 26
イベント 25
そう 25
後 22
私 22
ビジネス 21
笑 20
2016 20
今 20
経験 20
式 20
```

# 改善点
記号とか数字をそのままにしているので，取り除きたい．
多分大規模なデータだとメモリ足りないし，時間もかかる．
htmlの構造を読み解けばもっと良い収集の仕方があると思う．

# 感想
スクレイピングの本を1冊でも読んでおけば，もっといいのがかけたかもしれない．
もっといいやり方が有ればおしえてください．
自己PR自動生成やってみたい

# 参考
[Python Webスクレイピング 実践入門 - Qiita](https://qiita.com/Azunyan1111/items/9b3d16428d2bcc7c9406)
[Python3でmecabを使う - Qiita](https://qiita.com/piruty/items/5ae2c2ba660796112207)
[Python3で、urllibとBeautifulSoupを使ってWebページを読み込む](http://minus9d.hatenablog.com/entry/2015/07/07/225304)
[Pythonでリストの重複要素アレコレ - PY BLOG](https://www.souya.biz/blog2/pinevillage/2017/09/08/python%E3%81%A7%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E9%87%8D%E8%A4%87%E8%A6%81%E7%B4%A0%E3%82%A2%E3%83%AC%E3%82%B3%E3%83%AC/)
[PythonでのMeCabを速くするtips - Qiita](https://qiita.com/yukinoi/items/81a707c1317c97f5fdf9)
[Pythonでテキストマイニング　①形態素解析(再：Linux版) - Qiita](https://qiita.com/furipon/items/0d626f4a943c99fe32c6)