自己紹介
こんにちは!
記事をご覧いただきありがとうございます。
スナガクと申します。
転職などのためにポートフォリオを制作しています。
言語はPythonで、基本的な文法は、本などで学習した者です。
分からないことだらけで、悪戦苦闘中ですが、頑張ります!
同じ初心者の方の助けになれば、幸いです!
今回のゴール
Webスクレイピングを用いて情報収集を行った際、欲しい要素の情報が「<!-- -->」と表示され、上手く情報収集が出来ない。
生じていた問題
下記ブログ記事を参考にさせて頂きました。
https://tkstock.site/2022/08/20/python-selenium-pagesource-beautifulsoup/
結論から言うと、requests.getだと、非同期情報の習得が出来てないから、になります。
少し非同期情報と非同期処理の説明をします。
まず、Webスクレイピングの考え方についてです。
パソコンからWebサーバーに、「HTMLの情報を取得したい」とリクエストを投げます(コードでは、requests.getに相当する)。そして、その情報を受け取る、という流れです。
その際、取得にかかる時間は、情報ごとに異なります。
(文字だけか、画像も表示するかで、処理する速度が変わるのと同じ)
ここで、Webサイトの多くは、「とりあえず読み込めた情報から表示していけ」という指示を出します。これが、【非同期処理(順番に情報を読み込まず、手当たり次第に表示させる)】になります。(なぜ非同期処理を行うかは、記事の最後に記載しています)
そうです、requests.getだと、この「すぐに読み込めた情報」しか習得できない、という事になります。だから、<!-- -->と表示されて、上手く取得できないのです!
(と、予想しています)
具体的な行動
結論:Seleniumを使ったスクレイピングに切り替える or Seleniumのブラウザが表示しているサイトのHTMLを取得して、それをBeautifulSoupで解析する(requests.get()の代わり)
コード(後者の場合)
import time
from selenium import webdriver
~~~
(ライブラリの読み込みとか基本設定は環境で代わるので省略)
~~~
# SELENIUMでサイトにアクセス
driver.get("http://~~~")
# 非同期処理の情報が表示されるまで待機
time.sleep(5)
# Seleniumのブラウザが表示しているサイトのHTMLを取得
html = driver.page_source
# 取得したHTMLをBeautifulSoupで解析できろようにする
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
*上記ブログから引用させて頂きました
おわりに
「<!-- -->」の対処するために記事が無かったため、投稿させて頂きました。
また、SeleniumとBeautifulSoupの組み合わせも知っておいて損はない、のかもしれません。
余談
非同期処理を行う理由
順番に情報を読み込む場合だと、一つ時間がかかる処理があれば、その段階で処理が止まったように見える。すると、Webサイトを訪れた人は、画面がフリーズした!と思って、サイトから離れてしまう、だから非同期処理を行っています。
#作成する予定のポートフォリオ詳細
制作するポートフォリオの内容は、
Djangoを使ったWebアプリケーションです!
Webアプリケーションの中身は、
It技術の最新情報・トレンドを確認できる、そんなサイトです。
時間がない、ご多忙なエンジニアの方でも、
意欲があれば、このサイトを見て勉強できる。
また、トレンドの情報を自ら投稿し、周りとも共有できる。
そんなサイトを作れば、周りの方に貢献できるかな?
と思っています!
具体的な方法は、
Webスクレイピング等を用いて、
最新技術や、気になるトピックを一目見て確認できる。
そんなサイトです!
また、機能は順次追加していければ、と思っています!
更新頻度は、1週間に1~2回になると思います!
(2022/11/12 現在)
見守って頂けると幸いです!
ご指導、ご鞭撻のほど、よろしくお願いいたします。