🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

481閲覧

Python3 スクレイピングで時刻を表す文字列を、時刻を表す形で抽出する方法を教えて下さい。

tanatomo

総合スコア19

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/12/24 12:02

編集2020/12/26 04:12

こんにちは
以下のコードで時刻をあらわす文字列(開始時間、終了時間)を抽出した時に、
1文字づつ抽出されてしまう問題を解決したいです。
ご教示頂けますでしょうか。
よろしくおねがいいたします。

▮やりたいこと
csvに出力した時の開始時間、終了時間の列を、〇〇:〇〇 のように時刻を表す形にしたい
※現状は抽出した文字列が一文字づつ縦にならんでしまっています(「▮結果」の欄参照)

▮コード
import csv
import time
import urllib.request as req
import os.path,random
import pprint
import requests
from bs4 import BeautifulSoup
import json

alfa_list=[]
blavo_list=[]
charlie1_list=[]
charlie2_list=[]

target_url_2="https://timee.co.jp/jobs/offer/ud4y3iPE4OFVIb8oOpLoMw"

r_2= requests.get(target_url_2)
soup_2= BeautifulSoup(r_2.content, "lxml")

alfa=soup_2.find_all("p",class_="style_clientName__3mE6o")
alfa_t= [x.text for x in alfa]
alfa_list.append(alfa_t)

blavo=soup_2.find_all("span",class_="style_date__2JtLJ")
blavo_t= [x.text for x in blavo]
blavo_list.append(blavo_t)

charlie1=soup_2.find_all("time")[1].text
charlie1_t=[x for x in charlie1]
charlie1_list.append(charlie1_t)

charlie2=soup_2.find_all("time")[2].text
charlie2_t=[x for x in charlie2]
charlie2_list.append(charlie2_t)

import pandas as pd

dfm = pd.DataFrame()
for i in range(len(blavo_list)):
df = pd.DataFrame([[w,x,y] for w,x,y in zip(blavo_list[i],charlie1_list[i],charlie2_list[i])])
df.insert(0, '', alfa_list[i][0])
dfm = pd.concat([dfm, df])

dfm.columns = ['店舗名','募集日','開始時間','終了時間']
dfm.to_csv('スクレイピングテスト201224.csv', encoding="utf-8", index=False)

▮結果
イメージ説明

※追記
時間に関係する部分を抽出しているcharlie1とcharlie2のコードに関して、
どのように変更したら開始時間と終了時間が正しく表記されるのか知りたくて質問を掲載しました。
(本来は一つのセルに13:00と抽出したいのに、1,3,:,0:0と別々のセルに抽出されてしまう)
”プログラムのどこが間違っているか絞り込んで”とのコメントを頂きましたが、このように表記したらわかり良いでしょうか。どうぞご検討よろしくお願いいたします。

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

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

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

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

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

rysh

2020/12/24 18:17

丸投げですね。。。 プログラムのどこが間違っているかもっと絞り込んで質問しましょう。
rysh

2020/12/26 07:08

charlie1_t=[x for x in charlie1] これを抜けば良いと思ったけど、ここは何をしたくてこうしてます?
tanatomo

2020/12/26 07:19

ありがとうございます。blavoに紐づくデータを抽出(blavoと同じ数になるように)したいと思っています。同じような反復処理をすればよいと思いましたが、うまく行きません。
guest

回答1

0

ベストアンサー

Python

1charlie1=soup_2.find_all("time")[1].text 2charlie1_t=[x for x in charlie1] 3charlie1_list.append(charlie1_t)

Python

1charlie1=soup_2.find_all("time")[1] 2charlie1_t=[x for x in charlie1] 3charlie1_list.append(charlie1_t.text)

としたらどうです?

投稿2020/12/26 08:24

rysh

総合スコア874

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

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

tanatomo

2020/12/26 08:30

何と!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問