##はじめに
今回が初投稿になるので、至らない部分も多いかと思いますがご容赦ください。間違いなどありましたらご指導いただけると幸いです。
##環境
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の検証機能についてはまた詳しく書こうと思います。
# -*- 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')
##おわりに
これからは勉強したことをきちんと残していきたいです。