前提・実現したいこと
#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です。
あなたの回答
tips
プレビュー