Pythonによるスクレイピング実践①GIGAZINEの記事タイトルと本文とSoundCloud音源URLを取得する

Daiさんの技術チュートリアルを理解するために、
お気に入りのサイトであるGIGAZINE様の記事を
Webスクレイピングしてみました。

これができると、

・高単価案件をココナラで一覧化できる。
・お悩みサイトから人々が抱く悩みや困り事を一覧化できる。
・手作業の人生から、おさらば。

使用環境書いておきます。

使用環境 OS:Windows7
Python環境:Jupyter Notebook
参考にしたDaiさんの技術チュートリアル
https://code.dividable.net/tutorials/python-scraping-blog/


早速やっていきます。

※Webスクレイピングとは?・・・『プログラムを使って、Web上コンテンツのダウンロード、処理を行うこと。』

今回のスクレイピング対象のURLが下記。

URL:『https://gigazine.net/news/20200516-changing-sound-of-cities/


Daiさんのチュートリアルはかなり分かり易い反面、
Daiさんのブログ以外へのスクレイピングに対応ができません。
(もちろん、コードのコピペでまず同じことができることは、
それはそれで大事なことです。何事も上達は、『上手い人の真似』からですからね。)

ですので、
あなた自身のお気に入りのサイトをスクレイピングするには、
ちょっとの応用が必要になってきます。
その際に、つまづくであろうポイントがいくつかあったので、
解説していきます。

まず、スクレイピングの全体像と流れについて。

サイト記事のURLからHTMLコードを取得する(読み込んで)

⇒  欲しいコンテンツだけを取得する (ふるいにかけて)
   ※今回はココまでの実施。
⇒  エクセルなどに見やすく出力する(書き出す)

となります。この中で『ふるいにかける』というのが、
初心者プログラマーにとって難しいところです。
なのでこの『ふるいにかける』について重点を置いて、解説していきます。

1. まず、サイト記事へアクセス。

2. F12キーでHTMLコードを見る。 

3. 赤枠をクリックし、記事がコードのどこのタグからタグまでに書かれているか?を確認する。 
 手順:①赤枠クリック 
    ②記事本文をクリック ※下の例では「世界中で~~」の段落 
    ③青枠内のさんかくをクリック ※薄い青色の部分
    ④記事の本文(テキストの文章)が、どこのタグから、
     タグまでに含まれているか?を確認する 
     ※例では、pタグ。スクロールしていくと
                      <p 属性名=属性値
      ~~~
      世界中で~~
      ~~~
      </p>
      となっているのが分かる。
  HTML言語は構造が入れ子(ロシア人形のマトリョーシカみたく)
  になっているので、始めはみつけにくい。

Googlechromeの開発者モード

4. 『ふるいをかける』プログラム文の修正をしてみる。
  『ふるいをかける』のによく使うメソッドの解説をします。
 ※これがすべてではない。 
         find_all("タグ名" , "属性名":属性値)
  ⇒ これは、
  『属性名が属性値であるタグ要素をすべて取得する』
  の意味です。
例だと、
    find_all("p",{"class":"preface"})
 ⇒
  『classがprefaceであるpタグをすべて取得する』
  となりますね。

5. 修正箇所がどう変わるか分かるようにprintで結果を出力する。

   プログラミング学習の上達において非常に重要なことを言います。
 何を変えて、何が変わったのか?がわからないと正しい出力に近づけることができません。printを各処理フェーズの前後に書いておけば、どこまでが合っている、合っていないの判断ができます。上手くいかなかったときの原因の切り分けができます。


早速、下記のコードでやってみます。

 #GIGAZINEのタイトルと本文とSOUNDCLOUDのURLの取得 #

from bs4 import BeautifulSoup
import requests
html_doc = requests.get("https://gigazine.net/news/20200516-changing-sound-of-cities/").text

soup = BeautifulSoup(html_doc,"html.parser")

tags = soup.find_all("h1",{"class":"title"})

for tag in tags:
   print(tag.text)#タイトルの取得
print("--------------------------------------------------------------------------------------------------------------------------------")    
tag2s = soup.find_all("p",{"class":"preface"})
for tag2 in tag2s:
   print(tag2.text)#本文の取得

print("--------------------------------------------------------------------------------------------------------------------------------")    

tag3s = soup.find_all("iframe")

for tag3 in tag3s:
   print(tag3.get("src"))#SoundCloudのURLの取得
   
print("--------------------------------------------------------------------------------------------------------------------------------")    


出力結果

おそらく最初で最後の貴重な「静まりかえった世界中の都市」の環境音を録音家が収集&公開中
-------------------------------------------------------------------------------------
私たちの日常は通常、車の走行音、飛行機が飛ぶ音、電子的なアナウンスなどにあふれていますが、新型コロナウイルス感染症(COVID-19)の影響でロックダウンが行われた都市は、他に類を見ないほど静まりかえっています。この数十年で最初で最後かもしれない貴重な「静まりかえった都市の環境音」が世界中の録音家によって収集され、公開されています。人の気配がない町に時折響く鐘の音、人工的なアナウンス、鳥の鳴き声などは、終末後の世界を想像させるとともに、どこか心落ち着くものとなっています。

Hear the Soundscapes of Cities Transformed - Atlas Obscura
https://www.atlasobscura.com/articles/changing-sound-of-cities

映画・テレビ・ゲーム・アプリ・ラジオのために世界中で「音」を採取・録音している「録音家」のマット・ミケルセンさんによると、工業化された世界で「自然の音」を採取することは、不可能とまではいえなくても非常に困難とのこと。たとえばアメリカ・ワシントン州にあるオリンピック国立公園で風の音や木々のさざめきを録音しようにも、頭上を15~20分ごとに飛行機が通っていくため、長時間にわたっての録音ができないそうです。

しかし、COVID-19で人々の活動が少なくなり、飛行機が飛ばなくなり、ロックダウンが行われた結果、過去に例をみないほどの「静かさ」が町に訪れています。ミケルセンさんがハイキングに出た際、通常は10分ごとに聞こえる飛行機の音は、3時間でわずか2回しか聞こえなかったとのことです。

「世界中で環境音が変化している」ということに気づいたミケルセンさんは、世界各地の録音家に連絡を取り、都市の環境音の変化を記録するというプロジェクトを実施。普段はにぎやかな都市の「おそらく最初で最後の静かな環境音」が録音されました。ミケルセンさんは「ヘッドフォンを通して、このユニークな体験を味わってみてください」と、収集された環境音をいくつか公開しています。

以下が世界各地で収集された環境音の一部です。
◆コヴェント・ガーデン(イギリス/ロンドン)
◆グランド・セントラル駅(アメリカ/ニューヨーク)
◆タイムズスクエア(アメリカ/ニューヨーク)
◆ロサンゼルス国際空港(アメリカ/ロサンゼルス)
◆ネータージー・スバース・チャンドラ・ボース国際空港(インド/コルカタ)
・関連コンテンツ
-------------------------------------------------------------------------------------
https://www.googletagmanager.com/ns.html?id=GTM-WKH2HB8
https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/798663820&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true
https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/798663793&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true
https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/798663709&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true
https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/798663790&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true
https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/798663829&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true
-------------------------------------------------------------------------------------

必要なことは、
HTMLコードの読み方と『ふるいにかける』メソッドを
正しく読み取って、正しくメソッドを使えることが必要です。

この記事が気に入ったらサポートをしてみませんか?