エンジニア女子が触れているプログラミング言語の傾向をPythonを使って分析する - (エピソード1)

まえがき - エンジニア女子はどういう技術に触れている割合が高いのか?

先日こんなことを呟きました。

そこからの流れでエンジニア女子について調べてみました。
(結果的に女性エンジニアの社会進出などについても軽く触れています。)

以上の流れから、エンジニア女子はどういう技術に触れている割合が高いのか?を探ってみることにしました。
これらを調べることにより、

・男性にとっては、エンジニア女子との合コンで盛り上がる技術ネタはなにか?
・女性にとっては、女性同士の技術トークでどういう話をすれば相手の食いつきが良くなりそうか?

という、以上2つのことが分かってきそうです。

というわけで今回から複数回に分けて、エンジニア女子は実際どんな技術によく触れているのか?を探っていこうと思います。


参考にする情報元

今回は以前このブログでも記載した、下記の記事を情報元として使わせてもらおうと思います。
こちらのエンジニア女子に関する記事のテキストから、多く使われている技術ワードを見ていく、という流れで考えています

もちろん、情報源がかなり限定されていることで、実際にエンジニア女子が使用している傾向にマッチするかは怪しいところではあります。
が、ひとまずは最初の一歩ということで考えるよりやってみよう精神でやっていこうと思います。

Webスクレイピングの注意事項

今回は調査のためにPythonでエンジニア女子関連の記事に対してwebスクレイピングを行おうと思います。
(1ページずつ開いてテキストをチェックして、というのはしんどいので)
が、これは方法を誤ると大問題になりかねないので、まずは下記の注意事項を読んでおきます。

また、一応これを企画する前に情報元サイトのrobots.txtはチェックしておきましたが、とくに禁止はされていないので問題はなさそうです。
(ただし、もちろん常識的に許される範囲での使用であることは必須かと思います)

robots.txt

robots.txt内に一応、下記のような記述があるので、各ページへのアクセスは5秒感覚にしておきましょう。相手への思いやりは大事ですね。

User-agent: bingbot
Crawl-Delay: 5

今週のエンジニア女子に関するニュース一覧を分析する

webスクレイピングするとは言え、上にも書いたように相手のサーバへの負荷はかけたくありませんし、なるべくなら少ないアクセス数で必要な情報だけを自動化して取得したいところ。
ニュース一覧の記事の構成を分析しましょう。

ニュース一覧のページを見ると、ページ下部にpaginationがあるので、こちらから他のページへ遷移できるようです。
例えば2ページ目に遷移した際にURLの末尾に

?page=2

というqueryが付きます。
ということはこのpageの数を足していくことで効率的に各一覧ページに遷移していけそうです。
見たところページは全部で4ページなので、1から4の値をここに入れてアクセスするようにすれば、一覧ページについては4回分のアクセスだけで事足りてしまいます。

一覧ページにアクセスした際に、各ページへのリンクURLを抽出し、ファイルに保存するようにします。
これで記事にアクセスするためのURLリストが取得できるので、これを使って更に記事へのアクセス→テキストを取得、という流れで作業を進めていけそうです。

各一覧ページ内の記事URLをPythonで取得する

早速コードを書いてみました。
書捨てのスクリプトとしてサクッと書いたので細かなところで修正点は残っているかと思いますが、下のコードで実現は可能です。

fetchurls.py

import requests
from bs4 import BeautifulSoup
from time import sleep

def main():
    print("=== 処理を開始します ===")

    # macでのheaderを記載
    header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}

    # 対象URL関連
    hostname = "https://www.rbbtoday.com/"
    siteUrl = "https://www.rbbtoday.com/special/4170/recent/%E4%BB%8A%E9%80%B1%E3%81%AE%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%A5%B3%E5%AD%90"

    # URLリストを書き出すファイル名
    file_path = "./urllist.txt"

    with open(file_path, mode='w') as f:
        # 4ページ分取得するため
        for i in range(4):
            sleep(5)
            targetUrl = siteUrl + "?page=" + str(i + 1)
            print("対象URL : ", targetUrl)

            r = requests.get(targetUrl, headers=header)

            if(r.status_code != 200):
                print("=== アクセスに失敗しました: status_codeが200以外を返しています ===")
                return False

            soup = BeautifulSoup(r.text, 'lxml')
            items = soup.find_all("section", class_="item--normal")

            for item in items:
                print(hostname + item.find('a')['href'])
                f.write(hostname + item.find('a')['href'] + "\n")

    print("=== 処理が完了しました ===")

if __name__ == "__main__":
    main()

これを実行する場合、まずはrequestslxmlbeautifulsoup4という3つのライブラリをインストールする必要がありますので、pipコマンドなどを用いてインストールしてもらえたらと思います。

実行は下記のコマンドで行けるかと思います。
(なお、python3前提でコードは書いているので、私の環境では下記のように実行します)

python3 fetchurls.py

実行結果は下のようになるかと思います。

=== 処理を開始します ===
対象URL :  https://www.rbbtoday.com/special/4170/recent/%E4%BB%8A%E9%80%B1%E3%81%AE%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%A5%B3%E5%AD%90?page=1
https://www.rbbtoday.com//article/2019/01/28/167294.html
https://www.rbbtoday.com//article/2019/01/24/167141.html
https://www.rbbtoday.com//article/2018/11/06/164954.html
https://www.rbbtoday.com//article/2018/09/21/163792.html
https://www.rbbtoday.com//article/2018/08/07/162598.html
https://www.rbbtoday.com//article/2018/07/23/162238.html
https://www.rbbtoday.com//article/2018/06/25/161548.html
~~~

実行が終了すると、カレントディレクトリにurllist.txtというファイルが生成されており、そこに各記事へのURL一覧が記載されています。
こちらのURLを元に各記事へのアクセスを、次回以降書いていこうと思います。

Pythonでのwebスクレイピング入門

駆け足で一連の流れを書いていきましたが、これらのやり方に馴染みがない方のために、どういうところを学べばよいかを下に書き出しておきます。
webスクレイピング周りについて初めて学習される方の参考になれば幸いです。

Python3入門に必要なこと 

基本的には公式ドキュメントを見ていくのが入門への一番の確実な方法かと思います。なので、まずはこちらを読んでみることをおすすめします。

ドットインストール - Python3 入門

自分自身はすでに入門済みということもあり、この動画は見ていませんが、無料でpython3に入門するなら、ドットインストールの解説はやはり有用そうです。ただし、無料は最初だけで、途中から有料になるようですね。
(どなたか実際に見た方は感想などコメントもらえると幸いです)

requests 入門

対象のページにアクセスする際にrequestsというライブラリを使用しています。
webスクレイピングする際によく使うものかと思うので、公式ドキュメントを読んでおくことがおすすめです。
また、"request 使い方 python"などで検索すると使い方についてはたくさん出てくると思います。

beautifulsoup4 入門

こちらもよく使うもの。取得したhtmlをパースする際にはほぼほぼ必須になるかと思います。
beautifulsoup4でやれることを熟知しておけばスラスラとスクレイピングに関するコードは書けるようになるはず。
(自分は熟知していないので、ドキュメントとにらめっこしながらコード書いています)

というわけで、駆け足で書いていきましたが、次回は取得したURLから記事のテキストを抽出するところまでを書いていこうと思います。

頂いたサポートは、より面白い記事を執筆するためのリサーチ費用やクラウド導入費用など、何らかの用途に使用していきたいと考えています。