はじめに
前回書いた、
画像をスクレイピングして保存までをPythonでやってみた[初心者向け]
の記事を通して、スクレイピングを理解した訳ですが、今度はCSVに落とすまでを行ってみました。
今回のスクレイピングもPythonを使用して行いました。
Seleniumという自動でブラウザを操作してくれるライブラリを使用してスクレイピングを行いました。
Seleniumがどういうライブラリなのかわからない方はこちらを参考にしてみて下さい。
[参考]
https://techacademy.jp/magazine/18690
スクレイピング
from selenium import webdriver
import pandas as pd
browser = webdriver.PhantomJS()
url = '対象ページのURL'
browser.get(url)
df = pd.DataFrame({'title':[], 'date':[], 'like':[]})
while True:
if len(browser.find_elements_by_class_name('要素')) > 0:
posts = browser.find_elements_by_class_name('要素')
for post in posts:
title = post.find_element_by_css_selector('要素').text
date = post.find_element_by_css_selector('要素').text
like = post.find_element_by_css_selector('要素').text
series = pd.Series([title, date, like],['title', 'date', 'bookmarks'])
print(series)
df = df.append(series, ignore_index=True)
link = browser.find_element_by_link_text("要素")
link.click()
browser.implicitly_wait(10)
else:
break
df['like'] = pd.to_numeric(df['like'].str.replace('users', ''))
df = df.sort_values(['like'], ascending=False).reset_index(drop=True)
df.to_csv('hoge.csv')
print('完了')
Webサイトの検索結果などで複数の記事が存在する場合を想定して書いたコードになります。
DataFrame
では、欲しいデータの種類だけ追加します。
今回の場合、私は記事のタイトルと、投稿日、良いね数、が欲しかったので、3つにしています。
find_element_by_〇〇では、Googleのデベロッパーツールを使用して、取得要素を選定しました。
pandasでソートをした事が無かったので、下記の記事は参考になりました。
ソートする値が、文字列なのか
、数値なのか
が大切です。
[参考]
https://qiita.com/y_sk71/items/c22f47bd4ddc1dc46dc8
find_element_by_〇〇に関してはこちらが参考になりました。
element
とelements
で異なるので注意です。
[参考]
https://kurozumi.github.io/selenium-python/locating-elements.html
まとめ
スクレイピングは、色々なシチュエーションで役立つし、覚えて置いて損は無い技術である事は間違い無いと思います。難しくはないので、やった事がない方は、ぜひ挑戦してみて下さい。
おまけ
Twitterやってます!外部のエンジニアの方ともどんどん繋がりたいと考えていますので、是非フォローして頂ければと思います!@Tatsuo96
p.s.今年の2月までは溶接職人でした。ガッツ系エンジニアとしてやらせて頂いております。