南びわ湖エリア情報

草津市・守山市・栗東市周辺の情報を発信していきます

pythonのつづき、スクレイピング(requests)

ライブドアブログのほうの「南びわ湖エリア情報」でやっていた

pythonでやっていたことの続きをこっちで

f:id:minamibiwako:20210304150302p:plain

 

びわ湖エリア情報は、ライブドアブログ から はてなブログ へ引っ越しました。

南びわ湖エリア情報(ライブドアブログからの引継ぎ) - 南びわ湖エリア情報

minamibiwako.hatenablog.jp

 

 

 

目次

 

 

 

pythonの独学のうち、ライブドアブログでやってた分を復習しておきます。 

■■■■■■■■■■■■■■■■■■

■■■  復習ここから

■■■■■■■■■■■■■■■■■■ 

PC作業環境

OS: windows 8.1

pythonインストールできた状態なら

この記事の .pyファイルとバッチファイルをコピペして、バッチファイルをダブルクリックすれば動作確認できますので、ぜひ試してみて下さい!

 

やったことまとめるマインドマップ(無料登録)無料の範囲で十分!

f:id:minamibiwako:20210303172639p:plain

blog.livedoor.jp

マインドマイスターでまとめておく。

なぜか?

詳しくは、上の記事に書いていますがマインドマップがいいのは

「考える範囲を限定して、考えたい範囲に焦点 を当てて集中できること」です。

考える範囲を限定するには「見えない化」が必要です。考えない部分は「見えない化」して、考えたい部分だけに限定できることが「見える化」なのです。

 

抽象化

 ↑

「今、考えたい部分」

 ↓

具体化

 

有料、無料のいろいろなマインドマップツールがありますが、試した中では「マインドマイスター」が 抽象化⇔具体化の行き来 がスムーズにできて使いやすいので「無料の範囲」で使っています。抽象度を上げて、俯瞰して全体を見たい時、具体的・技術的な細部の確認がしたい時、瞬時に考えたいレベルに焦点を当てられます。おすすめです。

 

マインドマップの利点

①抽象化・具体化の行き来により、考えのピント(焦点)を当てられるようになる

②忘れていても、前回の思考レベルに復帰しやすい

 

独学で何かをマスターしようとがんばってる途中で中断して、長時間が経ってしまった後でも、独学中断前時点の状況に戻しやすい。人間は3ヶ月たったら、ほぼ全てを忘れるw

自分が復帰しやすいように、まとめるのも良いスキルになる!

忙しくて、独学するのが細切れの時間になってしまう。前の細切れ時間から、次を進めるのが時間が開いてしまう前提で、マインドマイスターでまとめておくと、細切れになりがちな努力が無駄にならなくて、おすすめ。 

 

 

python ダウンロード・インストール・起動 → 動きの確認

f:id:minamibiwako:20210304055714p:plain

blog.livedoor.jp

 

 

python でクローリング・スクレイピングの準備

f:id:minamibiwako:20210304150038p:plain

クエスト: みなびわブログの pv 戦闘力「0.7万pv」を 30万pv に高めよ!

blog.livedoor.jp

 

■■■■■■■■■■■■■■■■■■

■■■  復習ここまで

■■■■■■■■■■■■■■■■■■ 

 

 

プログラム学習過程について 

「何をやって、どんな結果が出たのか」記録しながら進み、ふり返れるように!

f:id:minamibiwako:20210304064703p:plain

 

作業フォルダに「hw001.py」という名前のテキストファイルを作成します。

pythonコード hw001.py

# coding: shift_jis
print("Hello World !")

 

作業フォルダに「do_py001.bat」という名前のテキストファイルを作成します。

バッチファイルpythonコードを実行) do_py001.bat

rem do_py001.bat
@echo off
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set time2=%time: =0%
set hour=%time2:~0,2%
set minute=%time2:~3,2%
set second=%time2:~6,2%
set logname=%year%-%month%-%day%_%hour%_%minute%_%second%

python hw001.py >> %logname%.txt

午前9時だと、timeが [_90000] のように頭にスペースが入ってしまい、出力ファイル名が途切れてしまうので、time2に一旦入れて、スペースを0に置換してから出力ファイル名に使っています。 

 

エクスプローラー上の「do_hw001.bat」をダブルクリックすると

タイムスタンプ名のファイルに

出力結果(1)

Hello World !」が出力され保存されます。

 

pythonコード( .pyファイル)をみたら、具体的にやった「コードの内容」 を、

バッチファイル( .batファイル)をみたら、何をやったのか「.py をどう実行」したか

をいつでも、見返すことができます。

 

pyファイルだけだと、「これって、どうやって実行してたのか?」など、分からなくことがあるので、実行環境も含め、実行の仕方をbatファイルに残しながら進めていく。

エクスプローラー上の「.batファイル」をダブルクリックしたら、いつでも再現性があり、その場ですぐに出力結果ファイルが出力できる状況で学習を進めていきます。

 

※内容が分からなくても、コピペして同じファイル名のファイル作成して、やってみると動くと思います!(実際に動作させたものを載せています。) pythonコードとバッチファイルをコピペして、バッチファイルをダブルクリックして出力結果を出しておく。理解していなくても、コンピューターに働いてもらえる部品を確保できるということです。必要になったときに、必要な部分だけpythonコードを書き換えれば、後から好きなように改造できます。

 

 

プログラム学習の進め方

上のライブドアブログの時にやっていたのと同様に、無料の youtube でキーワードを確認しながら、実際に python を動かしながら独学を進めていきます。

 

 

pythonスクレイピング

スクレイピングとは「ゲット」と「パース」(取得と解析)
scraping
プログラムでwebサイトにアクセスし、取得したHTML情報から必要な内容を抽出すること

 

 

f:id:minamibiwako:20210304143010p:plain

ツイッター、インスタグラム、メルカリ、アマゾンは

スクレイピングが禁止されています。 

 

f:id:minamibiwako:20210304143034p:plain

規約を違反しないように注意。

 

f:id:minamibiwako:20210304150630p:plain

ゲット(取得)requests

パース(解析)beautifulsoup 

 

f:id:minamibiwako:20210304150827p:plain

 japascriptが使われているサイトの html をゲット

selenium

 

上のライブドアブログ時の

まとめの一部を拡大

f:id:minamibiwako:20210305000355p:plain

 

とても時間がたっているけど、ライブドアブログ時の前回の内容と一致しているので、この動画シリーズの内容に沿って、進めていきます。 

f:id:minamibiwako:20210304175915p:plain

 

作業フォルダに「get_html_001.py」という名前のテキストファイルを作成します。

びわ湖エリア情報のブログトップページのhtmlを取得してみる!

pythonコード get_html_001.py

# coding: shift_jis
import io,sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')

url = "https://minamibiwako.hatenablog.jp/"
import requests
html = requests.get(url)
print(html.url)

print(html.text)

不明文字処理

プロンプト上で print(html.text) すると出力されているのに、ファイルに出力されないという問題が出ました。指定したファイル名でファイルは作成されるのですが、中身が空になってしまうという問題です。上部4行を追記することでファイルに出力されるようになりました。?になる不明文字が含まれていると処理が終了してしまい、ファイルに出力できなくなっているのが4行追記で解決されると理解して、先に進みます。

参考メモ

UnicodeEncodeError: 'cp932' codec can't encode character '\xa0' 

 

作業フォルダに「do_py005.bat」という名前のテキストファイルを作成します。 

バッチファイルpythonコードを実行) do_py005.bat 

rem do_py005.bat
@echo off
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set time2=%time: =0%
set hour=%time2:~0,2%
set minute=%time2:~3,2%
set second=%time2:~6,2%
set logname=%year%-%month%-%day%_%hour%_%minute%_%second%
python get_html_001.py >> %logname%_get_html_001.txt

 

エクスプローラー上の「do_py005.bat」をダブルクリックすると

出力結果(2)

https://minamibiwako.hatenablog.jp/
<!DOCTYPE html>
<html
lang="ja"

data-admin-domain="//blog.hatena.ne.jp"
data-admin-origin="https://blog.hatena.ne.jp"
data-author="minamibiwako"
data-avail-langs="ja en"
data-blog="minamibiwako.hatenablog.jp"
data-blog-comments-top-is-new="1"
data-blog-host="minamibiwako.hatenablog.jp"
data-blog-is-public="1"
data-blog-name="南びわ湖エリア情報"

以下省略

タイムスタンプ名のファイルに取得したhtml

しっかりと「南びわ湖エリア情報」の html が取得できていることが確認できました。

HTTP通信して、HTMLのゲット(取得)をする requests ライブラリが使えました。

 

滋賀を盛り上げていく旅は続く

pythonでスクレイピング(beautifulsoup) - 南びわ湖エリア情報

 

 

■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■■■■■■■■■■■■■■■■■■■■■■■■■■■■

以下、ネット上の反応