プログラムほぼ未経験者がGWで少しだけ書けるようになった話

#概要
今までなでしこでしかプログラムを作れなかった人が、
どこにも行かないGW中に、Pythonをちょっとだけ書けるようになり、
簡単なスクレイピングが出来るようになった話。


#買った本と読んだ順番
1.[Pythonふりがなプログラミング](https://www.amazon.co.jp/スラスラ読める-Pythonふりがなプログラミング-株式会社ビープラウド-ebook/dp/B07DR9WNKJ/ref=sr_1_1?__mk_ja_JP=カタカナ&dchild=1&keywords=python+ふりがな&qid=1620433731&sr=8-1)

2.[Python1年生](https://www.amazon.co.jp/Python-1年生-体験してわかる！会話でまなべる！プログラミングのしくみ-森-巧尚/dp/4798153192/ref=sr_1_1?__mk_ja_JP=カタカナ&dchild=1&keywords=python+1年生&qid=1620433809&sr=8-1)

3.[Python2年生　スクレイピングの仕組み](https://www.amazon.co.jp/Python2年生-スクレイピングのしくみ-体験してわかる！会話でまなべる！-森-巧尚/dp/4798161918/ref=pd_bxgy_img_2/357-4003371-3193733?_encoding=UTF8&pd_rd_i=4798161918&pd_rd_r=8a9909fc-0917-4845-a79a-9f7cf9cd1b32&pd_rd_w=7ZC4L&pd_rd_wg=J0Sl6&pf_rd_p=105d6769-bacf-43d4-85ea-a25cec858a3c&pf_rd_r=KMCDVFKP8NYPE9KF9DMN&psc=1&refRID=KMCDVFKP8NYPE9KF9DMN)

4.[シゴトがはかどるPython自動処理の教科書](https://www.amazon.co.jp/シゴトがはかどる-Python自動処理の教科書-クジラ飛行机/dp/4839973857/ref=sr_1_3?__mk_ja_JP=カタカナ&dchild=1&keywords=python自動処理の&qid=1620433912&sr=8-3)

#買ったけど読めてない本
1.[Python2年生 データ分析のしくみ](https://www.amazon.co.jp/Python2年生-データ分析のしくみ-体験してわかる-会話でまなべる-巧尚/dp/4798164968/ref=sr_1_1?__mk_ja_JP=カタカナ&dchild=1&keywords=python+データ分析のしくみ&qid=1620434004&sr=8-1)

#書いた人について
Word、Excelは人並みに使える程度。
プログラミングはなでしこで少し触ったことがある。


#GWでやった学習方法（概要）
1.ふりがなプログラミングを読む。
2.Python1年生を読みながら写経。
3.Python2年生 スクレイピングの仕組みを読みながら写経。
4.シゴトがはかどるPython自動処理の教科書を端々読む。
5.読んだ本を読み返しながら、スクレイピングのプログラムを書いた。


#環境
2012年midのmacbookair + miniconda + pycharm

#本文
今までなでしこで簡単なプログラムを組んだことはありましたが、
Pythonを使ったプログラムを組んでみたいとずっと思っていたこともあり、
どこにも行かないGW期間を使って、勉強してみようと思いました。

昔、openpyxlを使ってExcelを自動化する書籍を買って読んだことはありましたが、
あまり理解出来なかったため、完全に初心者向けの本を読みながら進めてみることにしました。

はじめに、[Pythonふりがなプログラミング](https://www.amazon.co.jp/スラスラ読める-Pythonふりがなプログラミング-株式会社ビープラウド-ebook/dp/B07DR9WNKJ/ref=sr_1_1?__mk_ja_JP=カタカナ&dchild=1&keywords=python+ふりがな&qid=1620433731&sr=8-1)をただ読んでみることにしました。
この時は写経をすることはなく、ただただ読んで、簡単なコードの理解に努めました。
一番の収穫は、メソッドについての理解が得られたことでした。

例えば、"文字列".isdigit について、isdigitの部分がなんでついているのか、
ただコードを読むだけではわかりませんでしたが、ふりがなが付いていたこと、
また、メソッドという概念を知ることが出来たことは大きく、以後の学習の大きな助けとなりました。

※print()のような簡単な命令についてはなんとなく把握していたのですが、
どうして、.isdigitのような付属部分があるのか、その意味するところがわからず、
そのせいで昔詰んでしまっていました。


その後、[Python1年生](https://www.amazon.co.jp/Python-1年生-体験してわかる！会話でまなべる！プログラミングのしくみ-森-巧尚/dp/4798153192/ref=sr_1_1?__mk_ja_JP=カタカナ&dchild=1&keywords=python+1年生&qid=1620433809&sr=8-1)を読み、写経しながら進めました。

この本には、Tkinterを用いた簡単なGUIの作成が書いてあり、業務で使うGUIベースのソフトを作りたかった私にとって、GUIの作り方の取っ掛かりとなった本でした。

2冊の本で基礎を学んだ後、[Python2年生　スクレイピングの仕組み](https://www.amazon.co.jp/Python2年生-スクレイピングのしくみ-体験してわかる！会話でまなべる！-森-巧尚/dp/4798161918/ref=pd_bxgy_img_2/357-4003371-3193733?_encoding=UTF8&pd_rd_i=4798161918&pd_rd_r=8a9909fc-0917-4845-a79a-9f7cf9cd1b32&pd_rd_w=7ZC4L&pd_rd_wg=J0Sl6&pf_rd_p=105d6769-bacf-43d4-85ea-a25cec858a3c&pf_rd_r=KMCDVFKP8NYPE9KF9DMN&psc=1&refRID=KMCDVFKP8NYPE9KF9DMN)と[シゴトがはかどるPython自動処理の教科書](https://www.amazon.co.jp/シゴトがはかどる-Python自動処理の教科書-クジラ飛行机/dp/4839973857/ref=sr_1_3?__mk_ja_JP=カタカナ&dchild=1&keywords=python自動処理の&qid=1620433912&sr=8-3)を読みながら、
1日に1度サイトをスクレイピングして、変更があった際に自分のLINEに内容を通知するソフトを作りました。

そのコードは自宅にあるRasberry pi2にてcronにて自動実行されるようにしており無事に稼働しています。

#今回作成したコード

```python:test.py
import requests
from bs4 import BeautifulSoup
import sys
import urllib

load_url = "https://取得したいサイトのURL"
headers1 = {'User-agent': 'Mozilla/5.0'}
html = requests.get(load_url, headers=headers1)　#ここでヘッダーを指定せずに詰んだ
soup = BeautifulSoup(html.content, "html.parser")

data = soup.find(class_="image_element")
url = data.get("href")
load_url2 = urllib.parse.urljoin(load_url, url)
html = requests.get(load_url2, headers=headers1)
soup1 = BeautifulSoup(html.content, "html.parser")

target = soup1.find(class_="leaflet")  # HPから対象の部分を検索して代入
target2 = target.get("src")  # 対象の部分から画像データの部分を検出

filename = target2.split("/")[-1]  # ファイル部分を検索

target3 = (filename[:-15])  # ファイル名から余分な部分を削除してファイル名を出す
target4 = int(target3)  # ファイル名に1を足すためにintに変換
target5 = target4 + 1  # ファイル名に1を足す
target6 = str(target5)  # 足したものをstrにする

durl1 = r"欲しかったデータのURLの一部" + target3 + ".jpg"
durl2 = r"欲しかったデータのURLの一部" + target6 + ".jpg"

f = open('myfile.txt', 'r')
data = f.read()
f.close()

acc_token = 'LINEのトークン'


def send_line(msg):  # Lineに通知を送るための設定
    url = 'https://notify-api.line.me/api/notify'
    headers = {'Authorization': 'Bearer ' + acc_token}
    payload = {'message': msg}
    requests.post(url, headers=headers, params=payload)


if data == durl1:
    sys.exit()

else:
    f = open('myfile.txt', 'w')
    f.write(durl1)
    f.close()

    send_line("データが更新されたよ！")
    send_line(durl1)
    send_line(durl2)
    sys.exit()