qiita를 스크래핑하여 Advent Calendar 기사별로 좋아하는 숫자를 시각화
10713 단어 파이썬스크래핑AdventCalendar
이 기사에 대하여
연말, 즉 어드벤트 캘린더의 계절이군요.
헤샤에서도 어드벤트 캘린더가 거기 고조되고 있어 활기차기 위해서 각 기사에 붙은 좋아하는 수를 가시화해 slack에 붙여 붙이고 있으므로, 거기에 사용하고 있는 스크립트를 여기에 남겨 둡니다.
코드
모듈 가져오기에서 qiita 스크래핑까지 단번에 진행합니다.
import pandas as pd
import datetime
import time
import re
import requests
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.style.use('ggplot')
plt.rcParams['font.family'] = 'TakaoPGothic'
def extract_num_like(url):
"""
qiita記事のURL + "/likers"(いいねしたアカウントの数が書いてあるページ)
をスクレイピングし、いいね数を抽出する。
"""
if re.search('https\://qiita\.com',url):
res = requests.get(url + "/likers")
soup = BeautifulSoup(res.content)
num_likers = len(soup.find_all('h4',{'class':'UserInfo__name'}))
time.sleep(5)
return num_likers
else:
print(f'url not like qiita article. please confirm url: {url}')
return 0
# まずはAdvent Calendarのtopページから記事一覧をとってくる
organization = "supership"
url = f"https://qiita.com/advent-calendar/2018/{organization}"
res = requests.get(url)
soup = BeautifulSoup(res.content)
# 担当者と記事のURLを抽出する
authors = [x.text.rstrip() for x in soup.find_all("a", {"class":'adventCalendarItem_author'})]
urls = [x.find('a').get('href') for x in soup.find_all("div", {"class":'adventCalendarItem_entry'})]
# 個別の記事のいいね数辞書
num_like_dic = {author: extract_num_like(url) for author, url in zip(authors, urls)}
이어서 방금 만든 사전을 pandas DataFrame으로 만들고 matplotlib (seaborn)에 전달하여 시각화합시다.
seaborn은 데포의 설정으로 그래프가 좋은 느낌이 되기 때문에 좋네요.
# 可視化するためにpandas DataFrameにする
df = pd.DataFrame.from_dict(num_like_dic, orient='index').sort_values(0,ascending=False).reset_index()
df.columns = ['担当者','いいね数']
today = datetime.datetime.today().strftime('%Y%m%d')
# 日次でデータをcsvで保存する想定なので、日付でsuffixをつけてcsv保存
df.to_csv(f'data/adcal_data_{today}.csv', index=False)
# いいね数がついているものに絞って可視化する
df = df[df["いいね数"] > 0]
# グラフ描画
plt.figure(figsize=(15,8))
plt.title(f'Advent Calnedar Watcher {today}')
sns.barplot(x='担当者', y='いいね数', data=df)
plt.xticks(rotation=90)
plt.savefig(f"Adcal_Watcher_{today}.png")
plt.show()
결과
이런 느낌의 그래프를 쓸 수 있었습니다.
Reference
이 문제에 관하여(qiita를 스크래핑하여 Advent Calendar 기사별로 좋아하는 숫자를 시각화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/paulxll/items/0d74c3d873fac60ec84d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)