【Python】Webスクレイピングで重要なニュース記事をピックアップする

## 概要
Pythonを用いてNHKオンラインニュースから重要な時事ニュースと科学記事を取得し、タイトルとURLをcsvに保存する。

当初は、requests及びBeautiful Soupを利用してスクレイピングをする予定であったが、対象サイトがjavascriptを使用して動的にデータを表示していたため、seleniumを利用することにした。

## 全体のコード

```scraping.py
import csv
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

def fetch_news(url, news_category, css_selector, css_selector_url, count):
    # ドライバーの設定
    driver = webdriver.Chrome(ChromeDriverManager().install())
    driver.get(url)
    
    # ニュースタイトルを取得
    titles = driver.find_elements(By.CSS_SELECTOR, css_selector)
    # ニュースのURLを取得
    urls = driver.find_elements(By.CSS_SELECTOR, css_selector_url)
    
    # news_dataに必要な情報をリスト形式で保存
    news_data = []
    for i in range(count):
        news_data.append([news_category, i + 1, titles[i].text, urls[i].get_attribute('href')])
    
    # ドライバーを修了し、取得したデータを返す
    driver.quit()
    return news_data

with open('./scraping.csv', 'w', encoding='utf-8-sig', newline='') as csvfile:
    csv_writer = csv.writer(csvfile)
    # csvのヘッダー行を追加
    csv_writer.writerow(['category', 'No', 'title', 'url'])
    
    # アクセス数の多いニュースのタイトルとurlを10件追加
    topic_news = fetch_news('https://www3.nhk.or.jp/news/ranking/access.html', "トピック",
            '#main > article > section > section > ol > ul > li > a > dl > dd > em',
            '#main > article > section > section > ol > ul > li > a', 10)

    # 科学・文化に関するニュースのタイトルとurlを5件追加
    science_news = fetch_news('https://www3.nhk.or.jp/news/cat03.html', "科学・文化", 
            '#main > article.module.module--list-items > section > div > ul > li > dl > dd > a > em',
            '#main > article.module.module--list-items > section > div > ul > li > dl > dd > a', 5)
    
    # fetch_news関数で保存したニュースのリストを追加
    for news in topic_news + science_news:
        csv_writer.writerow(news)
```

## CSS SELECTORの入手方法
1．目的のサイトへ行き、ニュースのタイトル部分を右クリックし、「検証」を選択する。
![スクリーンショット (60).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899031/bd251cd6-3918-a0f8-edc2-fcaa0088b32e.png)


2．「検証」をクリックすると開発者ツールが表示され、選択箇所のHTMLコードがハイライトされる。
![スクリーンショット (61).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899031/0222dfdf-6937-6c9d-0a6c-12b145ebe2be.png)


3．ハイライトされたHTMLコードを右クリックし、 Copy > Copy selector の順に選択。
![スクリーンショット (62).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899031/4de25c57-9d85-f068-64f9-4413d23a9df3.png)


4．コピーされたコードのli部分がli:nth-child(1)となるが、今回はliの要素全体を取得したいため、liに変更する。
```
# 変更前
'#main > article > section > section > ol > ul > li:nth-child(1) > a > dl > dd > em'

# 変更後
'#main > article > section > section > ol > ul > li > a > dl > dd > em'
```


## 結果
|category|No|title|url|
|:-:|:-:|:-:|:-:|
|トピック|1|ドジャース敗れて3勝1敗に ヤンキースが初勝利【詳しく】|https://www3.nhk.or.jp/news/html/20241030/k10014623061000.html|
トピック|2|長野 上田 きのこ生産大手「ホクト」工場で火災 消火活動続く|https://www3.nhk.or.jp/news/html/20241030/k10014623591000.html
トピック|3|米大統領選 トランプ氏の集会でコメディアンの発言 波紋広がる|https://www3.nhk.or.jp/news/html/20241030/k10014623471000.html
トピック|4|男性よりも3割少ない？ 女性の“老後リスク”と備え方とは|https://www3.nhk.or.jp/news/html/20241029/k10014621311000.html
トピック|5|「マイナ免許証」来年3月24日開始 政府決定|https://www3.nhk.or.jp/news/html/20241029/k10014622591000.html
トピック|6|ドジャース3連勝でワールドシリーズ制覇に王手【一問一答】|https://www3.nhk.or.jp/news/html/20241029/k10014621481000.html
トピック|7|北海道 江別 大学生死亡 “交際相手”の女子大学生など4人逮捕|https://www3.nhk.or.jp/news/html/20241029/k10014622551000.html
トピック|8|【議席確定】衆院選 自民 公明 過半数割る 立民 国民は大幅増|https://www3.nhk.or.jp/news/html/20241027/k10014620511000.html
トピック|9|同性どうしの結婚を認めない法律規定は憲法違反 東京高裁|https://www3.nhk.or.jp/news/html/20241030/k10014623481000.html
トピック|10|自民 無所属当選4人に会派入り要請し了承 さらに2人にも要請|https://www3.nhk.or.jp/news/html/20241030/k10014623881000.html
科学・文化|1|ハロウィーン 渋谷「ハチ公」は封鎖 新宿は？池袋は？|https://www3.nhk.or.jp/news/html/20241030/k10014623541000.html
科学・文化|2|鳥インフル 牛からヒトに感染後で性質など変化か 東大など発表|https://www3.nhk.or.jp/news/html/20241030/k10014623211000.html
科学・文化|3|佳子さま 石川県を訪問 地震で被災の人間国宝らと懇談|https://www3.nhk.or.jp/news/html/20241029/k10014623291000.html
科学・文化|4|2025年秋の朝ドラ「ばけばけ」 ヒロインに高石あかりさん|https://www3.nhk.or.jp/news/html/20241029/k10014622931000.html
科学・文化|5|将棋 女流王将戦第3局 挑戦者が体調不良で不戦敗 防衛決まる|https://www3.nhk.or.jp/news/html/20241029/k10014622701000.html