pagetakaBlog

写真、PC、ネット、岡山、旅の話題をお届けします

Python:Webスクレイピングをとりあえずやってみる。

AnacondaとVSCodeをつかい、Webスクレイピングしようと思います。とりあえずの「成功」を得たいとせっかちな爺がやったことをメモ的に紹介します。
手順が長いと理解力・経験値不足でヨロコビにたどり着く前に挫折するんですよね。小さな成功で「できるかもしれない」と妄想するところから先に進めるという70歳近い爺の妄想記(≒暴走記)です。

<PC環境>

パソコンは、Windows10(64)で動かしています。i5-9600K+32GB+SSD500GBです。

<Python環境>

Pythonは、Anacondaを使い、Python 3.7 64-Bit Graphical Installer (466 MB)をダウンロード後、インストール作業を行いました。Pythonインストールの時に「Add Python 3.7 to PATH」の左にチェックを入れるのを忘れないように気を付けました。
pagetaka.hatenablog.jp

いろんな記事を見ると「環境変数名の編集」など記述があります。爺にはよくわかりませぬ(放置)。

<プログラムを書く道具:VSCode>

Pythonプログラムを書くのにテキスト・エディターかそれらしいソフトが必要です。VSCodeを使うことにしました。
自分が使っているパソコンに合わせ「Download Visual Studio Code - Mac, Linux, Windows」からダウンロード後、インストールします。

ワークスペースとか設定とかよくわからんので放置。

<Pythonに追加機能をインストール>

Pythonでネット上の情報を取得する(≒Webスクレイピング)のに、ふたつ追加機能が必要だそうです。
Powershellで作業します。VSCodeのターミナル(cmd利用)でもできました。

pip install requests
pip install beautifulsoup4

参考になった記事:初めてのPython --webスクレイピング編--|あべ|note

で、それぞれがどのような働きをするのか、爺にはよくわかりませぬ、放置。

|追記7/7:condaでも良かった機能追加|

何も考えずにやっているので「pip」で機能追加したが「conda」でもできた。「conda install xx」でもOK。

<Pythonプログラムを書く>

import requests, bs4
#追加機能二つを導入

urlPoint="https://pagetaka.hatenablog.jp/entry/2020/06/20/111120"
#urlPointは右側のURLを格納

res=requests.get(urlPoint)
#resにurlPointから取ってきた内容を格納

soup = bs4.BeautifulSoup(res.text)
#soupにBeautifulsoupを使ってresに格納したtextだけ渡し格納する

print(soup)
#VSCodeターミナル画面にsoupに格納された内容を吐き出す

VSCodeを使って、とりあえず動くスクリプトを書きます。環境設定、追加機能インストールしてたら、コピペでも動くかと…。

ふたつの追加機能は「import」で明示し働くようにすることが必要だとか(爺にはわからぬ)。
結果は、VSCodeのターミナル画面にHTMLなどのソースをダラダラと表示します。

|注意も出てきた|

UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("lxml"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.

The code that caused this warning is on line 4 of the file c:/xxx.py. To get rid of this warning, pass the additional argument 'features="lxml"' to the BeautifulSoup constructor.

soup = bs4.BeautifulSoup(res.text)

雰囲気で感じるのに、爺が書いたプログラムはダメダメだけど、私(Python側)がそれなりに自動補正しといたから結果は何とかなっていると思う、というようなことが書いてあるのかと思います。

<HTML、CSSの知識は必須>

ピンポイントで必要な情報だけを取得するには、HTML、CSSの知識が必要です。Pythonを勉強するよりは楽です。h、id、classなどのタグをうまく利用する判断は、対象サイトが複数あると一律にいかないことが多いので、あとは根気…? パソコンやネットの作業で「根気」というのも気が引けますが、まあ、爺にはそのように見えます。

大きい字は見出し、赤い字は強調点、みたいなWebページは段々と少なくなってきましたが、それでも爺の年代では「スタイル」を理解している人は少なめに思いますしね…。

でも、Pythonでとりあえずやってみようかということであれば、動いた~、ということだけでひとまずOKか…。

<追記7/7:この時点の課題>

ダラダラとHTMLが出てきたので、それなりにひとつの「峰」に到達したという感じがした。けども、これでは、ほぼ意味なしです。

必要な情報を得るため、不要な情報を削ることなどなどをやらねばなりませぬ。しかし、その情報の「価値」「意味」を切り分けるのは、HTML、CSSのタグを使うことになります。

いったんHTMLタグ全部入りのテキストとして取り込んでから考えた方がよいのかも…などと、どの段階でHTML、CSSのタグを切り離すのが適切なのか考える…ほぼフリだけの爺でした。