はじめに
前回の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ページをスクレイピングをする際に皆さんの参考になれば幸いです😁