2019-02-28に投稿

BeautifulSoup入門 スクレイピング実践編 タイトルとリンク取得まで【python】

スクレイピングをしたい

Webサイトから情報をまとめてCSVでごにょごにょしたいなどにスクレイピングは便利です。
今回は、Pythonのスクレイピングによく使われるBeautifulSoupを使って勉強していきます。
BeautifulSoupには便利な機能がたくさんあります。
今回もcrieitさんからデータを抜いていきます。(制作者のdalaさんには了解済み)

今回の目標

今回の目標はタイトルと記事URLの取得とします。

ライブラリの導入

BeautifulSoup単体ではURLをからデータを持ってこれません。
requestsを併用します。

from bs4 import BeautifulSoup
import requests

Requestsを使って、webからデータを取得

requestsを使用してデータを持ってきます。

url = "https://crieit.net/"
r = requests.get(url)

BeautifulSoupで要素を整形する

つぎにBeautifulSoupで要素を整形する

soup = BeautifulSoup(r.text)

crieitの記事タイトルの中身を確認

抜きたいデータはタイトルとURLですのでその箇所の要素を確認します。

<h5 class="card-title">
 <a href="https://crieit.net/posts/Tilemap-5c73afa5127c1">Tilemapからミニマップを作成してみた①</a>
</h5>

取り方としては
+ h5タグで絞り込む
+ classで絞り込む

とかでなんとかなりそうです。

soup.find_all

試しにsoup.find_allで値を取得してみましょう。

titles =soup.find_all("h5")
print(titles)
[<h5 class="card-title">クロス投稿可能</h5>, <h5 class="card-title">自由に投稿</h5>, ]

のように配列で渡されてきました。これでは視認性が悪いです。forで表示してみましょう。

for title in titles:
  print(title)

すると

<h5 class="card-title">Nuxt.js+ExpressのプロジェクトをTypeScript化する</h5>
<h5 class="card-title">Firestoreの参照型によるリレーションを試す</h5>
<h5 class="card-title"><a href="https://crieit.net/posts/Tilemap-5c73afa5127c1">Tilemapからミニマップを作成してみた①</a></h5>
<h5 class="card-title"><a href="https://crieit.net/posts/BeautifulSoup-soup">BeautifulSoup入門 soup.の挙動を確認する</a></h5>

のように出力されます。aタグで拾ってきた方が良さそうです。

soup.selectを使う

そこでsoup.selectを使うとCSSセレクタで抽出ができます。

titles =soup.select("h5 a")
print(titles)
for title in titles:
  print(title.text)
  link = title.get("href")
  print(link)

これで無事

Tilemapからミニマップを作成してみた①
[https://crieit.net/posts/Tilemap-5c73afa5127c1](https://crieit.net/posts/Tilemap-5c73afa5127c1)
BeautifulSoup入門 soup.の挙動を確認する
[https://crieit.net/posts/BeautifulSoup-soup](https://crieit.net/posts/BeautifulSoup-soup)
BeautifulSoup入門 HTMLを取得して表示する【Python】
[https://crieit.net/posts/BeautifulSoup-HTML-Python](https://crieit.net/posts/BeautifulSoup-HTML-Python)

のようにキチンと取得できました。

動くサンプル

Python3

Originally published at www.corylog.com

view_list [連載] BS4でスクレイピング
第2回 BeautifulSoup入門 soup.の挙動を確認する
第3回 BeautifulSoup入門 スクレイピング実践編 HTML取得まで【python】
第4回 BeautifulSoup入門 スクレイピング実践編 タイトルとリンク取得まで【python】
第5回 BeautifulSoup入門 スクレイピング実践編 複数ページに対応させる【python】
第6回 BeautifulSoup入門 データをpandas データフレームに格納する

aocory

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント