1.はじめに
今まで、リストとリストをCSVファイルに書き込む学習をしてきました。
そこで、少し実践的に、スクレイピングした結果(yahooのトップページ)をCSVファイルに書き込む
サンプルを掲載します。
2.writerow()によるCSV出力
注意点として
writerow()は、リストを入れなければならないので、
writerow(elem.text, elem.get("href"))としては、ダメ!!
writerow([elem.text, elem.get("href")])と、[]
を使ってリストにしましょう!!
sample_01.py
import csv
import requests
from bs4 import BeautifulSoup
url = "https://www.yahoo.co.jp/"
res = requests.get(url)
soup = BeautifulSoup(res.content, "html.parser")
print(soup.text)
topics = soup.find(id = "Topics")
print(topics.text)
with open("info.csv", "w", newline="", encoding="utf_8") as f:
writer = csv.writer(f)
for elem in topics.find_all("a"):
writer.writerow([elem.text, elem.get("href")])
info.csv
救済法案、参院特別委で可決NEW,https://news.yahoo.co.jp/pickup/6447244
プーチン氏 核先制使用の検討示唆,https://news.yahoo.co.jp/pickup/6447243
教員らの性犯罪歴確認 法制化検討,https://news.yahoo.co.jp/pickup/6447240
シャンプー新勢力が台頭 焦る大手,https://news.yahoo.co.jp/pickup/6447239
奨学金650万円 返済終わりは50代NEW,https://news.yahoo.co.jp/pickup/6447249
JリーグPK戦「上」ほぼ100%成功NEW,https://news.yahoo.co.jp/pickup/6447246
箱根駅伝 21チームの登録選手発表,https://news.yahoo.co.jp/pickup/6447241
東出昌大「壮絶」DV夫役で新境地NEW,https://news.yahoo.co.jp/pickup/6447245
稲わらウサギ12/10(土) 13:00愛媛新聞ONLINE,https://news.yahoo.co.jp/articles/f0d5d36b2631d1ed6f9168a1dfcf57423d9e16f5/images/000
もっと見る,https://news.yahoo.co.jp/topics/top-picks
トピックス一覧,https://news.yahoo.co.jp/topics
3.writerows()によるCSV出力
writerows()は、リストを、一行一行ファイルに書き込みのではなく、一気に書き込みます。
writerows()も、引数には、リスト[]
を渡す必要があります。
出力結果は、info.csvと同じになります。
sample_02.py
import csv
import requests
from bs4 import BeautifulSoup
url = "https://www.yahoo.co.jp/"
res = requests.get(url)
soup = BeautifulSoup(res.content, "html.parser")
topics = soup.find(id = "Topics")
# writerowsの引数に渡すためのリストを作成しておく
lines = []
with open("info.csv", "w", newline="", encoding="utf_8") as w:
writer = csv.writer(w)
for elem in topics.find_all("a"):
# lineという変数に以下の様にリストを代入すると、lineもリストとなる
# [救済法案、参院特別委で可決NEW,https://news.yahoo.co.jp/pickup/6447244]で格納されている
line = [elem.text, elem.get("href")]
# 用意したlines[]に、[elem.text, elem.get("href")]を追加
lines.append(line)
# writerowsを使って、一気にCSVに出力
writer.writerows(lines)
4.参考
line = [elem.text, elem.get("href")]
が、いまいち分からない方は、以下のコードで
elam.text→a_list、elem.get("href")→b_listに置き換えて考えてみてください。
sample_03.py
a_list = [1, 2, 3]
b_list = [4, 5, 6]
c = [a_list, b_list]
print(c)
# 結果
[[1, 2, 3], [4, 5, 6]]
5. 最後に
- ツッコミ歓迎致します。皆様のツッコミが、私のスキルアップにつながります!!
- お題なんかも出していただけると助かります。
- 実務では、もっと、こういう使い方もあるよ!!みたいなアドバイスもいただけると嬉しいです。