Pythonで日経新聞から下記のようにタイトルとURLをスクレイピングして、
CSVで出力しています。
CSVで出力した際に、一行になってします。
タイトルの行数ごとに出力するのはどうすればいいでしょうか。
python
1import requests 2from bs4 import BeautifulSoup 3import csv #csvを扱うとき 4 5with open("保存する場所\test.csv","w",newline="") as f: #C:\...は保存する場所 6 w =csv.writer(f) 7 w.writerow(["タイトル","URL"]) 8 9 load_url = "https://www.bloomberg.co.jp/" 10 html = requests.get(load_url) 11 soup = BeautifulSoup(html.content, "html.parser") 12 elems=soup.find_all(class_="story-list-story__info__headline") 13 14for element in elems: 15 print(element.text) 16 title = element.text 17 r = element.find_previous('a') 18 print(load_url + r.get('href'), '\n') 19 20 url = load_url + r.get('href') 21 with open("C:\Users\sysnet03\Desktop\test.csv","w",newline="") as f: 22 w = csv.writer(f) 23 w.writerow([title,url])```ここに言語を入力 24コード
csvはコンマ区切り値(Comma Separated Value)の略で、文字列にすぎず、そこに行の概念はありません。
「タイトルの行数ごとに出力する」というのは、どのようなCSVデータ(文字列)を、どのように出力することを意図していますか?
今回の場合、複数のタイトルとURLを出力させたいので、
タイトル1 URL1
タイトル2 URL2
タイトル3 URL3
という形で出力させることを意図しています。
しかし、このコーディングだと
タイトル3 URL3
という結果になり、一行しか出力されません。(おそらく古いものが上書きされていっている状態)
with open("C:\\Users\\sysnet03\Desktop\\test.csv","w",newline="") as f:
ここが「w」になっているため、最後に書き込んだものだけが残ってしまっているという意味に解釈しました。
であれば「a」で追記になります。
解決しました。ありがとうございます。
wでは最後に書き込んだものだけが残ってしまうのですね。
https://teratail.com/help#resolve-question
では解決法を記載して質問をクローズしましょう。
回答2件
あなたの回答
tips
プレビュー