Python
スクレイピング
技術書典5

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でスクレイピング
Pythonで単語の数え上げとかするならCounterを使うと便利なはなし

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で見て回ったりした感じだと、各々が好きな(ニッチな)分野に取り組んでいる印象がありました(同人誌なので当たり前といえば当たり前ですが)。

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