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

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

新規登録して質問してみよう
ただいま回答率
85.47%
スクレイピング

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

CSV

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

Beautiful Soup

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

Q&A

0回答

1134閲覧

複数ページ(複数曲)をスクレイピングした歌詞情報をpandasを使い複数行(曲別)のCSVのファイルを作成したい。

gthytgxbgethyjt

総合スコア0

スクレイピング

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

CSV

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

Beautiful Soup

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

0グッド

0クリップ

投稿2021/01/24 08:26

前提・実現したいこと

#URL一覧のCSVを読み込みBeautifulSoupで、スクレイピングした歌詞情報をpandasを使いCSVのファイルに作成もしくは結合したい。

CSVを読み込み、
for文で、URLをスクレイピングし、
Printし、出来たとは思ったのですが、
この方法だと、
pandasで、どうしても、1行に集約?されてしまい、
うまくいきません。

該当のソースコード

#CSVファイル ,Position,Track Name,Artist,URL 0,2,夜に駆ける,YOASOBI,https://utaten.com/lyric/rq20031716/ 1,3,ドライフラワー,優里,https://utaten.com/lyric/ma20102802/ 2,4,炎,LiSA,https://utaten.com/lyric/ni20080301/ 3,5,虹,Masaki Suda,https://utaten.com/lyric/qk20110037/ 4,6,"Stand by me, Stand by you.",HIRAIDAI,https://utaten.com/lyric/a2/hw20090936/ 5,7,裸の心,Aimyon,https://utaten.com/lyric/a3/ma20051211/ 6,8,群青,YOASOBI,https://utaten.com/lyric/a2/ma20090214/ 7,9,Step and a step,NiziU,https://utaten.com/lyric/qk20112025/ 8,10,Kaikai Kitan,Eve,https://utaten.com/lyric/mi20100703/
mport requests from bs4 import BeautifulSoup import pandas as pd from google.colab import files uploaded = files.upload() songs = pd.read_csv("kashi.csv", index_col = 0, header = 1) songs.head(10)
import urllib import urllib.request html = pd.DataFrame() for url in songs["URL"] : html = requests.get(url).text with open("config.html", mode="w", encoding="utf-8") as file: file.write(html) soup = BeautifulSoup(html, "html.parser") title = soup.find("h1").get_text(strip=True) if title is not None: article = soup.find("article", class_="contentsBox movie_box") span = article.find("span", class_="movieTtl_mainTxt") div = soup.find("div", class_="hiragana") print(title) print(div.get_text())
df_sc_kashi = pd.DataFrame({"Title":[title], "Kashi":[div.get_text()]})

試したこと

1行づつスクレイピングスクレイピングし、
1行づつ処理したほうがいいのでしょうか。

1行1列ずつ抽出し、スクレイピングすればいいのかと考え、
しようと思ったのですが、、
初心者でして、記述した方法よりも、壊滅的にうまくいきませんでした、、

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

google colaboratory使ってます。

スクレイピングのページは”歌てん”というHPです。

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

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

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

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

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

meg_

2021/01/24 10:19

> Printし、出来たとは思った 画面出力に成功したのであれば、csvファイルに出力できるでしょう。何かpandasを使用しなければならない理由があるのでしょうか?
gthytgxbgethyjt

2021/01/24 10:56 編集

有り難うございます。 初心者でして構造をあまり理解出来ていない状態です。 取得した歌詞そのもののprintは出来たものの、 前述のCSVファイルに各曲の各歌詞を各行で結合したいのですが、 data frameが作れなくて困っています。 例えば、 曲名a,アーティストb,歌詞c 曲名d,アーティストe,歌詞f 曲名g,アーティストh,歌詞i のような、 なにとぞよろしくお願いいたします。
meg_

2021/01/24 11:08

コード中の songs は何でしょうか? pandas.DataFrameですか?
gthytgxbgethyjt

2021/01/24 11:14

ありがとうございます。 申し訳ございません、私自身チョー初心者で合っている変わらないのですが そうですね。読み込むkashi.csvをsongs に置き換えてると考えています。
meg_

2021/01/24 11:20

コードが分割されていたので見逃していました。songsはpandas.DataFrameですね。であれば取得した歌詞(文字列)をリスト化してsongsに列追加し、songsをcsv出力すれば良いかと思います。
gthytgxbgethyjt

2021/01/24 11:33 編集

有り難うございます! 各曲の所得した歌詞情報が一気に、全て読み込まれるのですが、 その場合、どう、[曲名,歌詞]をリスト化したら良いのでしょうか。 お手数をお掛け致しますがなにとぞよろしくお願いいたします。
meg_

2021/01/24 12:19

> 各曲の所得した歌詞情報が一気に、全て読み込まれるのですが、 タイトルは > print(title) 歌詞は > print(div.get_text()) で出力されているのではないでしょうか?
gthytgxbgethyjt

2021/01/24 12:29

有り難うございます! そうなんですよ、 print(title) print(div.get_text()) は、ちゃんと機能してるんですが、、、 だとすると、 リスト = pd.DataFrame({"Title":[title], "Kashi":[div.get_text()]}) で間違いなですかね、、、 これをそのままCSVにすると、kashi.csvの1番下のEve(歌手)だけが、CSVに出力されるのです、、、、、、、、 なにとぞよろしくお願いいたします。
meg_

2021/01/24 12:34

前にコメントしたようにリスト化して最後にデータフレームに変換するか、逐一データフレームに追加するかの2つの方法があると思います。
gthytgxbgethyjt

2021/01/24 12:39 編集

有り難うございます! >前にコメントしたようにリスト化して最後にデータフレームに変換するか、逐一データフレームに追加するかの2つの方法があると思います。 初心者なもので、理解力が乏しく申し訳ございません。 おっしゃていただいたことを、調べながら、一度、もう一度自分なりにしてみます!! ありがとうございます!!!!!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問