LoginSignup
0
1

More than 1 year has passed since last update.

【Python】勉強メモ-その4 スクレピング結果のCSV出力

Last updated at Posted at 2022-12-13

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_listelem.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. 最後に

  • ツッコミ歓迎致します。皆様のツッコミが、私のスキルアップにつながります!!
  • お題なんかも出していただけると助かります。
  • 実務では、もっと、こういう使い方もあるよ!!みたいなアドバイスもいただけると嬉しいです。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1