0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python スクレイピング 勉強 1

0
Posted at

目的

  • 最後にPythonを触ったのが、1年前とかなのでこの勉強を通し思い出す
  • 思い出しついでにスクレイピングについて勉強する
  • コードを書くことそのものを勉強する

環境

  • Windows11 Pro
  • Python 3.12.3
  • VSCode

今回の勉強内容

  • requestsとBeautifulsoupを使ったスクレイピングの基礎

今回のゴール

  • ページトップの主要ニュースの文字列を取得する

スクレイピングする対象

https://www.yahoo.co.jp/
https://www.yahoo.co.jp/robots.txt 見た感じしてよさそうだったので。
理解間違えていてダメだったら教えてください。

スクリプト

全体

import requests
from bs4 import BeautifulSoup

url = "https://www.yahoo.co.jp/"
html = requests.get(url)

soup = BeautifulSoup(html.content, "html.parser")
main_news = soup.find(class_="_2jjSS8r_I9Zd6O9NFJtDN-")

for news in main_news.find_all("span"):
    if news.text == "NEW":
        continue

    classes = news.get("class", [])
    
    if "fQMqQTGJTbIMxjQwZA2zk" in classes and "_2VDw54wcDejORZkozpOysW" in classes:
        continue
    
    print(news.text)        

出力結果

パキスタンとタリバン 再決裂
12歳人身取引か 母は27回の渡航歴
71歳が運転する車と衝突 女性死亡
鳥インフル防疫で休職や骨折 調査
米ウェンディーズ 数百店舗閉鎖へ
引退表明の坂本花織 4度目の優勝
RYOKI「BE:FIRST」を脱退へ
Number_iの新曲が物議 TOBE回答

各ブロックの解説

import requests
from bs4 import BeautifulSoup

requestsについて

サードパーティーのHTTPライブラリらしいです。
HTMLとかをいい感じにしてくれるらしいです。

BeautifulSoupについて

こちらもサードパーティーのライブラリです。
HTMLをいい感じに解析してくれるらしいです。


# 解析するurlを指定する
url = "https://www.yahoo.co.jp/"

# requestsでurlをいい感じにする
html = requests.get(url)

# BeautifulSoupでいい感じになったwebページの中身を解析する
soup = BeautifulSoup(html.content, "html.parser")

# 抜き出したいタグを指定する
main_news = soup.find(class_="_2jjSS8r_I9Zd6O9NFJtDN-")

findメソッドについて

findメソッドはhtml内の指定した個所を見つけてくれるらしいです

タグの見つけ方

今回の趣旨とは外れますが、自分のためにタグの見つけ方について

  1. F12キーを押下する
  2. 開発者ツールの左上の→マークをクリックする
  3. HTML上の解析したい個所にカーソルを合わせてクリックする
  4. classが見つかる
  5. 開発者ツールでクラスを右クリック > copy > outerHTML でclassがコピーできる

# main_newsに入ってるclassに属するspanタグすべてをfor文で抜き出す
for news in main_news.find_all("span"):
    # そのまま回すと"NEW"も出力されてしまうのでcontinueで回避する
    if news.text == "NEW":
        continue

    # 更新時間も取得されてしまうので、更新時間のclassを指定する
    classes = news.get("class", [])

    # 2つクラスがあったので回避する
    if "fQMqQTGJTbIMxjQwZA2zk" in classes and "_2VDw54wcDejORZkozpOysW" in classes:
        continue

    # 取得した内容からHTMLのタグをtextメソッドで消して出力する
    print(news.text)

ifについて、はじめは

if news.text....
    continue
elif ....
    continue

みたいな書き方をしてました。
考えてみれば当たり前で、ifが成立しちゃったらelifは処理されないんだから駄目だよねってなりました。
完全に忘れてるねえ。

そんなこんなで今回目的とするyahooトップページの主要ニュースの文字列を取得する。ができました。

めでたしめでたし。

参考

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?