生きる記録

feel so good

Pythonを活用してはてなブログからタイトルを取得する

過去に書いたブログのタイトルを見返したい!
そんなときに使えるコードを書きました!
⇓実コードは一番下⇓

初心者なので改善点があればコメントにお願いします!!
コードを書く方法を書いていきます。

1.おおまかな流れを考える

今回の目的は「データの取得」です。
はてなブログの記事一覧は、【次へボタンを押すと下に新たな記事が表示される】形式でした。
(次へボタンを押し続け全ての記事を表示)→(すべての記事の情報を出力)というステップを取ると考えられます。

2.実際にコードを書く

適当にコードを書いていきます。

3.デバッグ

デバッグというほど大仰なものではないんですが…
コードの不備を取り除いていきます。

・条件を{次へボタンの有無}から{次へボタンの表示}に変更
   →次へボタンが存在し続けるため。

・カテゴリー取得をbool関数で条件付け
   →カテゴリーがない記事が存在したため。

その他細かい修正をたくさん...

結果:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options  
from pandas import * 
import chromedriver_binary
import time

#ページへアクセス
options = Options()
browser = webdriver.Chrome()
url = "https://blog.hatena.ne.jp/manahero/lovelove-log.hatenablog.com/entries"
browser.get(url)

df = pandas.read_csv('trend.csv', index_col=0)

#ログイン
ID = input("はてなIDを入力:")
Password = input("はてなパスワードを入力:")
hatenaID = browser.find_element_by_id("login-name")
hatenaID.send_keys(ID)
hatenapass = browser.find_element_by_class_name("password")
hatenapass.send_keys(Password)
browser.find_element_by_class_name("submit-button").click()

#全ページ表示
page = 1 
while True:
	#これ以上ページが無かったら止まる
	if bool(browser.find_element_by_class_name("load-next-entries").is_displayed()) ==False: 
		print("no pager exist anymore")
		break
	print("######################page: {}########################".format(page))
	btn = browser.find_element_by_class_name("load-next-entries")
	btn.click()
	page+=1
	time.sleep(3)
	
#ページの全ポストを取得
print("Starting to get posts...")
posts = browser.find_elements_by_class_name("tr-hover")
	
for post in posts:
	title = post.find_element_by_class_name("entry-title").text
	category = []
	if bool(post.find_elements_by_class_name("blog-category-name")) ==True:
		for cate in post.find_elements_by_class_name("td-blog-category"):
			category.append(cate.text)
	date = post.find_element_by_class_name("time").text
	se = pandas.Series([title, category, date],['title','category','date'])
	df = df.append(se, ignore_index=True)
print("no contents exist anymore")

#書き出し
df.to_csv("blog.csv")
print("DONE")