2
6

More than 3 years have passed since last update.

Qiita 1日トレンドスクレイピング (Python)

Last updated at Posted at 2021-02-22

はじめに

前回のPythonでのスクレイピング でスクレイピングするための基礎的な文法をまとめたので、今回はQiitaの1日トレンドのタイトルとそのURLをPythonでスクレイピングしてみました。

対象者

  • Pythonを使ってWebページをスクレイピングしてみたい方
  • Python初学者の方

サンプルのコード

app.py
import requests
from bs4 import BeautifulSoup

def get_qiita_trend():
    '''Qiita 1日トレンドスクレイピング'''
    load_url = requests.get("https://qiita.com/")
    soup = BeautifulSoup(load_url.text, "html.parser")
    elems = soup.find_all('article', class_="css-81mxb5")

    titles = []
    urls = []

    for elem in elems:
        for ele in elem.find_all('h2'):
            for e in ele.find_all('a'):
                titles.append(e.text)
                urls.append(e['href'])

    answer = list(zip(titles, urls))
    print(answer)

def main():
    get_qiita_trend()

if __name__ == '__main__':
    main()

サンプルのコードの解説

url取得

app.py
import requests

load_url = requests.get("https://qiita.com/")

import requestsはHTTPのライブラリ

webページの解析

app.py
from bs4 import BeautifulSoup

soup = BeautifulSoup(load_url.text, "html.parser")

from bs4 import BeautifulSoupはHTMLやXMLファイルからデータを取得するライブラリ

タイトル、URL取得

app.py
elems = soup.find_all('article', class_="css-81mxb5")

titles = []
urls = []

for elem in elems:
    for ele in elem.find_all('h2'):
        for e in ele.find_all('a'):
            titles.append(e.text)
            urls.append(e['href'])

answer = list(zip(titles, urls))

elemsにarticleタグのclass名を抽出し、格納する。それからh2タグの中のaタグのテキスト部分をtitlesに、h2タグの中のaタグのhrefに対応している値をurlsにfor文で格納しています。

answerでタイトルとURLをセットにしています。

実行結果

[('マクドナルドで一日分の栄養を取れる組み合わせを計算したら衝撃の結果に', 'https://qiita.com/takobaya391076/items/49b15c1fa36734b3fa53'), ('5歳娘「パパ、レンタルサーバを契約しないで?」', 'https://qiita.com/Yametaro/items/a186525e7c2960e2ae99'), ('巨大なエンジニアの学び場を作った話', 'https://qiita.com/cloto/items/68a80ca93f4ef7822e6c'), ('Finderで開いてるディレクトリへcdするコマンド', 'https://qiita.com/ucan-lab/items/c4b3466f53eac6f1a8b7'), ('【Rails】業務未経験者がRailsを使用して情報資産共有アプリを開発したので共有します', 'https://qiita.com/yutaro48/items/673789a91557735e1be5'), ('Anacondaの有償化に伴いminiconda+conda-forgeでの運用を考えてみた', 'https://qiita.com/kimisyo/items/986802ea52974b92df27'), ('【STM32】無償のRAMモニターJ-Scopeを使おう', 'https://qiita.com/motorcontrolman/items/c1910c5a51fb29a700fd'), ('【Node.js】Node.jsの3大フレームワークについて', 'https://qiita.com/mzmz__02/items/03c4bb839a5e5abe02a8'), ('【Shopify】売上1億円近くの農家のECサイトに、無料の予約販売アプリを導入した話', 'https://qiita.com/renesisu727/items/e48f003e74f075fadb6f'), ('RustでつくるDLLの話', 'https://qiita.com/wada314/items/8e31ee8c5720d31f5875'), ('斜めから撮ったダーツボードを「円」にする方法 - 理屈編', 'https://qiita.com/mikemike_kus/items/e5e2f1928b7b7b66ca20'), ('DatadogでAWSイベントを定期監視する', 'https://qiita.com/naomichi-y/items/540ff6f0676ce3a59978'), ('ポケモン名を入力すると様々なデータを返すbotを改変してみた(序章)', 'https://qiita.com/Square_y/items/67eb2fd582c1db0964da'), ('[Unity] C# JobSystem を利用してテキストファイルを非同期でパースする', 'https://qiita.com/kawai125/items/13390f25700dd89c0f2e'), ('賞金総額100万円目指して0から量子プログラミング\u3000episode 0、初期設定編', 'https://qiita.com/HIROTTA-MAN/items/111e7733a3a8b3b6870d'), ('【初心者向け】MVCの全体像をざっくり理解する', 'https://qiita.com/techpit-jp/items/efb96664c5ad59f848fa'), ('【SwiftUI】APIとJSONで取得したものをList表示する方法【tutorial】', 'https://qiita.com/yuujioka/items/ee59d5956026801ff167'), ('Python Migration Toolを徹底比較してみた', 'https://qiita.com/c0ridrew/items/68bba2c9f400345f7cf3'), ('Laravel5.8 画像アップロード機能を仕組みから理解する', 'https://qiita.com/kei_Q/items/62cb8747280266956100'), ('Multipeer ConnectivityでのP2P通信(Swift)', 'https://qiita.com/am10/items/e56c2bc6eaab75bc9c8c'), ('RustのロボットプログラミングフレームワークOpenRRを使う', 'https://qiita.com/OTL/items/3df938f61a4520c10b70'), ('word2vec 英単語ベクトル可視化', 'https://qiita.com/roadto93ds/items/96ad722387b6dcd3b4e7'), ('アーキテクチャに関するドキュメントの残しかた - ADRとARCHITECTURE.md テンプレート', 'https://qiita.com/e99h2121/items/f508ef4c9743b8fc9f5b'), ('【丁寧な解説書】jsプラグインModaal\u3000〜カスタマイズ編〜', 'https://qiita.com/nukuri/items/89f496fe4d1520904fe0'), ('あらゆるアーブの無料ツールについて調査しました。~Awesome Arbitrage~', 'https://qiita.com/kanawoinvest/items/06db93a802267ee9480a'), ('Android: Lottie Animation を任意の位置とサイズにオーバーレイ(ViewOverlay)表示させる', 'https://qiita.com/irgaly/items/4bf58116a3ffac7a5f45'), ('touchdsignerで鏡や水のような反射を表現するには、', 'https://qiita.com/miwa_maroon/items/15cefa8781a7c047e145'), ('Nxで始めるゼロから作るディープラーニング 3章 ニューラルネットワーク', 'https://qiita.com/the_haigo/items/bedd466142aaaf01641c'), ('【GAS】推しのためにWeb人気投票リマインドLINEbotを作ってみた', 'https://qiita.com/Motchy_1204/items/788f5a61f2cdaada0da3'), ('Delphi でズンドコキヨシを書いてみる', 'https://qiita.com/ht_deko/items/a066ea4be3afee7e8ef5')]

最後に

今回は、PythonでQiitaの1日のトレンドをスクレイピングしました。
この記事がwebページをスクレイピングをする際に皆さんの参考になれば幸いです😁

2
6
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
2
6