Help us understand the problem. What is going on with this article?

pythonでスクレイピング ①BeautifulSoup

More than 1 year has passed since last update.

はじめに

今回が初投稿になるので、至らない部分も多いかと思いますがご容赦ください。間違いなどありましたらご指導いただけると幸いです。

環境

macOS Mojave 10.14
python 3.6.4

準備

BeautifulSoupとrequestsをインストール

$ pip install beautifulsoup4
$ pip install requests
  • BeautifulSoup4
    HTMLやXMLを解析してデータを取り出すためのライブラリ

  • requests
    Webブラウザの代わりにHTTPでデータの送受信を行う

Webページの情報を取得

まず、requestsを使ってWebページの情報を取得する。
今回は例として、livedoorNEWSのランキングの情報を取得する。
get関数は、取得したいURLを指定するとその情報を格納したResponseオブジェクトを生成して返す。

import requests

response = requests.get('http://news.livedoor.com/ranking/')

Webページから要素を抜き出す

BeautifulSoup4を使ってHTMLを構文解析してタグなどの任意の要素を取得する。

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, 'html.parser')

要素を見つけるには以下のようにする。

soup.a  # 先頭のa要素を一つ取得
soup.find('a')  # soup.aと同じ
soup.find_all('a')  # 全てのa要素を取り出す。リストのように扱える。
soup.find('div', id='main')  # divタグでidがmainのものを取得する
soup.a.get('href')  # href属性を取得する
soup.a.text  # aタグの中身を取得する

実践

プログラムを書き始める前に、HTMLの構造を確認することが必要。ここでは、ニュースのタイトル・日時・URLを取得してみる。
Chromeの検証機能を使うとどのタグの中に欲しい情報があるのか簡単に分かる。Chromeの検証機能についてはまた詳しく書こうと思います。

news.py
# -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup
import pandas as pd

response = requests.get('http://news.livedoor.com/ranking/')
soup = BeautifulSoup(response.text, 'html.parser')
newslist = soup.find('div', class_='mainBody')
tags = newslist.find_all('li')

articles = []
for tag in tags:
    url = tag.a.get('href')
    title = tag.a.h3.text
    time = tag.time.text

    article = {
        'title': title,
        'url': url,
        'datetime': time
    }

    articles.append(article)

df = pd.DataFrame(articles)  # 辞書をDataFrameに変換
print(df)
df.to_csv('news.csv')

おわりに

これからは勉強したことをきちんと残していきたいです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away