以下に、BeautifulSoup (bs4) を使用してウェブスクレイピングを行い、開始日と終了日を入力して結果を表示し、XMLファイルに保存するサンプルコードを示します。
このコードでは、Tkinterを使用してGUIを作成し、日付ピッカーで開始日と終了日を選択できます。検索ボタンを押すと、指定された日付範囲に基づいてデータをスクレイピングし、結果を表示およびXMLファイルに保存します。
import tkinter as tk
from tkinter import messagebox
from tkcalendar import DateEntry
import requests
from bs4 import BeautifulSoup
import xml.etree.ElementTree as ET
from datetime import datetime
def scrape_data(start_date, end_date):
# サンプルのウェブサイトからデータをスクレイピング
# 実際のウェブサイトにアクセスする場合は、適切なURLとパースロジックを記述してください
url = '<https://example.com/data>'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
# データを抽出(ここではサンプルとして静的データを使用)
data = [
{'date': '2023-10-01', 'value': 'データ1'},
{'date': '2023-10-05', 'value': 'データ2'},
{'date': '2023-10-10', 'value': 'データ3'},
{'date': '2023-10-15', 'value': 'データ4'},
{'date': '2023-10-20', 'value': 'データ5'},
]
# 日付範囲でデータをフィルタリング
filtered_data = []
for item in data:
item_date = datetime.strptime(item['date'], '%Y-%m-%d').date()
if start_date <= item_date <= end_date:
filtered_data.append(item)
return filtered_data
def save_to_xml(data, filename='output.xml'):
root = ET.Element('Data')
for item in data:
entry = ET.SubElement(root, 'Entry')
date_elem = ET.SubElement(entry, 'Date')
date_elem.text = item['date']
value_elem = ET.SubElement(entry, 'Value')
value_elem.text = item['value']
tree = ET.ElementTree(root)
tree.write(filename, encoding='utf-8', xml_declaration=True)
def search():
start_date = cal_start.get_date()
end_date = cal_end.get_date()
if start_date > end_date:
messagebox.showerror("エラー", "開始日は終了日より前に設定してください。")
return
results = scrape_data(start_date, end_date)
if results:
output_text.delete('1.0', tk.END)
for item in results:
output_text.insert(tk.END, f"日付: {item['date']}, 値: {item['value']}\\n")
save_to_xml(results)
messagebox.showinfo("成功", "結果をoutput.xmlに保存しました。")
else:
messagebox.showinfo("データなし", "選択された日付範囲にデータがありません。")
# GUIのセットアップ
root = tk.Tk()
root.title("日付範囲スクレイパー")
tk.Label(root, text="開始日:").grid(row=0, column=0, padx=10, pady=10)
cal_start = DateEntry(root, width=12, background='darkblue',
foreground='white', borderwidth=2)
cal_start.grid(row=0, column=1, padx=10, pady=10)
tk.Label(root, text="終了日:").grid(row=1, column=0, padx=10, pady=10)
cal_end = DateEntry(root, width=12, background='darkblue',
foreground='white', borderwidth=2)
cal_end.grid(row=1, column=1, padx=10, pady=10)
tk.Button(root, text="検索", command=search).grid(row=2, column=0, columnspan=2, pady=10)
output_text = tk.Text(root, height=10, width=50)
output_text.grid(row=3, column=0, columnspan=2, padx=10, pady=10)
root.mainloop()
このコードを実行する前に、以下のパッケージをインストールしてください。
pip install tkcalendar requests beautifulsoup4
scrape_data
): 指定された日付範囲に基づいてデータを取得します。ここではサンプルデータを使用していますが、実際にはrequests
とBeautifulSoup
を使用してウェブサイトからデータを取得します。save_to_xml
): 取得したデータをXML形式でファイルに保存します。search
): ボタンが押されたときに、日付の検証、データの取得、結果の表示、XMLファイルへの保存を行います。scrape_data
関数内で適切なURLを指定し、requests
とBeautifulSoup
を使用してデータをパースしてください。上記のコードをPythonファイル(例: scraper.py
)にコピーします。
必要なパッケージをインストールします。
ターミナルまたはコマンドプロンプトで以下を実行します。
python scraper.py