paloma blog

NWエンジニアやってます。技術の備忘など。Pythonもちょっと。タイトルは好きなカクテルから。

スクレイピングでFワードを数える

映画が好きでよく見るんですが、パルプフィクションが面白くて3回くらい見てしまいました。
映画を見ていても感じるんですが、Wikiにもこんな記載があります。

パルプ・フィクション - Wikipedia

  • 劇中でのfxxkの使用回数は250回を超える。
    ※一応全編通して伏字にします。

本当に250回も言っているのか?
勉強中のスクレイピングで検証します。

コード

スクレイピングの書き方は勉強中のこちら
Automate the Boring Stuff with Python

#! python3

import requests, bs4
from collections import Counter, defaultdict

url = 'http://www.imsdb.com/scripts/Pulp-Fiction.html'

res = requests.get(url)
res.raise_for_status()

soup = bs4.BeautifulSoup(res.text, "html.parser")

# Search script
script = soup.pre.text
dict = Counter(script.split())

# Convert to lower case
lower_d = defaultdict(int)

for key, val in dict.items():
    lower_d[key.lower()] += val

# Search f-word
for key, val in lower_d.items():
    if key.find('fxxk') >= 0:
        print(key.ljust(40), str(val).rjust(1))

実行してみる

メインマシンは環境が汚いので、Fedora Python ClassroomのVagrant版で実行します。

(python3) [vagrant@localhost work]$ python pulp.py
fxxking                                  3
fxxkin'                                  91
motherfxxkers'                           1
fxxk                                     30
fxxk,                                    1
motherfxxkers!                           2
fxxked                                   7
motherfxxkin-house,                      1
motherfxxker                             5
motherfxxker.                            8
motherfxxker,                            2
english-motherfxxker-can-you-speak-      1
motherfxxkin'                            4
motherfxxkers                            3
fxxker                                   1
fxxks                                    1
fxxk's                                   3
motherfxxker!                            2
motherfxxker's                           1
fxxked-up                                1
motherfxxker"                            1
(python3) [vagrant@localhost work]$

取れました!
いろんなバリエーションがありますね。 

数を計算すると...169個!
あれ...全然少ない。
アドリブで言ってるってこと?
とりあえずうまいことスクレイピングできたので良しとします。

あとがき

復習がてらコードの解説も書こうと思ったけど長くなりそうなのでやめます。
簡単なコードですが、世の中に公開する私の初めてのコードになります。
これからもっと頑張って勉強したいと思います。
でも本業のインフラの勉強もやらないと!

おまけ

shellでやれば一発でした。

(python3) [vagrant@localhost work]$ curl -s http://www.imsdb.com/scripts/Pulp-Fiction.html | tr " " "\n" | grep [fF]xxk  | sort | uniq -c | awk '{s += $1} END {print s}'
169

詳細

(python3) [vagrant@localhost work]$ curl -s http://www.imsdb.com/scripts/Pulp-Fiction.html | tr " " "\n" | grep [fF]xxk  | sort | uniq -c
      1 English-motherfxxker-can-you-speak-
     25 fxxk
      1 fxxk,
      5 fxxk
      7 fxxked
      1 fxxked-up
      1 fxxker
     89 fxxkin'
      2 fxxkin'
      3 fxxking
      1 fxxks
      3 fxxk's
      3 motherfxxker
      2 motherfxxker,
      2 motherfxxker!
      8 motherfxxker.
      2 Motherfxxker
      1 Motherfxxker"
      3 motherfxxkers
      1 motherfxxker's
      2 motherfxxkers!
      1 motherfxxkers'
      4 motherfxxkin'
      1 motherfxxkin-house,