note.com
ysdyt.hatenablog.jp
seleniumなしでスクレイピング
import time
import pandas as pd
import requests
from bs4 import BeautifulSoup
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
}
payload = {"j_id0:fSearch": "j_id0:fSearch", "j_id0:fSearch:searchBtn": "検索"}
dfs = []
with requests.Session() as s:
r = s.get("https://fumotoppara.secure.force.com/", headers=headers)
r.raise_for_status()
soup = BeautifulSoup(r.content, "html.parser")
months = [i.get("value") for i in soup.select("select#f_nengetsu > option")]
for i, month in enumerate(months):
if i > 0:
payload["f_nengetsu"] = month
time.sleep(3)
r = s.get(
"https://fumotoppara.secure.force.com/RS_Top",
headers=headers,
params=payload,
)
r.raise_for_status()
df_tmp = pd.read_html(r.text)[0]
df_tmp["月"] = month
dfs.append(df_tmp[:-1])
df0 = pd.concat(dfs).reset_index(drop=True)
df_date = (
(df0["月"] + df0["日付"])
.str.extract("(\d{4})年(\d{1,2})月(\d{1,2})日")
.rename(columns={0: "year", 1: "month", 2: "day"})
.astype(int)
)
df0["日付"] = pd.to_datetime(df_date)
df0.drop("月", axis=1, inplace=True)
df0.set_index(["日付", "曜日"], inplace=True)
df0
df1 = df0[
df0.isin(["○", "△"]).any(axis=1)
].copy()
df1
df1.to_csv("fumotoppara.csv", encoding="utf_8_sig")
一覧
曜日指定
df1.xs("金", level="曜日")
日付 |
キャンプサイト |
コテージ柏 |
翠山荘 |
毛無山荘 |
2021-12-03 00:00:00 |
△ |
× |
× |
× |
2021-12-10 00:00:00 |
△ |
× |
× |
△ |
2021-12-17 00:00:00 |
○ |
× |
○ |
○ |
2021-12-24 00:00:00 |
△ |
× |
× |
× |
2022-01-07 00:00:00 |
○ |
× |
× |
× |
2022-01-14 00:00:00 |
○ |
× |
× |
○ |
2022-01-21 00:00:00 |
○ |
× |
○ |
○ |
2022-02-04 00:00:00 |
○ |
× |
× |
○ |
2022-02-18 00:00:00 |
○ |
× |
○ |
○ |
施設別
df2 = df0.stack().reset_index().set_axis(["日付", "曜日", "施設", "状況"], axis=1)
df3 = df2[df2["状況"].isin(["○", "△"])].copy().reset_index(drop=True)
金曜日
df3[df3["曜日"] == "金"]
|
日付 |
曜日 |
施設 |
状況 |
5 |
2021-12-03 00:00:00 |
金 |
キャンプサイト |
△ |
13 |
2021-12-10 00:00:00 |
金 |
キャンプサイト |
△ |
14 |
2021-12-10 00:00:00 |
金 |
毛無山荘 |
△ |
27 |
2021-12-17 00:00:00 |
金 |
キャンプサイト |
○ |
28 |
2021-12-17 00:00:00 |
金 |
翠山荘 |
○ |
29 |
2021-12-17 00:00:00 |
金 |
毛無山荘 |
○ |
39 |
2021-12-24 00:00:00 |
金 |
キャンプサイト |
△ |
43 |
2022-01-07 00:00:00 |
金 |
キャンプサイト |
○ |
55 |
2022-01-14 00:00:00 |
金 |
キャンプサイト |
○ |
56 |
2022-01-14 00:00:00 |
金 |
毛無山荘 |
○ |
70 |
2022-01-21 00:00:00 |
金 |
キャンプサイト |
○ |
71 |
2022-01-21 00:00:00 |
金 |
翠山荘 |
○ |
72 |
2022-01-21 00:00:00 |
金 |
毛無山荘 |
○ |
97 |
2022-02-04 00:00:00 |
金 |
キャンプサイト |
○ |
98 |
2022-02-04 00:00:00 |
金 |
毛無山荘 |
○ |
128 |
2022-02-18 00:00:00 |
金 |
キャンプサイト |
○ |
129 |
2022-02-18 00:00:00 |
金 |
翠山荘 |
○ |
130 |
2022-02-18 00:00:00 |
金 |
毛無山荘 |
○ |
df3[(df3["施設"] == "キャンプサイト") & (df3["曜日"] == "金")]
df3.loc[(df3["施設"] == "キャンプサイト") & (df3["曜日"] == "金"), "日付"].dt.date.unique().tolist()
|
日付 |
曜日 |
施設 |
状況 |
5 |
2021-12-03 00:00:00 |
金 |
キャンプサイト |
△ |
13 |
2021-12-10 00:00:00 |
金 |
キャンプサイト |
△ |
27 |
2021-12-17 00:00:00 |
金 |
キャンプサイト |
○ |
39 |
2021-12-24 00:00:00 |
金 |
キャンプサイト |
△ |
43 |
2022-01-07 00:00:00 |
金 |
キャンプサイト |
○ |
55 |
2022-01-14 00:00:00 |
金 |
キャンプサイト |
○ |
70 |
2022-01-21 00:00:00 |
金 |
キャンプサイト |
○ |
97 |
2022-02-04 00:00:00 |
金 |
キャンプサイト |
○ |
128 |
2022-02-18 00:00:00 |
金 |
キャンプサイト |
○ |
df4 = df3[df3["施設"].isin(["コテージ柏", "翠山荘", "毛無山荘"])].copy()
df4
df4["日付"].dt.date.unique().tolist()
|
日付 |
曜日 |
施設 |
状況 |
3 |
2021-12-02 00:00:00 |
木 |
翠山荘 |
○ |
4 |
2021-12-02 00:00:00 |
木 |
毛無山荘 |
○ |
8 |
2021-12-06 00:00:00 |
月 |
翠山荘 |
○ |
9 |
2021-12-06 00:00:00 |
月 |
毛無山荘 |
○ |
14 |
2021-12-10 00:00:00 |
金 |
毛無山荘 |
△ |
16 |
2021-12-12 00:00:00 |
日 |
翠山荘 |
○ |
17 |
2021-12-12 00:00:00 |
日 |
毛無山荘 |
○ |
19 |
2021-12-13 00:00:00 |
月 |
毛無山荘 |
○ |
21 |
2021-12-14 00:00:00 |
火 |
コテージ柏 |
○ |
22 |
2021-12-14 00:00:00 |
火 |
毛無山荘 |
○ |
24 |
2021-12-15 00:00:00 |
水 |
毛無山荘 |
○ |
26 |
2021-12-16 00:00:00 |
木 |
毛無山荘 |
○ |
28 |
2021-12-17 00:00:00 |
金 |
翠山荘 |
○ |
29 |
2021-12-17 00:00:00 |
金 |
毛無山荘 |
○ |
32 |
2021-12-20 00:00:00 |
月 |
毛無山荘 |
○ |
35 |
2021-12-22 00:00:00 |
水 |
翠山荘 |
○ |
36 |
2021-12-22 00:00:00 |
水 |
毛無山荘 |
△ |
38 |
2021-12-23 00:00:00 |
木 |
毛無山荘 |
△ |
45 |
2022-01-10 00:00:00 |
月 |
毛無山荘 |
○ |
47 |
2022-01-11 00:00:00 |
火 |
翠山荘 |
○ |
48 |
2022-01-11 00:00:00 |
火 |
毛無山荘 |
○ |
50 |
2022-01-12 00:00:00 |
水 |
翠山荘 |
○ |
51 |
2022-01-12 00:00:00 |
水 |
毛無山荘 |
○ |
53 |
2022-01-13 00:00:00 |
木 |
翠山荘 |
○ |
54 |
2022-01-13 00:00:00 |
木 |
毛無山荘 |
○ |
56 |
2022-01-14 00:00:00 |
金 |
毛無山荘 |
○ |
58 |
2022-01-16 00:00:00 |
日 |
毛無山荘 |
○ |
60 |
2022-01-17 00:00:00 |
月 |
毛無山荘 |
○ |
62 |
2022-01-18 00:00:00 |
火 |
翠山荘 |
○ |
63 |
2022-01-18 00:00:00 |
火 |
毛無山荘 |
○ |
65 |
2022-01-19 00:00:00 |
水 |
翠山荘 |
○ |
66 |
2022-01-19 00:00:00 |
水 |
毛無山荘 |
○ |
68 |
2022-01-20 00:00:00 |
木 |
翠山荘 |
○ |
69 |
2022-01-20 00:00:00 |
木 |
毛無山荘 |
○ |
71 |
2022-01-21 00:00:00 |
金 |
翠山荘 |
○ |
72 |
2022-01-21 00:00:00 |
金 |
毛無山荘 |
○ |
74 |
2022-01-23 00:00:00 |
日 |
翠山荘 |
○ |
75 |
2022-01-23 00:00:00 |
日 |
毛無山荘 |
○ |
77 |
2022-01-24 00:00:00 |
月 |
翠山荘 |
○ |
78 |
2022-01-24 00:00:00 |
月 |
毛無山荘 |
○ |
80 |
2022-01-25 00:00:00 |
火 |
翠山荘 |
○ |
81 |
2022-01-25 00:00:00 |
火 |
毛無山荘 |
○ |
86 |
2022-01-31 00:00:00 |
月 |
翠山荘 |
○ |
87 |
2022-01-31 00:00:00 |
月 |
毛無山荘 |
○ |
89 |
2022-02-01 00:00:00 |
火 |
翠山荘 |
○ |
90 |
2022-02-01 00:00:00 |
火 |
毛無山荘 |
○ |
92 |
2022-02-02 00:00:00 |
水 |
翠山荘 |
○ |
93 |
2022-02-02 00:00:00 |
水 |
毛無山荘 |
○ |
95 |
2022-02-03 00:00:00 |
木 |
翠山荘 |
○ |
96 |
2022-02-03 00:00:00 |
木 |
毛無山荘 |
○ |
98 |
2022-02-04 00:00:00 |
金 |
毛無山荘 |
○ |
100 |
2022-02-06 00:00:00 |
日 |
翠山荘 |
○ |
101 |
2022-02-06 00:00:00 |
日 |
毛無山荘 |
○ |
103 |
2022-02-07 00:00:00 |
月 |
翠山荘 |
○ |
104 |
2022-02-07 00:00:00 |
月 |
毛無山荘 |
○ |
106 |
2022-02-08 00:00:00 |
火 |
翠山荘 |
○ |
107 |
2022-02-08 00:00:00 |
火 |
毛無山荘 |
○ |
109 |
2022-02-09 00:00:00 |
水 |
翠山荘 |
○ |
110 |
2022-02-09 00:00:00 |
水 |
毛無山荘 |
○ |
112 |
2022-02-10 00:00:00 |
木 |
毛無山荘 |
○ |
114 |
2022-02-13 00:00:00 |
日 |
翠山荘 |
○ |
115 |
2022-02-13 00:00:00 |
日 |
毛無山荘 |
○ |
117 |
2022-02-14 00:00:00 |
月 |
翠山荘 |
○ |
118 |
2022-02-14 00:00:00 |
月 |
毛無山荘 |
○ |
120 |
2022-02-15 00:00:00 |
火 |
翠山荘 |
○ |
121 |
2022-02-15 00:00:00 |
火 |
毛無山荘 |
○ |
123 |
2022-02-16 00:00:00 |
水 |
翠山荘 |
○ |
124 |
2022-02-16 00:00:00 |
水 |
毛無山荘 |
○ |
126 |
2022-02-17 00:00:00 |
木 |
翠山荘 |
○ |
127 |
2022-02-17 00:00:00 |
木 |
毛無山荘 |
○ |
129 |
2022-02-18 00:00:00 |
金 |
翠山荘 |
○ |
130 |
2022-02-18 00:00:00 |
金 |
毛無山荘 |
○ |
132 |
2022-02-20 00:00:00 |
日 |
毛無山荘 |
○ |
134 |
2022-02-21 00:00:00 |
月 |
翠山荘 |
○ |
135 |
2022-02-21 00:00:00 |
月 |
毛無山荘 |
○ |
137 |
2022-02-22 00:00:00 |
火 |
翠山荘 |
○ |
138 |
2022-02-22 00:00:00 |
火 |
毛無山荘 |
○ |