<jupyter_start><jupyter_text>GitHubのプログラム言語ランキングを行っているサイトからスレイピング  やること    ・URLからHTMLを取得する    ・HTMLをパーズし必要なデータをPytonライブラリにあるDataFrameに代入する    ・DataFrameを使用しグラフを表示<jupyter_code>#IMPORT
import requests as req
from bs4 import BeautifulSoup
import pandas as pd

URL = "http://namaristats.com/datatable"
res = req.get(URL)
if res.status_code != 200:
    print("Failed Get Response URL %s" % (URL))
# 取得したレスポンスをBeautifulSoupを使用しパーズする
soup = BeautifulSoup(res.text, "lxml")
# 今回欲しいテーブルタグ内のHTMLを取得する
tabledata = soup.find_all("table", class_="tablesaw")

# テーブルヘッダーの情報を取得
th = tabledata[0].find_all("th", attrs={"scope" : "col"})

# テーブルヘッダーの情報を使いDataFrameにカラム名のみ設定する
df = pd.DataFrame(columns=[ column.get_text() for column in th ])

# 各プログラムのランキング値が欲しいのでTRタグの情報をtabledataから取得する
tr = tabledata[0].find_all("tr")

# プログラム名の名前を取得をCSSの方法で行う
langnames = [langname.get_text() for langname in tabledata[0].select("tr > th > a")]

# 各プログラムランキングデータはTableHeaderの次からあるのでそこから取得
for idx in range(1, len(tr)):
    data = [langnames[idx-1]]
    data.extend([ data.get_text() for data in tr[idx].find_all("td", class_="num") ])
    df = df.append(pd.Series(data, index=df.columns), ignore_index = True)
# DataFrameがどうなっているか表示（一部省略で表示される）
df
# DataFrameのINDEXを指定（グラフのX軸に表記するため）
plotcolmun = "Total Repos"
plotname = "Name"
dfplot = df.set_index([plotname])
dfplot[plotcolmun] = dfplot[plotcolmun].astype("int")
dfplot = dfplot.sort_values(plotcolmun, ascending=False).head(20)
dfplot["Total Repos"].plot(kind="bar", alpha=0.6, figsize=(12,3), title=u"Total Repository Ranking Top20")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13459119496855346, 'fraction_numerical': 0.011320754716981131, 'mean_word_length': 7.0761421319796955, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 1}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '317629', 'license': 'MIT', 'n_tokens_mistral': 788, 'n_tokens_neox': 756, 'n_words': 106, 'path': 'GithubRanking.ipynb', 'repo_name': 'bo-bo-bo-san/bo-bo-bo-lab', 'size': '1590'}