ならんのITと読書と共に生きるブログ

ネタバレなしで本んを読んでみたい!ITなどの最新情報を知りたいという人に向けて語るためのブログです。

【Python】でGoogle検索からのcsv出力!【簡単】

背景

何かを調べるときに、Googleによる要約で、だいたい調べたいことがわかるから、要約とタイトル、URLをGoogle検索から引っ張りたかった。

目的

Google検索して、検索結果を取得し、CSVにして出力するのを自動化する。 自動化することで、今まで、検索に費やされていた時間を減らす。

要件定義

  1. ブラウザの自動操作
  2. 検索結果から、タイトルと要約、URLを得る
  3. 得た結果をCSVに出力する

環境

  • Windows10Pro

  • Python3.7

  • Anaconda

環境構築方法

今回作成しているプログラムは、Chromeの81バージョンを前提としています。
そのため、プログラムを実行する前にChromeのバージョンを81にしておいてください。
↓こちらがわかりやすいです。
Google Chromeのバージョンの確認方法

pip install selenium
pip install chromedriver_binary

実際に書いたコード

import csv
import time  # スリープを使うために必要
from selenium import webdriver  # Webブラウザを自動操作する(python -m pip install selenium)
import chromedriver_binary  # パスを通すためのコード

def ranking(driver):
    i = 1  # ループ番号、ページ番号を定義

    title_list = []  # タイトルを格納する空リストを用意
    link_list = []  # URLを格納する空リストを用意
    summary_list = []
    RelatedKeywords = []

    # 現在のページが指定した最大分析ページを超えるまでループする
    while i <= i_max:
        # タイトルとリンクはclass="r"に入っている
        class_group = driver.find_elements_by_class_name('r')
        class_group1 = driver.find_elements_by_class_name('s')
        class_group2 = driver.find_elements_by_class_name('nVcaUb')
        # タイトルとリンクを抽出しリストに追加するforループ
        for elem in class_group:
            title_list.append(elem.find_element_by_class_name('LC20lb').text)  # タイトル(class="LC20lb")
            link_list.append(elem.find_element_by_tag_name('a').get_attribute('href'))  # リンク(aタグのhref属性)

        for elem in class_group1:
            summary_list.append(elem.find_element_by_class_name('st').text)  # リンク(aタグのhref属性)

        for elem in class_group2:
            RelatedKeywords.append(elem.text)  # リンク(aタグのhref属性)

        # 「次へ」は1つしかないが、あえてelementsで複数検索。空のリストであれば最終ページの意味になる。
        if driver.find_elements_by_id('pnnext') == []:
            i = i_max + 1
        else:
            # 次ページのURLはid="pnnext"のhref属性
            next_page = driver.find_element_by_id('pnnext').get_attribute('href')
            driver.get(next_page)  # 次ページへ遷移する
            i = i + 1  # iを更新
            time.sleep(3)  # 3秒間待機

    return title_list, link_list, summary_list, RelatedKeywords  # タイトルとリンクのリストを戻り値に指定

driver = webdriver.Chrome()  # Chromeを準備

# サンプルのHTMLを開く
driver.get('https://www.google.com/')  # Googleを開く
i_max = 5  # 最大何ページまで分析するかを定義
search = driver.find_element_by_name('q')  # HTML内で検索ボックス(name='q')を指定する
search.send_keys('スクレイピング 自動化 "Python"')  # 検索ワードを送信する
search.submit()  # 検索を実行
time.sleep(1.5)  # 1.5秒間待機

# ranking関数を実行してタイトルとURLリストを取得する
title, link, summary, RelatedKeywords = ranking(driver)


csv_list = [["順位", "タイトル", "要約", "リンク", "関連キーワード"]]

for i in range(len(title)):
    add_list=[i+1,title[i],summary[i],link[i]]
    csv_list.append(add_list)

# タイトルリストをcsvに保存

with open('Search_word.csv','w',encoding="utf-8_sig") as f:
    writecsv = csv.writer(f, lineterminator='\n')
    writecsv.writerows(csv_list)


driver.quit()

感想

合計で、4時間程度で、作成することが出来た。 seleniumを使ったブラウザの自動操作をすることができるようになり、タイトルの取得も出来るようになったので、満足。 ブログを書くときに使えるぞ!

出来るようになったこと

  1. ドキュメントを嫌がらないで読めるようになった
  2. Google検索の自動化
  3. CSVに出力

課題

  1. リストの操作方法の復習
  2. これを、GoogleColabとスプレッドシートを連携して出来るようにする
  3. 最後二つの参考URLにあるようにスプレッドシートから、検索も出来るようにしたい。
  4. HTMLのClass名が変わるとまた、出来なくなるので、Class名が変更しても柔軟にデータを取得出来るようにしたい。

参考文献

  1. PythonでGoogle検索タイトルとURL一覧を抽出してみた
  2. Locating Elements
  3. WindowsでCP932(Shift-JIS)エンコード以外のファイルを開くのに苦労した話
  4. 最後二つの参考URLにあるようにスプレッドシートから、検索も出来るようにしたい。
  5. 【Python】Googleの検索結果をスクレイピングできない時の対処法【解説付き】

次回の実装

CSVのリストを用意して、そこから検索ワードを読み込むプログラムを作成する。今回作成したプログラムと結合して、複数の検索ワードでの検索を容易に行えるようにする。
また、スプレッドシートを用いた、データの格納を出来るようにする。

【Python】Anaconda+Pycharmの環境構築【環境構築】

 

背景

 

昔、Pythonをローカル環境で実現するときに、開発環境を作成するときに記事しかなくて、わかりにくかった。
その時に、動画などで簡単に環境構築する方法があったら、いいなと感じた。

目的

動画を使って環境構築の方法をわかりやすくする

要件定義

  1. Anacondaをインストールする
  2. Pycharmをインストールする
  3. その様子を動画でとる

環境

  • Windows10Pro

  • Python3.7

  • Anaconda

実際の動き

感想

何度もやったから、簡単に環境を構築することが出来るようになったけど、ここまで来るのに時間かかった気がする。
環境構築という面倒なものを簡単にクリアして、プログラミングを楽しいと思ってくれる人が少しでも増えてくれるとうれしい。

参考文献

文章がいい人は、下記のリンクを参考にしてください。

Windows での Python 環境構築から実行までのあれこれ
PyCharmのインストール方法(Windows)
PythonとPycharmの環境設定

【動画変換】動画を画像へ変換する【Python】

f:id:acfoapon:20200308163451j:plain

背景

スマホで、撮影した動画から、ベストショットを見つけて、スクリーンショットを撮るという作業がめんどかった。
なので、簡単に画像を見つけるために、動画を全て画像にすればいいのではないかと思った。

目的

楽をするために、指定した動画をすべて画像化する

要件定義

  1. 目的の動画を指定する
  2. 動画を画像へ変換する
  3. 変換した画像を保存する場所を簡単に指定する

環境

  • Windows10Pro

  • Python3.7

  • Anaconda

環境構築方法

Anaconda Promptを起動します。
Prompt内に下記のコードを記述します。

pip install opencv-python

実際に書いたコード

import cv2

filepath=r'C:\Users\Downloads\test/'
vpath = r'C:\Users\Downloads\test\413'
video_path=vpath+'.mp4'

cap = cv2.VideoCapture(video_path)

num = 0
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret == True:
        cv2.imwrite(filepath+"picture{:0=3}".format(num)+".jpg",frame)
        print("save picture{:0=3}".format(num)+".jpg")
        num += 1
    else:
        break

cap.release()

感想

思ったよりも簡単に(ググって、4分くらいで答えにたどりついた)自分の作りたいプログラムを作ることが出来た。
ファイルの指定を簡単にするぞ!と考えていた。しかし、ファイルの指定は絶対パスで指定した方が、間違い防止になると思い直したため、やめた。

次は、好みの画像を自動提案してくれるプログラムを作りたい。
気が向いたら、作る。
多分他のことに興味がわきそうな気がするから、実現するかは不明

参考文献

Pythonで画像処理をするならOpenCVがオススメ!
Python, OpenCVを用いて動画を画像へ変換する(動画から画像の切り出し)

【Word自動化】ヘッダー込みのWord生成プログラム【Python】

f:id:acfoapon:20200308163649j:plainf:id:acfoapon:20200308163649j:plain

背景

日報を出すとに、Wordファイルを何回も作るのが面倒だった。 定型的な業務の日報の作成を自分でやりたくなくなった。 なので、今流行しているPythonを使って、自動化プログラムを作成した。

目的

Pythonファイルを実行するだけで、簡単に報告書のレイアウトを生成するのが目的

要件定義

  1. Wordファイルの生成
  2. 今日の日付を入れる
  3. ヘッダーを使えるようにする
  4. タイトルの色を黒にする

原案

思いついた走り書きを言語化して、作成しました

環境

  • Windows10Pro

  • Python3.7

  • Anaconda

環境構築方法

Anaconda Promptを起動します。
Prompt内に下記のコードを記述します。

pip install python-docx

実際に書いたコード

from docx import Document
from docx.enum.text import WD_TAB_ALIGNMENT, WD_COLOR_INDEX
from docx.shared import Pt
import datetime

now_time = datetime.datetime.now()
filename = now_time.strftime('%Y_%m%d' + '.docx')
TodayDate = now_time.strftime('%Y/%m/%d')
FilePath = r'C:\Users\デスクトップ\/'

doc = Document()

header_section = doc.sections[0].header

# 標準の文字の大きさ指定
style = doc.styles['Normal']
font = style.font
font.size = Pt(10.5)

# font=doc.styles['Nomal'].font



# シンプルな方
ToDate = header_section.paragraphs[0]
ToDate.text = str(TodayDate) + '\n' + '名前'
ToDate.alignment = WD_TAB_ALIGNMENT.RIGHT

# 段落に見出し追加
doc.add_heading('日報', 0).alignment = WD_TAB_ALIGNMENT.CENTER

# 段落に文章追加
doc.add_heading('目的', 2)
paragraph = doc.add_paragraph('')
doc.add_paragraph('')
doc.add_paragraph('')

doc.add_heading('本日の成果', 2)
doc.add_paragraph('')
doc.add_paragraph('')
doc.add_paragraph('')

doc.add_heading('課題', 2)
doc.add_paragraph('')
doc.add_paragraph('')
doc.add_paragraph('')

doc.styles["Title"].font.color.theme_color = WD_COLOR_INDEX.BLACK
doc.styles["Heading 2"].font.color.theme_color = WD_COLOR_INDEX.BLACK

paragraph.style = doc.styles['Normal']
doc.save(FilePath + filename)


実行結果

コードを実行するとこのような結果になります! f:id:acfoapon:20200302210714p:plain

感想

思ったよりも簡単にできたが、自分の詰めが甘く、4時間くらいかかって、作った。 ドキュメントをちゃんと読むようにするぞ!!

参考文献

Python で docx を使って Microsoft Word を操作する

Put Header with Python - Pythonでヘッダーを配置:docx

僕が質問したこと

公式ドキュメント

本日の参考になったURL

こんばんは、お久しぶりです。

 

ほぼ1年ぶりに投稿します。

 

本日、参考になったURLを紹介していこうと思います。

 

 

現在、僕は長期インターンシップをしています。

で、補助機能としてtkinterを使ったGUIを作っています。

その調べる過程で調べたものを、此方に記載してあります。

 

エンジニア採用担当が知っておくべきteratailの基礎知識
この記事から、採用には、teratailも見られているという考えを持った方がいいという風に考える。

hr-tech-lab.lapras.com

なぜPythonはこんなにも遅いのか?

 

postd.cc


pythonGUIアプリをexe化すると起動が遅すぎるのですが、世の中のpythonプログラマーはどうやっているのか
そもそもPythonは、exe化しないのが、一般的。基本的には、exeにして配布しない。

teratail.com

Python GUI 入門
Tkinter から PIL まで–

http://www.yamamo10.jp/yamamoto/comp/Python/tk_exercise01/text/python.pdf

 

 

tkinterで不明だった点の解決方法

tkinterで得た情報を連続して、テキストファイルに書き込みたい

teratail.com

tkinterのEntryにvalidationを実装する part 1 基底クラスを作る。

不明だった所を教えてくれる関数

qiita.com

Python の isnumeric() メソッド

qiita.com

PythonTkinterを使ってみる

qiita.com

Create a registration form in python using Tkinter package
登録フォームを作るURL

www.codespeedy.com

Code Faster in Python
IDEの補完機能をさらに強力にできるソフト

kite.com

Welcome To Start-SQL!
SQLをある程度深くまで学ぶ事が出来るサイト
ドットインストールで学んだ後に使うかな

 

start-sql.com

 

Pythonを学ぶときに読むべき本2020年版 - 初心者からプロになるために
これらの本を、ちゃんと理解できたら、最強じゃね?

shinyorke.hatenablog.com

探偵AIのリアルディープラーニング 感想

 

あらすじ

人工知能の研究日だった父が、密室で謎の死を遂げた。「探偵」と「犯人」、双子のAIを遺してー。高校生の息子・輔(たすく)は、探偵のAI・相似(あい)とともに父を殺した真犯人を追う過程で、犯人のAI・以相(いあ)を奪い悪用するテロリスト集団「オクタコア」の印旛王を知る。次々と襲いかかる難事件、母の死の真相、そしていあの真の目的とは⁉︎大胆な奇想と緻密なロジックが発火する新感覚・推理バトル。

感想 

 

最近、AIが話題になっていて、AIが自分の職を脅かすと言われています。そのため、探偵AIという新たなものが出てくるかも!そうなったら、この小説の世界観が実現するのではないか?と考えたので購入しました。

読み終わって最初に感じたのは、半端じゃない疾走感を持つ作品だなと思いました。

また、AIについての作品を読んでいて人間について深く知るなんて思っていませんでした。

 

 

随所にAIの課題として考えられているものが入っていて、この本を読めば、AIの何が問題となっているのか?ということがよくわかります。

 

 

探偵AIのリアル・ディープラーニング (新潮文庫nex)

探偵AIのリアル・ディープラーニング (新潮文庫nex)

 

 

 

火のないところに煙は 著者:芦沢 央

あらすじ

「神楽坂を舞台に怪談を書きませんか」。突然の依頼に、かつての凄惨な体験が作家の脳裏に浮かぶ。解けない謎、救えなかった友人、そこから逃げ出した自分。作家は、事件を小説にすることで解決を目論むが――。驚愕の展開とどんでん返しの波状攻撃、そして導かれる最恐の真実。読み始めたら引き返せない、戦慄の暗黒ミステリ!

 

火のないところに煙は

火のないところに煙は

 

 



感想

※ホラー小説じゃない小説だと思っていました。

f:id:acfoapon:20190121221722j:image

静岡県本屋大賞ということで、紹介されていたので、手に取りました。

最初読んでいた時は、「走れメロス」のように短編小説集なのかな?長編小説だと思っていたのにー

失敗した、、と考えていました。しかも、ホラー苦手なのに帯見たらホラーって書いてあるじゃん。「まじかよ、買わなきゃ良かった」と考えていました。

しかし、読み進めていくとめちゃくちゃ面白いです。

どのように面白いかというと、最後の方に行くにつれて短編小説集だと思っていたのに、ちゃんと繋がりがあることに気づけるからです。(詳しくはネタバレになってしまうので言いません)

ちょっと速読気味に読んでしまったので、鳥肌がゾワゾワと立つような感覚を僕は得られませんでした、、。もう一度読み進め始めているのですが、章ごとに恐怖を感じ始めています。結末を知って2回目を読んでいる僕ですら、恐怖を感じるので始めて読んだ方は恐怖を感じることは間違いはないです。

 

なので、ホラーに耐性がない方が読むのはオススメしないです。しかし、ホラーは別に平気orホラー歓迎という人は読んでも楽しめるんじゃないか?

と感じました。

 

評価

1ー10の10段階評で価最大は10です

楽しんだ度7

再読可能性8

ミステリアス度9

総合おすすめ度8

 

「ミステリー+ホラー」を読みたい方には超おすすめな作品です!

僕は、ちょっとホラーが苦手なので、最初は楽しめませんでした。そのため、評価が少し下がってしまっています。

でも、一度は読んで欲しいと思うくらいストーリーは面白かったです!

 

火のないところに煙は

火のないところに煙は

 

 

追記

 

明日は、「探偵AIのリアルディープラーニング」を更新します。

 

 

探偵AIのリアル・ディープラーニング (新潮文庫nex)

探偵AIのリアル・ディープラーニング (新潮文庫nex)