【10万人突破企画】大人の自由研究 第10回 プログラミング未経験の編集者がPythonを勉強したら(中編) - Progate
マイナビニュース2024年3月21日(木)9時0分
本連載では、「大人の自由研究」と称してさまざまな企業の技術を活用して、本業とは少し異なる取り組みを紹介してきた。今回はオンラインでプログラミング学習サービスを提供する「Progate」を使って、マイナビニュース TECH+編集部に所属する筆者らがプログラミングに挑戦した。
Pythonは簡単だと聞いていたけれど
前回、筆者らはProgateを使用してPythonを学習する過程を紹介した。今回は編集部における業務課題の解決を想定して、各社がニュースリリースを配信しているページから最新のものを取得する仕組みの構築に取り組む。具体的には、スクレイピングという技術を使って、まずは自社のニュースリリースサイト(https://www.mynavi.jp/news/)から直近のリリースを取得する。
まず筆者がつまずいたのは、開発環境の準備である。Progateはブラウザで動くため、勉強の開始に際してはPCに何もインストールせずに手軽に始められる。しかし、自分の手でコードを記述する際にはエディタやIDE(統合開発環境)が必要となる。IDEといえば、MicrosoftのVisual Studio Code(VSCode)やAppleのXcodeなどが有名だ。
VSCodeを使用しようと思ったのだが、会社支給のPCではそもそもインストールがうまくいかなかったため、今回はPCにインストールすることなくブラウザから直接Pythonを記述し実行できる「Google Colaboratory」を使うことにした。これで、ようやく作業を開始できる。
実際にコードを書いてみよう
スクレイピングはWebページのHTMLから必要な情報を抽出する技術だ。今回のように最新のニュースを取得するほかにも、商品価格の比較や口コミの取得などに使われる。スクレイピングで広く使われる「BeautifulSoup」と「Requests」ライブラリを活用してみる。
!pip install requests
!pip install beautifulsoup4
続いて、HTMLを取得するWebページ(今回は当社ホームページのニュースリリース)を指定し、BeautifulSoupで解析してみる。出力すると、無事にHTMLを取得できていそうなことが分かる。
url = "https://www.mynavi.jp/news/"
r= requests.get(url)
soup = BeautifulSoup(r.content, "html.parser")
print(soup)
次に必要なHTMLタグを確認する。取得したHTML情報からも確認できるほか、Google Chromeの場合は右クリックで「検証」を開くか、キーボードの「F12」を押すことでデベロッパーツールから確認できる。
今回の場合、取得したい日時とリリースのタイトルはどちらもpタグが使われており、class属性がそれぞれ「date」「txt」となっている。
最後に、class属性を指定してpタグの情報を抜き出してみる。
print(soup.find("p", class="date"))
print(soup.find("p", class="txt"))
余談
なんとか自分でコードを記述し、目標だった「スクレイピングで最新のニュースを取得する」ところまでたどり着いた。せっかくなので、もう少しこのコードを改良してみようと思う。
○テキストだけを出力する
上記のコード実行結果では、目的の情報と一緒にHTMLタグも抜き出されている。そこで必要なテキストのみを出力する。
print(soup.find("p", class="date").text)
print(soup.find("p", class="txt").text)
○複数のニュースを抽出する
日々発表されるニュースリリースは1本とは限らない。複数のニュースリリースが発表されたら見逃してしまう場合もある。そこで、上から5本のリリースを抽出した。
for i in soup.findall("p", class="txt",limit=5):
print(i.text)
加えて、せっかくなので日付と共にリリースタイトルを抽出した。
for i in soup.findall("p",class=["date","txt"],limit=10):
print(i.text)
さらなる目標
閑話休題。初心者ながら、ここまでようやく完成できただけでも達成感でいっぱいだ。プログラミング自体が初の経験とあって、これまでに経験したことのない疲労にも襲われた。記事では紹介しきれなかったが、無数のエラーが吐き出され、その都度修正を繰り返した。
そして、日々多くのニュースリリースや記者説明会の案内を受け取るマイナビニュース TECH+編集部としては、まだまだこれだけでは使い物にならない。早い話が、実際にニュースリリースが掲載されるWebページを検索して見た方がずっと楽なのだ。
そこで今後の新たな目標もできた。今後は複数サイトの最新ニュースを取得する仕組みや、ページが更新されたら自動で通知される仕組みなどにも挑戦してみたいと思う。今回の自由研究を通じて、自分で書いたコードが実際に動く感動を味わえたので、日々の業務を効率化するためにもさらに勉強を続けたい。
Pythonは簡単だと聞いていたけれど
前回、筆者らはProgateを使用してPythonを学習する過程を紹介した。今回は編集部における業務課題の解決を想定して、各社がニュースリリースを配信しているページから最新のものを取得する仕組みの構築に取り組む。具体的には、スクレイピングという技術を使って、まずは自社のニュースリリースサイト(https://www.mynavi.jp/news/)から直近のリリースを取得する。
まず筆者がつまずいたのは、開発環境の準備である。Progateはブラウザで動くため、勉強の開始に際してはPCに何もインストールせずに手軽に始められる。しかし、自分の手でコードを記述する際にはエディタやIDE(統合開発環境)が必要となる。IDEといえば、MicrosoftのVisual Studio Code(VSCode)やAppleのXcodeなどが有名だ。
VSCodeを使用しようと思ったのだが、会社支給のPCではそもそもインストールがうまくいかなかったため、今回はPCにインストールすることなくブラウザから直接Pythonを記述し実行できる「Google Colaboratory」を使うことにした。これで、ようやく作業を開始できる。
実際にコードを書いてみよう
スクレイピングはWebページのHTMLから必要な情報を抽出する技術だ。今回のように最新のニュースを取得するほかにも、商品価格の比較や口コミの取得などに使われる。スクレイピングで広く使われる「BeautifulSoup」と「Requests」ライブラリを活用してみる。
!pip install requests
!pip install beautifulsoup4
続いて、HTMLを取得するWebページ(今回は当社ホームページのニュースリリース)を指定し、BeautifulSoupで解析してみる。出力すると、無事にHTMLを取得できていそうなことが分かる。
url = "https://www.mynavi.jp/news/"
r= requests.get(url)
soup = BeautifulSoup(r.content, "html.parser")
print(soup)
次に必要なHTMLタグを確認する。取得したHTML情報からも確認できるほか、Google Chromeの場合は右クリックで「検証」を開くか、キーボードの「F12」を押すことでデベロッパーツールから確認できる。
今回の場合、取得したい日時とリリースのタイトルはどちらもpタグが使われており、class属性がそれぞれ「date」「txt」となっている。
最後に、class属性を指定してpタグの情報を抜き出してみる。
print(soup.find("p", class="date"))
print(soup.find("p", class="txt"))
余談
なんとか自分でコードを記述し、目標だった「スクレイピングで最新のニュースを取得する」ところまでたどり着いた。せっかくなので、もう少しこのコードを改良してみようと思う。
○テキストだけを出力する
上記のコード実行結果では、目的の情報と一緒にHTMLタグも抜き出されている。そこで必要なテキストのみを出力する。
print(soup.find("p", class="date").text)
print(soup.find("p", class="txt").text)
○複数のニュースを抽出する
日々発表されるニュースリリースは1本とは限らない。複数のニュースリリースが発表されたら見逃してしまう場合もある。そこで、上から5本のリリースを抽出した。
for i in soup.findall("p", class="txt",limit=5):
print(i.text)
加えて、せっかくなので日付と共にリリースタイトルを抽出した。
for i in soup.findall("p",class=["date","txt"],limit=10):
print(i.text)
さらなる目標
閑話休題。初心者ながら、ここまでようやく完成できただけでも達成感でいっぱいだ。プログラミング自体が初の経験とあって、これまでに経験したことのない疲労にも襲われた。記事では紹介しきれなかったが、無数のエラーが吐き出され、その都度修正を繰り返した。
そして、日々多くのニュースリリースや記者説明会の案内を受け取るマイナビニュース TECH+編集部としては、まだまだこれだけでは使い物にならない。早い話が、実際にニュースリリースが掲載されるWebページを検索して見た方がずっと楽なのだ。
そこで今後の新たな目標もできた。今後は複数サイトの最新ニュースを取得する仕組みや、ページが更新されたら自動で通知される仕組みなどにも挑戦してみたいと思う。今回の自由研究を通じて、自分で書いたコードが実際に動く感動を味わえたので、日々の業務を効率化するためにもさらに勉強を続けたい。
「プログラミング」をもっと詳しく
「プログラミング」のニュース
-
Techouse、プログラミング言語Rubyの国際カンファレンス「RubyKaigi 2024」にPlatinumスポンサーとして初協賛5月10日14時46分
-
モノづくり市場のIT人材育成をサポート5月10日10時46分
-
需要の高いPythonの平均年収は1249万円、プログラミング言語年収ランキング5月9日13時12分
-
Renewer代表取締役 堀内亮平の著書『ChatGPTを徹底活用! ビジネスパーソンのためのプログラミング勉強法』が6月12日(水)に翔泳社から発売5月9日12時46分
-
【年収1,249万円】Pythonエンジニア2024年最新|フリーランス副業調査5月9日11時46分
-
ロジカが元・日テレアナと動画教材制作 子どものコミュニケーション力向上に5月8日8時0分
-
英語タイピング「ニューホライズン」練習サイトオープン5月7日19時45分
-
漫画【第9話】<ショップ店員編>スタート!お客様番号の登録ミスを防ぐ「チェックデジット」導入がうまくいったのはいいけれど、なにやら暗雲が…5月6日12時30分
-
プログラミング言語「R」に脆弱性、任意のコード実行の可能性5月3日18時37分
-
【夏休み2024】ライフイズテック、10コース以上のAIキャンプ参加者募集5月2日16時45分