【Python】スクレイピング→データ収集→整形→分析までの流れを初心者向けにまとめておく ~Pythonに関するはてな記事を10年分スクレイピングし、Pythonトレンド分析を実際にやってみた~

  • 5
    Like
  • 0
    Comment

やりたいこと

  • はてなブックマークで、Python記事を検索しトレンドを分析
    • はてなブックマークにSeleniumでログイン
    • ブックマーク数をスクレイピング
    • 時系列比較を行う
    • バズるタイトルを分析

実装方法

  • 詳しくは下記記事を参考にしてください。Pandasを利用したデータ分析まで載せています。

【Python】スクレイピング→データ収集→整形→分析までの流れを初心者向けにまとめておく ~Pythonに関するはてな記事を10年分スクレイピングし、Pythonトレンド分析を実際にやってみた~

https://review-of-my-life.blogspot.jp/2017/10/python-web-scraping-data-collection-analysis.html

実装

trendAnalytics.py

from selenium import webdriver  
from pandas import * 
import time

#Access to page

browser = webdriver.PhantomJS()  # DO NOT FORGET to set path
url = "http://b.hatena.ne.jp/search/text?safe=on&q=Python&users=50"
browser.get(url)
df = pandas.read_csv('trend.csv', index_col=0)

#Insert title,date,bookmarks into CSV file

page = 1 #This number shows the number of current page later

while True: #continue until getting the last page
    if len(browser.find_elements_by_css_selector(".pager-next")) > 0:
        print("######################page: {} ########################".format(page))
        print("Starting to get posts...")
        #get all posts in a page
        posts = browser.find_elements_by_css_selector(".search-result")

        for post in posts:
            title = post.find_element_by_css_selector("h3").text
            date = post.find_element_by_css_selector(".created").text
            bookmarks = post.find_element_by_css_selector(".users span").text
            se = pandas.Series([title, date, bookmarks],['title','date','bookmarks'])
            df = df.append(se, ignore_index=True)
            print(df)

        #after getting all posts in a page, click pager next and then get next all posts again

        btn = browser.find_element_by_css_selector("a.pager-next").get_attribute("href")
        print("next url:{}".format(btn))
        browser.get(btn)
        page+=1
        browser.implicitly_wait(10)
        print("Moving to next page......")
        time.sleep(10)
    else: #if no pager exist, stop.
        print("no pager exist anymore")
        break
df.to_csv("trend1.csv")
print("DONE")

結果

  • こんな感じでスクレイピングした結果が表示されます。

trendAnalytics.gif

  • Jupiter Notebookを利用して、こんな感じで分析しました.2017年度の結果

2017.JPG

  • こちらが2006年度の結果。明らかに使われ方が違いますね

Ruby.JPG

参考

【Python】スクレイピング→データ収集→整形→分析までの流れを初心者向けにまとめておく ~Pythonに関するはてな記事を10年分スクレイピングし、Pythonトレンド分析を実際にやってみた~

https://review-of-my-life.blogspot.jp/2017/10/python-web-scraping-data-collection-analysis.html