Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

Yahoo!知恵袋の閲覧数ランキングベスト20の質問を取得して'令和'が何個含まれるか調べる

 今日、新しい元号'令和'が発表されました。ネットでもこの話題で持ちきりです。ここではYahoo!知恵袋の閲覧数ランキングベスト20のページをスクレイピングして、そこに載っている20個の質問文の中に、'令和'がいくつ含まれているかを数えます。
f:id:T_A_T:20190401221341p:plain

使った関数
  • requests.get : Responseオブジェクトの取得
環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
準備

あらかじめ抽出したい要素がwebページでどのように書かれているかを把握します。pythonのコードでコメントアウトしているprint(soup)を有効にすると下のようにhtmlが表示されます。質問文は td class="cell3" の後に書かれているので、このclass="cell3"を指定することで、質問文のみを抽出します。

<td>  
<em class="icon-r1" title="1位">1位</em>  
</td>  
<td><em class="icon-same" title="→"></em></td>
<td class="cell3">
<a href="https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13205747608">>名前が令和と言います<wbr/>。これからどう生きて<wbr/>いけばいいですか。  
</a>    
</td>  
<td>3,753</td>  
コード
from bs4 import BeautifulSoup as bs #BeautifulSoupのインポート
import requests #requestsのインポート

url = "https://chiebukuro.yahoo.co.jp/ranking/ranking.php" #urlの指定
rs = requests.get(url) #Responseオブジェクトの取得
soup = bs(rs.text, 'html.parser') #BeautifulSoupオブジェクトの取得
#print(soup) #soupの表示
selected_class = soup.select(".cell3") #オブジェクトからclass".cell3"のみ選択

counter_sum=0 #カウンターの初期化

for i in selected_class: #selected_classリストの要素数forを実行
    counter_sum=counter_sum+str(i).count('令和') #要素中の'令和'をカウントしカウンターに加える
    print(i.text,'■■')  #要素のテキストを表示

print(counter_sum) #カウンターを表示

実行結果

Yahoo!知恵袋の閲覧数ランキングベスト20の質問内容が表示され、質問に含まれる'令和'の数 10 が表示されます。

質問内容 ■■

名前が令和と言います。これからどう生きていけばいいですか。
■■

グラブルのナゾブルの3封目の答えおしえてください
■■

新年号 令和アルファベットはL?R?



■■
10

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村