元職業エンジニアの生き方

これまでとこれからを考えるための備忘録

SeleniumとPythonでGoogle検索を実施して検索結果の1番目を取得する

宮本です。 Twitterコチラ

はじめに

SeleniumPythonで操作する勉強をしているのでその備忘録です。

仕様

  1. キーワードでGoogle検索の1番目のURLを取得

環境的なあれこれ


実装

python:google_url.py


#!/usr/bin/
# -*- coding: utf-8 -*-

import os, io, time
import urllib2 as urllib
import selenium.webdriver
from PIL import Image

kw = u'道後温泉'
url = 'https://www.google.co.jp/'

webdriver = selenium.webdriver
chop = webdriver.ChromeOptions()
chop.add_argument('--disable-gpu')
chop.add_argument('--no-sandbox')
driver = webdriver.Chrome(executable_path='your chrome driver path', chrome_options = chop)
driver.implicitly_wait(15)
    
driver.get(url)
print(driver.current_url)
time.sleep(5)

print('KW : ' + kw)
xpath = '//*[@id="lst-ib"]'
search = driver.find_element_by_xpath(xpath)
search.send_keys(kw)
time.sleep(5)

xpath = '//*[@id="sbtc"]/div[2]/div[2]/div[1]/div/ul/li[9]/div/span[1]/span/input'
button = driver.find_element_by_xpath(xpath)
button.click()
time.sleep(5)

xpath = '//*[@id="rso"]/div[1]/div/div[1]/div/div/h3/a'
first_url = driver.find_element_by_xpath(xpath)
print(first_url.get_attribute('href'))

driver.quit()

 

結果

上記の場合道後温泉の検索結果1番目が出力されるはずです。

 

今回はあえてPython上のSleepを実施しましたが、本来は要素表示を待って動作をするほうがよいです。

それとXpathでの取得をしてみましたが、もちろんaタグなどの要素を取得することもできます。

SeleniumとPythonでYahoo画像検索から自動で画像をダウンロードする

宮本です。 Twitterコチラ

はじめに

機械学習に手を出す際に「画像取得だ!」と思いつきでやってみました。 BeautifulSoupでも出来そうですがあえてSeleniumを使いました。

仕様

  1. キーワードでYahoo画像検索
  2. 最初の1枚目を自動でダウンロード

環境的なあれこれ


実装

python:yahoo_image.py


import os, io
import urllib2 as url lib
import selenium.webdriver from PIL import Image

kw = '道後温泉'
url = 'https://search.yahoo.co.jp/image/search?p=' + kw
DL = os.getcwd() print('KW : ' + kw) print('DL : ' + DL)

webdriver = selenium.webdriver
chop = webdriver.ChromeOptions()
chop.add_argument('--disable-gpu')
chop.add_argument('--no-sandbox')
driver = webdriver.Chrome(executable_path='your chrome driver path', chrome_options = chop)
driver.implicitly_wait(15)

driver.get(url)
image_cls = driver.find_element_by_class_name('tb')
image_url = image_cls.find_element_by_tag_name('a').find_element_by_tag_name('img').get_attribute('src') image_data = urllib.urlopen(image_url)
image_file = io.BytesIO(image_data.read())
im = Image.open(image_file)
im.save(DL + '/' + kw + ' .jpg')

driver.quit()

 

結果

これで同フォルダ内に道後温泉の検索結果の1枚目がDLされるはずです。

※ヘッドレスモードではないので、ブラウザが立ち上がって閉じる動作を見れます!

 

要素の取り出しがタグやクラス名なのですが、XPATHでもできます。

ちなみにImageあたりのImportですが、Python2だとちょっと手間取ったりします。

 

これらについては気が向いたらやっていきたいです。

Pythonで収集したデータを小規模フレームワーク「Flask」で画面表示させてみた。

今回は、Pythonの小規模フレームワーク「Flask」をいじってみました。

フレームワークも沢山あるようで、有名どころは「Django」「Bottle」とかですね。

 

今回なぜ「Flask」かというのはなんとなく目に入ったから。

 

使用した言語などの情報は以下。

言語;Python3

フレームワーク:Flask

その他:HTML・CSS

 

結果からだします。

それらしい画面表示ができました!

f:id:adweallab:20170523224409p:plain

Pythonで動いています!

色々なボタンがありますが、ブラフなので実際にクリックできるのは2つ程度…

 

今回はこれだけです・・・とりあえず動いた程度。

次回はFlaskの動作、表示プログラム(HTMLとか、そこらへんの構成とか)を展開していきたいと想います。

 

本日の備忘録として。

それでは。

クラウドファンディングサイト「Readyfor」での支援金額上位プロジェクト(2018年1月8日時点)

順位 カテゴリー プロジェクト名 支援金額 パトロン
1位 地域 赤ちゃんを虐待死から救う「赤ちゃん縁組」事業を立ち上げたい! 29,595,000円 1,391人
2位 社会にいいこと 足を失った人々が「走る」ことへ一歩を踏み出せる場を創りたい! 17,533,000円 631人
3位 チャレンジ まずは知ることから!リディラバ・大人のための学校を実現する! 14,537,000円 647人
4位 チャレンジ 行方不明の星たちを探すカギに遂に辿り着く。銀河誕生の謎に迫る 12,303,000円 259人
5位 アート 佐藤雅彦研究室/表現手法の探求 短編映画群 "filmlet C” 製作 11,015,000円 302人
6位 アート 伝説のバンドROGUE主催の音楽フェスGBGB 感動フィナーレを映像化 10,977,000円 514人
7位 ものづくり プロアングラー川村光大郎が求める最高のルアーを作りだします! 10,660,000円 621人
8位 地域 陸前高田市の空っぽの図書室を本でいっぱいにしようプロジェクト 8,245,000円 862人
9位 社会にいいこと いじめ、虐待、貧困等で悩む子どもたちと支援団体を繋ぎたい 8,022,000円 374人
10位 社会にいいこと 28年間仙台市の親子を支え続けた無認可保育園を守り継ぎたい! 7,569,000円 364人

クラウドファンディングサイト「Makuake」での支援金額上位プロジェクト(2018年1月8日時点)

順位 カテゴリー プロジェクト名 支援金額 パトロン
1位 プロダクト UMPCを忘れられないあなたへ 超小型パソコン『GPD Pocket』を日本でも 97,191,360円 1,478人
2位 プロダクト 小さなボディにフルオーケストラ。Hi-Fiサウンドの完全ワイヤレスイヤホンAir 94,474,700円 5,095人
3位 プロダクト GODJ Plus 世界初!A4サイズのクラブハウス。スピーカー付きDJシステム 53,037,600円 1,292人
4位 プロダクト PCゲーマーへ朗報!コントローラ付ゲーム専用モバイルPC<GPD WIN>上陸! 48,863,600円 1,232人
5位 プロダクト au INFOBARがトランスフォーマーに。携帯電話型変形フィギュアを限定販売! 32,308,200円 3,535人
6位 スタートアップ 世界一のメンズフェイシャルエステを造り、「日本の男はカッコいい!」未来を創る 31,396,500円 243人
7位 プロダクト あなたの夢が今、カタチになる。至高の3DプリンターMAESTRO 限定先行販売! 29,766,960円 156人
8位 地域活性化 記念館最後の年、2017年慶應連合三田会大会を盛り上げよう!【楽々eチケット】 29,257,050円 3,002人
9位 プロダクト メガネにつけてウインクで撮影。世界最速のウェアラブルカメラ「BLINCAM」 26,438,000円 1,323人
10位 プロダクト 世界に一つのオーガニック腕時計「アバテルノ」を日本に広めたい! 23,684,120円 908人

クラウドファンディングサイト「CAMPFIRE」での支援金額上位プロジェクト(2018年1月8日時点)

順位 カテゴリー プロジェクト名 支援金額 パトロン
1位 アート・写真 キングコング西野の個展『えんとつ町のプペル展』を入場無料で開催したい! 46,373,152円 6,257人
2位 アニメ・漫画 山本寛オリジナル作品「薄暮」アニメ制作プロジェクト 21,036,500円 1,225人
3位 チャレンジ 江戸時代からの町並みが残る重伝建の有松で築100年の空き家をカフェに再生します! 5,066,000円 205人
4位 音楽 milktub結成25周年記念ライブDVD「M25-TOKYO」製作プロジェクト 4,350,696円 455人
5位 アート・写真 【pixiv祭】開催!メインモニュメントの「イラストやぐら」をみんなでつくろう! 4,166,500円 76人
6位 音楽 中野の駅前広場で屋外DJイベント「Re:animation 7」を開催する! 3,737,054円 504人
7位 音楽 お花アイドル「hanarichu」3rdシーズン 〜かわいい花娘には旅をさせよ〜 3,316,987円 327人
8位 音楽 HEREニューシングル『タイアップは君だ』PV制作ロック先行投資プロジェクト 2,635,000円 161人
9位 ソーシャルグッド 飯舘村の卒業生とその家族… ばらばらになってしまった村民… みーんなで最高の卒業式を! 2,616,335円 271人
10位 プロダクト 世界最小!iPhone用スタビライザーで美しい動画を撮ろう!! 2,522,567円 264人

Google Spread Shees(GAS)でメニューバーをカスタマイズして追加

Google Spread Sheetのメニューバーへの追加したいと思います。

 

ヘルプの隣にボタンを追加。

f:id:adweallab:20171022141144p:plain

 

スクリプトはこんな感じ。

function onOpen() {
 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 var entries = [
  {name : "処理1" , functionName : "getData1"},
  {name : "処理2" , functionName : "getData2"},
 ];
 spreadsheet.addMenu("カスタマイズメニュー", entries);

}

function getData1() {
 // 何らかの処理
}

function getData2() {
 // 何らかの処理
}

 

それからスクリプトで「onOpen」を実行してみて下さい。

 

メニューバーに追加されます。

 

押下するとスクリプトを走らせたりすることができます。

 

f:id:adweallab:20171022141831p:plain

Google Spread Shees(GAS)でアメブロの記事一覧を取得

GASで個人の方のアメブロ記事一覧を取得してみました。

 

ページをベタ打ちしているので、下記のロジックだと最新1ページのみの取得ができます。

 

これでタイトルを取得できます。

結果としては、スプレッドシート上に書かれる仕様にしています。

 

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(シート名);

 

var blog1 = 'https://ameblo.jp/アメブロID/entrylist';
var fin = '.html';
var regexp1 = /<h1>([\s\S]*?)<\/h1>/gi;

 

function myFunction() {

 var response = UrlFetchApp.fetch(blog1 + fin);
 var result = [];
 for (var i in elements1) {
  var doc = XmlService.parse(elements1[i]);
  var root = doc.getRootElement();
  result.push({
   title: root.getValue().replace('\n', ''),
  })
 }
 var wrt = 2;
 for (var j in result) {
  sheet.getRange(wrt, 1).setValue(wrt-1);
  sheet.getRange(wrt, 2).setValue(result[j]['title']);
  wrt++;
 }
}

 

プログラム的な話をすると、

HTML文をパースした後に正規表現で必要な箇所を取り出して、書き込む仕様です。

 

ページがたくさんある場合は、URL部分を動的にしたりで解決できるかと。

作成日、いいね、コメント数、リブログ数なども取れそう。

 

 

Pythonで国土交通省のAPIを使って市区町村情報を取得

全国の都道府県を取得したいと思います。

 

総務省などでもあるようなのですが、今回は使える国土交通省の土地総合情報システムのAPIを使って取得する。

こちらの2です。

API操作説明 | 国土交通省 土地総合情報システム

 

特にトークンを発行する必要もないので便利。

都道府県コード「01」は北海道。

 

http://www.land.mlit.go.jp/webland/api/CitySearch?area=01

 

これで北海道の市区町村情報が取得できますね。

 

JSONなので、これをPythonを使って整形します。

 

Importはこれですかね。

import json
import urllib2

 

ソースとしてはこんなもんですかね。

「area=XX」ってところを変えてみてください。

 

 url = 'http://www.land.mlit.go.jp/webland/api/CitySearch?area=01'

 try:

  data = urllib2.urlopen(url)

  data = json.loads(data.read())

  data = data['data']

  for i in xrange(len(data)):

   print data[i]['name']

 except urllib2.HTTPError, e:

  print(e.code)

  print(e.reason)

 except urllib2.URLError, e:

  print(e.reason)

 

これで市区町村情報を取得できます。

Pythonで国土交通省のAPIを使って市区町村情報を取得

全国の都道府県を取得したいと思います。

 

総務省などでもあるようなのですが、今回は使える国土交通省の土地総合情報システムのAPIを使って取得する。

こちらの2です。

API操作説明 | 国土交通省 土地総合情報システム

 

特にトークンを発行する必要もないので便利。

都道府県コード「01」は北海道。

 

http://www.land.mlit.go.jp/webland/api/CitySearch?area=01

 

これで北海道の市区町村情報が取得できますね。

 

JSONなので、これをPythonを使って整形します。

 

Importはこれですかね。

import json
import urllib2

 

ソースとしてはこんなもんですかね。

「area=XX」ってところを変えてみてください。

 

 url = 'http://www.land.mlit.go.jp/webland/api/CitySearch?area=01'

 try:

  data = urllib2.urlopen(url)

  data = json.loads(data.read())

  data = data['data']

  for i in xrange(len(data)):

   print data[i]['name']

 except urllib2.HTTPError, e:

  print(e.code)

  print(e.reason)

 except urllib2.URLError, e:

  print(e.reason)

 

これで市区町村情報を取得できます。

Python&BeautifulSoup&PhantomJS&SeleniumでJSレンダリングして情報を取得してみました。

クラウドファンディングサイトをクローリングする上で、JavaScriptで構成されている内容を取得しなければいけなくなり、レンダリング後にHTML情報を取得してみました。

 

対象:

https://www.makuake.com/project/kumamoto_nebutamatsuri/communication/

こちらのサイトの活動報告(今回はタイトルだけ)

 

使用ツール:

Python

◉ BeautifulSoup

◉ PhantomJS

◉ Selenium

 

ソース

from selenium import webdriver
from bs4 import BeautifulSoup
import time

driver = webdriver.PhantomJS()

driver.get("https://www.makuake.com/project/kumamoto_nebutamatsuri/communication/")

time.sleep(5)

html = driver.page_source

bs = BeautifulSoup(html, "html.parser")
titles = bs.find_all('span', 'owner-post__title')
for title in titles:
print title.text

driver.quit()

 

結果

届きました~~(^^♪
くまもと情報タウン紙
笑顔が素敵なスタッフでした!
少しずつ、準備は進んでいます♫

 

意外と簡単にできました。

参考にしたサイトはこちらです。

www.yoheim.net

 

Pythonを動かせる環境があればできます。

URL変えれば色々取れるかと思いますが、今のままだと報告がゼロ件だと落ちそう?笑

シェルスクリプトで、設定ファイル(Config)を読み込んでMySQLへの接続プログラム

シェルスクリプトでの備忘録を残します。

 

ディレクトリ構成】

.

└── sh

   ├── mysqConf.conf

   └── mysqlConnect2.sh

 

mysqConf.conf内 】

USER=root

 

【 mysqlConnect2.sh内 】

./mysqlConf.conf
mysql -u $USER

 

【 結果について 】

この場合、パスワード指定をしていない場合に接続成功

 

パスワード情報も設定ファイル(拡張子をconfにしてわかりやすく!)に書き込めたり出来ますので、試してみてくださいね。

シェルスクリプトで、MySQLへの接続プログラム

シェルスクリプトでの備忘録を残します。

 

【 mysqlConnect.sh内 】

mysql -u root -p

 

【 結果について 】

パスワード指定しているのでパスワード問い合わせが来る
この問い合わせをなくすには、
・オプションのpを消す(パスワード設定していない場合)
・「mysql -u root -pAAA」と記載するとよい(AAAというパスワードの場合)

シェルスクリプトで、指定ディレクトリの情報出力プログラム

シェルスクリプトでの備忘録を残します。

 

ディレクトリ構成】

.

└── sh

   ├── input

   │  ├── 1.csv

   │  ├── 2.csv

   │  ├── 3.csv

   │  ├── 4.csv

   │  └── 5.csv

   └── run.sh

 

【 run.sh内 】

dir=$(cd $(dirname $0) && pwd)

cd $dir

files='./input/*.csv'

for filepath in $files; do

# 1つ目
echo $filepath
 # 2つ目
echo ${filepath%.*}
 # 3つ目
echo $(basename ${filepath%.*})

done

 

【 結果について 】

1つ目の表示:相対パス×拡張子付きのファイル名
2つ目の表示:相対パス×拡張子なしのファイル名
3つ目の表示:拡張子なしのファイル名

 

最初のdir指定はcrontabでも動かせるようにする為だったり。。。

まだ色々できそうですが、今回はこのくらいで。

HTMLでJavaScriptを呼び出して使う備忘録

JavaScriptの呼び出し方を掲載します。

 

パターン1:インラインスクリプトと言って、HTML上に記載

パターン2:外部スクリプトと言って、JavaScriptファイルを呼び出す(一般的)

 

【 パターン1 】

 index.html

<hrml>
<head>
<title>HTMLの表示テスト</title>
</head>
<body>
<p id="miyamoto">元職業エンジニア!</p>
<script type="text/javascript">
  setInterval("miyamoto.style.opacity^=1",100)
</script>
</body>
</hrml>

 

【 パターン2 】

index2.html

<hrml>
<head>
<title>HTMLの表示テスト</title>
</head>
<body>
<p id="miyamoto">元職業エンジニア!</p>
<script type="text/javascript" src="miyamoto.js"></script>
</body>
</hrml> 

miyamoto.js

setInterval("miyamoto.style.opacity^=1",100)

 

うざいくらい点滅させてます。

 

ちなみにJavaScriptは、Ajaxとか、アプリ開発ができたり、ブラウザ上で試したり、動かせるWEBサービスなんかもあって面白いと思います。

 

とにかく色々できるんです。

このJavaScriptが生まれてからWEBが変わったのもうなずけます。