俺人〜OREGIN〜俺、バカだから人工知能に代わりに頑張ってもらうまでのお話

俺って、おバカさんなので、とっても優秀な人工知能を作って代わりに頑張ってもらうことにしました。世界の端っこでおバカな俺が夢の達成に向けてチマチマ頑張る、そんな小さなお話です。現在はG検定、E資格に合格し、KaggleやProbSpaceのコンペに参画しながら、Pythonや機械学習、統計学、Dockerなどの勉強中です。学習したことをブログにアウトプットすることで、自分の身に着けていきたいと思います。まだまだ道半ばですが、お時間がありましたら見て行ってください。

ブログページから記事タイトル一覧を出力(Pythonによるスクレイピング&機械学習テクニック)

今回は、 Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]の第2章を参考にさせていただきながら、Selenium+PhantomJS(画面なしブラウザ)で、ブログページから記事タイトル一覧を出力できるようになりました。

Docker上に構築した、Selenium+PhntomJSの実行環境を使いました。

Selenium+PhntomJSの実行環境の構築に関しては、以下の記事をご参照ください。

oregin-ai.hatenablog.com

 

ブログページから記事タイトル一覧を出力する。

1.全体像

今回は、ブログのトップページにアクセスして、記事のリストを取得して、タイトルとそのURLを出力するコードを作っていきます。

全体像は以下の通りです。

f:id:kanriyou_h004:20200426180358p:plain

図1.全体像

以下のコードを、「blog_title_list.py」に保存しました。

from selenium import webdriver

URL = 'https://oregin-ai.hatenablog.com/'

 

browser = webdriver.PhantomJS()
browser.implicitly_wait(3)

 

browser.get(URL)
print('トップページにアクセスしました')

 

kiji_list =

links = browser.find_elements_by_css_selector('h1.entry-title a')


for a in links:
    href = a.get_attribute('href')
    title = a.text
    kiji_list.append((href, title))
print('+ タイトルを{0}件取得しました'.format(len(kiji_list)))


for href, title in kiji_list:
    print('- ', '[',title,']:',href)

browser.quit()

 

では、コードを順番に見ていきます。

2.Seleniumのライブラリをインポート

前回同様、SeleniumからWebサイトを操作するために必要な、webdriverをインポートします。

from selenium import webdriver

3. PhantomJSのインスタンスを作成

インポートされたwebdriverを使って、PhantomJSのインスタンス(実体:browser)を作成します。

implicitly_waitメソッドで、最大3秒待つ設定をします。

browser = webdriver.PhantomJS()
browser.implicitly_wait(3)

4.トップページにアクセス

getメソッドを使って、引数に指定したURLのページにアクセスします。

browser.get(URL)

5.記事のタイトルを取得して出力

記事のタイトルとURLを格納する空のリストを作ります。

kiji_list =

find_elements_by_css_selectorメソッドを使って、タイトルが入った要素をすべて取得します。

記事のタイトルが、「<h1 class="entry-title"> </h1>」に囲まれた中にあり、「<a href="URL" >タイトル</a>」となっているので、”h1.entry-title a"とすることで、「h1タグのentry-titleクラスに含まれる aタグの要素」を取得することができます。

links = browser.find_elements_by_css_selector('h1.entry-title a')

つぎに、取得した links から、aタグの要素をひとつづつ処理します。

get_attributeメソッドで、引数に'href’を指定することで、hrefに設定されたURLを取得できます。また、textパラメーターからタイトルを取得できます。

取得したそれぞれの値を、タプル型で、kiji_listに追加(append)していきます。

for a in links:
    href = a.get_attribute('href')
    title = a.text
    kiji_list.append*1
print('+ タイトルを{0}件取得しました'.format(len(kiji_list)))

最後に、kiji_listから、URLと、タイトルをひとつづつ出力します。

for href, title in kiji_list:
    print('- ', '[',title,']:',href)

5.コマンドラインから実行してみる。

先ほど作成したファイルを実行してみます。

python3 blog_title_list.py

実行すると、「PhantomJSは、もう推奨してませんので、ChromeFireFoxを利用してください」という警告メッセージが表示されますが、実行自体は完了いたしました。

以下の通り、ブログの記事のタイトルと、URLの一覧を取得・出力できました! 

f:id:kanriyou_h004:20200426205426p:plain

図2.コマンドラインから実行

これで、Webサイトを巡回して、そのページのリンク先を取得することができるようになりました。

これで、動的にリンク先が変わるサイトを巡回することができます。

少しずつですが、できることが増えていくのはとても楽しいです。

 

次回以降も、Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]で、スクレイピング機械学習開発に取り組んでいきたいと思います。

 

 

 【過去記事】

2019年8月31日(土)にE資格を受験して、合格しました!

E資格対策として勉強の進め方や、参考書などをまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

oregin-ai.hatenablog.com 

 

 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com

 【E資格対策に使った参考書】

 

 

 

 

*1:href, title