「退屈なことはPythonにやらせよう」という本を買って読んだので、紹介されている内容を参考に生まれて初めてのWebスクレイピングをやってみます。
今回はYahoo!トップページのトップニュースの部分のテキストを抜き出してみます。
環境
まずは環境の確認。
開発用マシンのOSはLinux Mintです。バージョンは、
$ lsb_release -r Release: 17.2
次に、Pythonのバージョンを確認します。「退屈なことはPythonにやらせよう」はPython3を前提として書かれているため、Python3がインストールされているか確認します。
$ Python --version Python 2.7.6
あれ?こっちか?
$ Python3 --version Python 3.4.3
pipのインストール
今回の開発では標準のPythonに含まれていないサードパーティ製モジュールを使用します。Pythonでサードパーティ製モジュールをインストールするには、pipというパッケージ管理ツールを使用すると便利です。
ちなみに、pipの正しい読み方は何なのでしょうか?私はピップと読んでいますが・・・。
まずはインストールされているか確認。
$ pip3 --version プログラム 'pip3' はまだインストールされていません。 次のように入力することでインストールできます: sudo apt-get install python3-pip
ということなのでインストールします。
$ sudo apt-get install python3-pip
サードパーティ製モジュールのインストール
今回は、以下のモジュールを使用します。
- Requests
- BeautifulSoup4
「Requests」というモジュールはWebページをダウンロードするために使用するモジュールです。
「BeautifulSoup4」というモジュールはHTMLを解析して扱いやすくしてくれるモジュールです。
では、インストールしていきます。
$ sudo pip3 install requests $ sudo pip3 install beautifulsoup4
HTMLコードの解析
スクリプトを書く前に、対象部分のHTMLコードを確認しておきます。
<div id="topicsboxbd" class="bdA2 "> <div id="topicsfb" class="current"><div class="topicsindex"><em>20時8分更新</em> <ul class="emphasis"> <li><a href="https://rdsig.yahoo.co.jp/_ylt=A2RiWbOsdj5ZxzkAseZ8cQF8/RV=2/RE=1497352236/RH=cmRzaWcueWFob28uY28uanA-/RB=.lwRqKSUzJir3cXAxYuJJHO27Sc-/RU=aHR0cHM6Ly9uZXdzLnlhaG9vLmNvLmpwL3BpY2t1cC82MjQzMDUwAA--/RK=0/RS=lOx9U7a5j466JpBWD7zFqwaPTN8-">5人被曝 プルトニウム不検出<span class="iconPhoto" title="写真">写真</span></a></li> <li><a href="https://rdsig.yahoo.co.jp/_ylt=A2RiWbOsdj5ZxzkAsuZ8cQF8/RV=2/RE=1497352236/RH=cmRzaWcueWFob28uY28uanA-/RB=.lwRqKSUzJir3cXAxYuJJHO27Sc-/RU=aHR0cHM6Ly9uZXdzLnlhaG9vLmNvLmpwL3BpY2t1cC82MjQzMDU0AA--/RK=0/RS=4JSwbXj0plHKKZKQ4eIqpN7YY0Q-">防災訓練の高校生112人食中毒<span class="iconVideo" title="動画">動画</span><span class="iconNew" title="NEW">NEW</span></a></li> <li><a href="https://rdsig.yahoo.co.jp/_ylt=A2RiWbOsdj5ZxzkAs.Z8cQF8/RV=2/RE=1497352236/RH=cmRzaWcueWFob28uY28uanA-/RB=.lwRqKSUzJir3cXAxYuJJHO27Sc-/RU=aHR0cHM6Ly9uZXdzLnlhaG9vLmNvLmpwL3BpY2t1cC82MjQzMDIzAA--/RK=0/RS=Hm9piDu6P0ZNssgxjSFe_we4Z70-">薬物で著書も 「教授」逮捕<span class="iconPhoto" title="写真">写真</span><span class="iconNew" title="NEW">NEW</span></a></li> <li><a href="https://rdsig.yahoo.co.jp/_ylt=A2RiWbOsdj5ZxzkAtOZ8cQF8/RV=2/RE=1497352236/RH=cmRzaWcueWFob28uY28uanA-/RB=.lwRqKSUzJir3cXAxYuJJHO27Sc-/RU=aHR0cHM6Ly9uZXdzLnlhaG9vLmNvLmpwL3BpY2t1cC82MjQzMDUyAA--/RK=0/RS=HWnBDex6N.5pZEWNjkU9XEbbHU0-">静岡のロリエ常盤家が倒産</a></li> <li><a href="https://rdsig.yahoo.co.jp/_ylt=A2RiWbOsdj5ZxzkAteZ8cQF8/RV=2/RE=1497352236/RH=cmRzaWcueWFob28uY28uanA-/RB=.lwRqKSUzJir3cXAxYuJJHO27Sc-/RU=aHR0cHM6Ly9uZXdzLnlhaG9vLmNvLmpwL3BpY2t1cC82MjQzMDQ3AA--/RK=0/RS=aWmypH_P5xWDjLtFc9NhDeV5Fvc-">苦戦かっぱ寿司 食べ放題試行<span class="iconPhoto" title="写真">写真</span></a></li> <li><a href="https://rdsig.yahoo.co.jp/_ylt=A2RiWbOsdj5ZxzkAtuZ8cQF8/RV=2/RE=1497352236/RH=cmRzaWcueWFob28uY28uanA-/RB=.lwRqKSUzJir3cXAxYuJJHO27Sc-/RU=aHR0cHM6Ly9uZXdzLnlhaG9vLmNvLmpwL3BpY2t1cC82MjQzMDUzAA--/RK=0/RS=gkht8tRsMI7.AkHOf0qXzsH2F.4-">パラボラを網状に 新技術開発<span class="iconPhoto" title="写真">写真</span><span class="iconNew" title="NEW">NEW</span></a></li> <li><a href="https://rdsig.yahoo.co.jp/_ylt=A2RiWbOsdj5ZxzkAt.Z8cQF8/RV=2/RE=1497352236/RH=cmRzaWcueWFob28uY28uanA-/RB=.lwRqKSUzJir3cXAxYuJJHO27Sc-/RU=aHR0cHM6Ly9uZXdzLnlhaG9vLmNvLmpwL3BpY2t1cC82MjQzMDQ1AA--/RK=0/RS=qZB9cTeDqdiHOWGQfTVE6TGvkZk-">史上最高の右打ち打者は誰か<span class="iconPhoto" title="写真">写真</span></a></li> <li><a href="https://rdsig.yahoo.co.jp/_ylt=A2RiWbOsdj5ZxzkAuOZ8cQF8/RV=2/RE=1497352236/RH=cmRzaWcueWFob28uY28uanA-/RB=.lwRqKSUzJir3cXAxYuJJHO27Sc-/RU=aHR0cHM6Ly9uZXdzLnlhaG9vLmNvLmpwL3BpY2t1cC82MjQzMDQ5AA--/RK=0/RS=n1r9e6UfN9DOtJ9GZt4YercBeWY-">アニサマ オタ芸を全面禁止に<span class="iconPhoto" title="写真">写真</span></a></li></ul><ul class="more"><li class="first"><a href="https://rdsig.yahoo.co.jp/_ylt=A2RiWbOsdj5ZxzkAueZ8cQF8/RV=2/RE=1497352236/RH=cmRzaWcueWFob28uY28uanA-/RB=.lwRqKSUzJir3cXAxYuJJHO27Sc-/RU=aHR0cHM6Ly9uZXdzLnlhaG9vLmNvLmpwL2xpc3QvP2Q9MjAxNzA2MTImbWM9ZiZtcD1mAA--/RK=0/RS=0YTFDy0UdZZqWCRcd3ZHaYrNyvQ-">もっと見る</a></li> <li><a href="http://rdsig.yahoo.co.jp/_ylt=A2RiWbOsdj5ZxzkAuuZ8cQF8/RV=2/RE=1497352236/RH=cmRzaWcueWFob28uY28uanA-/RB=.lwRqKSUzJir3cXAxYuJJHO27Sc-/RU=aHR0cDovL25ld3MueWFob28uY28uanAvZmMA/RK=0/RS=pwhkORbk4NtDATZKERyFEESCx14-">記事一覧</a></li></ul></div><div class="topicscatch"><div class="topicsdetail bdB4 bgB5"><div class="topicsimg"><a href="https://rdsig.yahoo.co.jp/_ylt=A2RiWbOsdj5ZxzkAu.Z8cQF8/RV=2/RE=1497352236/RH=cmRzaWcueWFob28uY28uanA-/RB=.lwRqKSUzJir3cXAxYuJJHO27Sc-/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE3MDYxMi0wMDAwMDAzNC1qaWpwLXNvY2kudmlldy0wMDAA/RK=0/RS=FlMjlZ0IQgLcJ2RsQGWjEB5fM3Y-" id="tpcsimgfilter" class="imgfilter" style="background-image:url(https://lpt.c.yimg.jp/im_sigg0KFNLd6xxTv8wjLIlkwaFQ---x120-y120/amd/20170612-00000034-jijp-000-view.jpg);width:120px;height:100px;" title="世話をするシンシン">世話をするシンシン</a></div><p><a href="https://rdsig.yahoo.co.jp/_ylt=A2RiWbOsdj5ZxzkAvOZ8cQF8/RV=2/RE=1497352236/RH=cmRzaWcueWFob28uY28uanA-/RB=.lwRqKSUzJir3cXAxYuJJHO27Sc-/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE3MDYxMi0wMDAwMDAzNC1qaWpwLXNvY2kudmlldy0wMDAA/RK=0/RS=FlMjlZ0IQgLcJ2RsQGWjEB5fM3Y-">世話をするシンシン</a></p><em>6月12日16時6分配信</em><cite>時事通信</cite> </div></div></div> <div id="economyfb" class=""></div> <div id="entertainmentfb" class=""></div> <div id="sportsfb" class=""></div> <div id="domesticfb" class=""></div> <div id="worldfb" class=""></div> <div id="scientificfb" class=""></div> <div id="localfb" class=""></div> </div> </div>
作ったスクリプト
#! python3 import requests, bs4 #Webページを取得 res = requests.get('https://www.yahoo.co.jp/') #BeautifulSoupオブジェクトに変換 soup = bs4.BeautifulSoup(res.text,'lxml') #本には書かれていないが第2引数に'lxml'をつけないとエラーになる #セレクタを指定して表示 elems = soup.select('a') for e in elems: print(e.getText())
結果
ヘルプ Internet Explorerの互換表示について 感謝の気持ちを伝える、「父の日」ギフト特集 白木屋や笑笑など、居酒屋の飲み放題が割引に アンケートに答えて最大5万ポイントが当たる 5人被曝 プルトニウム不検出 英EU離脱 交渉撤退も選択肢 市議長 小学生の傍聴を認めず 薬物で著書も 「教授」逮捕 静岡のロリエ常盤家が倒産 苦戦かっぱ寿司 食べ放題試行 イラク戦 なぜ酷暑の夕方に 50kg減量 父子3人王者目指す もっと見る 記事一覧 ハダカの共演 ショッピング ヤフオク! 旅行、ホテル予約 ニュース 天気 〜以下省略〜
はい。妥協しました。soup.select(‘a’)のところのセレクタの指定の仕方がわかりません。もうちょい勉強しますorz
コメント