Webスクレイピングで技術書典5におけるトレンドを調べてみた

#はじめに
**技術書典5に参加はできませんでした**が、BOOTHの商品ページのタグを使って、技術書典5のトレンドを体感できたらいいなあと思ってやってみた記事です。


#技術書典とは

>新しい技術に出会えるお祭りです。 
技術書典は、いろんな技術の普及を手伝いたいとの想いではじまりました。 
技術書を中心として出展者はノウハウを詰め込み、来場者はこの場にしかないおもしろい技術書をさがし求める、技術に関わる人のための場として『技術書典』を開催します。
技術書典: https://techbookfest.org/

最近 (2018/10/08)、技術書典5が開催され、総来場者数は1万人を超えたようです。[^1]

#BOOTHとは

>BOOTHとは、pixivと連携した
ネットショップサービスです。
pixivで活躍しているクリエイターをはじめ、
様々なクリエイターの素敵な作品が
あなたを待っています。
BOOTH: https://booth.pm/customer_guide

技術書典で頒布された技術書も扱っており、参加できなかった人も手に入れることができます。

#ソースコード
BOOTHにおいて技術書典5で頒布された技術書のタグを取得し、各タグがいくつあるのかを数えます。

**コードの流れ**
1. 一覧ページのurlから、各商品ページのurlを取得
2. 各商品ページのurlから、タグを取得し順番にリストに追加
3. 各タグが何回出現するのかをカウントして、降順で表示


Python3でBeautifulSoup4, Counterを使いました。さらっと書いたので、色々あれかもしれないです。

**参考にした記事**
[PythonとBeautiful Soupでスクレイピング](https://qiita.com/itkr/items/513318a9b5b92bd56185)
[Pythonで単語の数え上げとかするならCounterを使うと便利なはなし](https://qiita.com/hatchinee/items/a904c1f8d732a4686c9d)



```python3:scraping_tech5.py
import urllib
from collections import Counter 
from bs4 import BeautifulSoup


#イベントを技術書典5に絞り込んだ際の一覧のurlを全て作成
urls = ["https://booth.pm/ja/events/techbookfest-5"]
lastpage_number = 15
for i in range(2, lastpage_number+1, 1):
    urls.append("https://booth.pm/ja/events/techbookfest-5" + "?page=" + str(i))


list_htmls = []
urls_item = []
data_tag = []


#一覧から各商品のページのurlを取得
for url in urls:
    html = urllib.request.urlopen(url)
    soup = BeautifulSoup(html, "html.parser")
    list_items = soup.find_all("a", target="_self", class_="nav")

    for item in list_items:
        urls_item.append(item.get("href"))


#商品のurlからtagを取得してカウント
for url in urls_item:
    html = urllib.request.urlopen(url)
    soup = BeautifulSoup(html, "html.parser")
    list_tags = soup.find_all("div", class_="search-guide-tablet-label-inner")
    for tag in list_tags:
        data_tag.append(tag.string)

counter = Counter(data_tag)
for word, cnt in counter.most_common():
    print(word, cnt)

```

#結果
4票以上のタグの一覧を以下に示します（技術書典や作者名に関連するタグなどは省きました）。

|          タグ|  回数|
|:--------------------:|:----:|
|プログラミング|28|
| JavaScript         | 17 |
| 電子工作           | 15 |
| Android            | 15 |
| iOS                | 13 |
| エンジニア         | 11 |
| Swift              | 9  |
| 自作キーボード     | 9  |
| AWS                | 8  |
| Unity              | 8  |
| React              | 8  |
| Firebase           | 7  |
| フロントエンド     | 7  |
| CSS                | 7  |
| 機械学習           | 6  |
| TypeScript         | 6  |
| Python             | 6  |
| 入門書             | 6  |
| Arduino            | 5  |
| キーボード         | 5  |
| クラウド           | 4  |
| テクニカルイラスト | 4  |
| VR                 | 4  |
| Xamarin            | 4  |
| C#                 | 4  |
| Qt                 | 4  |
| 強化学習           | 4  |
| Web                | 4  |
| スマートスピーカー | 4  |
| ラズパイ           | 4  |
| SSD                | 4  |
| C++                | 4  |

#感想
実際は、**表記ゆれ**で票がバラけているものがあったり（例えば、Golangなど）、あまり上手くいったとは言えませんが、雰囲気はなんとなくわかるような気がします（現地に行った人は比較してみてほしいです）。

また、4票以下の結果をみたり、BOOTHで見て回ったりした感じだと、各々が好きな（ニッチな）分野に取り組んでいる印象がありました（同人誌なので当たり前といえば当たり前ですが）。

参加者が増加して大変な面も多いとは思いますが、今後もこのような文化・イベントが継続すればいいなあと思っています。

[^1]: https://twitter.com/techbookfest/status/1049208448372465664 より