質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

2回答

726閲覧

htmlデータから抜き出した日付データをpythonを使って日付と時間で分けたい。

Kirari

総合スコア32

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/08/11 23:21

前提・実現したいこと

htmlデータから抜き出した日付データをpythonを使って日付と時間で分けたい。

下記のコードを書き、日付のデータを日付と時間で分けたいのです。
今のコードだと、日付とコードが一緒に書き出されてしまうので、一度エクセルに書き出して日付と時間を分ける方法を考えていますが、以下のエラーメッセージが出ました。

アドバイスいただけないでしょうか。どうぞよろしくお願いいたします。

htmlデータ

<ul class="d-chat_timeline-info"> 日付 時間 </li>

発生している問題・エラーメッセージ

File "C:/Users/XXXXXXX/タイトル無し1.py", line 31, in <module> mojie=datetime.datetime.fromtimestamp("cur_pos") TypeError: an integer is required (got type str)

該当のソースコード

python

1 2import os, tkinter, tkinter.filedialog, tkinter.messagebox 3root = tkinter.Tk() 4root.withdraw() 5fTyp = [("","*.html")] 6file = tkinter.filedialog.askopenfilename(filetypes = fTyp) 7fd=open(file,"r",encoding="utf-8") 8 9res=fd.read() 10from bs4 import BeautifulSoup 11 12mojie=[] 13cur_pos=0 14while True : 15 target_tag = '<ul class="d-chat_timeline-info">' 16 closing_tag = '</li>' 17 start_pos = res[cur_pos:].find(target_tag) 18 end_pos = res[cur_pos:].find(closing_tag) 19 if (start_pos == -1) or (end_pos == -1): 20 break 21 mojie.append(res[cur_pos + start_pos + len(target_tag) : cur_pos + end_pos]) 22 23 cur_pos = cur_pos + end_pos + len(closing_tag) 24 mojie=datetime.datetime.fromtimestamp("cur_pos") 25 26 27import xlsxwriter 28wb = xlsxwriter.Workbook('C:/Users/XXXXXXXXX/Desktop/out.xlsx') 29ws1 = wb.add_worksheet('sheet') 30 31 32i=0 33for a in filter(lambda x:x != "",mojie): 34 i=i+1 35 ws1.write(i, 1, a) 36 37 38wb.close()

試したこと

エクセルにて日付時刻のセルを分割する方法をやってみました。
A1        B1       C1
2006/08/04 10:00:00 2006/08/04 10:00:00
B1 =TEXT(A1,"yyyy/mm/dd")
C1 =TEXT(A1,"h:mm:ss")

B1、C1ともにA1がそのまま書き出される。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

dateutil.parserdatetimeに変換するのが楽だと思います。

Python

1import datetime 2from dateutil.parser import parse 3 4res="""<ul class="d-chat_timeline-info">2006/08/04 10:00:00 </li> 5<ul class="d-chat_timeline-info">2019/08/12 12:34:56 </li>""" 6 7target_tag = '<ul class="d-chat_timeline-info">' 8closing_tag = '</li>' 9 10mojie = [] 11cur_pos = 0 12while True: 13 start_pos = res[cur_pos:].find(target_tag) 14 end_pos = res[cur_pos:].find(closing_tag) 15 if (start_pos == -1) or (end_pos == -1): 16 break 17 18 dt = parse(res[cur_pos + start_pos + len(target_tag) : cur_pos + end_pos]) 19 mojie.append( (dt.date(), dt.time())) # タプルとして日付と時刻を格納 20 21 cur_pos = cur_pos + end_pos + len(closing_tag) 22 23print(mojie) 24# [(datetime.date(2006, 8, 4), datetime.time(10, 0)), (datetime.date(2019, 8, 12), datetime.time(12, 34, 56))]

投稿2019/08/12 00:26

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Excelにこだわらなくて良いならdatetimeでも使ってはいかがですか?

python

1from bs4 import BeautifulSoup 2from datetime import datetime 3 4html = "<!DOCTYPE html>" \ 5 "<html lang=\"ja\">" \ 6 "<head>" \ 7 " <title>" \ 8 " テストページ" \ 9 " </title>" \ 10 "</head>" \ 11 "<body>" \ 12 " <ul>" \ 13 " <li class=\"d-chat_timeline-info\">2006/08/04 10:00:00</li>" \ 14 " </ul>" \ 15 "" \ 16 "</body>" \ 17 "</html>" 18 19soup = BeautifulSoup(html, "html.parser") 20element = soup.find_all('li', class_="d-chat_timeline-info") 21for n in element: 22 mytime = datetime.strptime(n.string, '%Y/%m/%d %H:%M:%S') 23 print('日 : {}\t 時: {}'.format(mytime.strftime('%Y/%m/%d'), mytime.strftime('%H:%M:%S'))) 24

ちなみに、質問に記載されているHTMLデータはul要素をliで閉じようとしていますが、コピペミスですか?

投稿2019/08/12 00:34

FiroProchainezo

総合スコア2401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問