過去に書いたブログのタイトルを見返したい!
そんなときに使えるコードを書きました!
⇓実コードは一番下⇓
初心者なので改善点があればコメントにお願いします!!
コードを書く方法を書いていきます。
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")