Webサイトから情報をまとめてCSVでごにょごにょしたいなどにスクレイピングは便利です。
今回は、Pythonのスクレイピングによく使われるBeautifulSoupを使って勉強していきます。
BeautifulSoupには便利な機能がたくさんあります。
今回もcrieitさんからデータを抜いていきます。(制作者のdalaさんには了解済み)
今回の目標はタイトルと記事URLの取得とします。
BeautifulSoup単体ではURLをからデータを持ってこれません。
requestsを併用します。
from bs4 import BeautifulSoup
import requests
requestsを使用してデータを持ってきます。
url = "https://crieit.net/"
r = requests.get(url)
つぎにBeautifulSoupで要素を整形する
soup = BeautifulSoup(r.text)
抜きたいデータはタイトルとURLですのでその箇所の要素を確認します。
<h5 class="card-title">
<a href="https://crieit.net/posts/Tilemap-5c73afa5127c1">Tilemapからミニマップを作成してみた①</a>
</h5>
取り方としては
+ h5タグで絞り込む
+ classで絞り込む
とかでなんとかなりそうです。
試しに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を使うと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)
のようにキチンと取得できました。
第2回 | BeautifulSoup入門 soup.の挙動を確認する |
第3回 | BeautifulSoup入門 スクレイピング実践編 HTML取得まで【python】 |
第4回 | BeautifulSoup入門 スクレイピング実践編 タイトルとリンク取得まで【python】 |
第5回 | BeautifulSoup入門 スクレイピング実践編 複数ページに対応させる【python】 |
第6回 | BeautifulSoup入門 データをpandas データフレームに格納する |
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント