ColaboratoryでSelenium

stackoverflow.com

!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

driver = webdriver.Chrome('chromedriver', options=options)
driver.implicitly_wait(10)
driver.get('http://www.yahoo.co.jp')

html = driver.page_source.encode('utf-8')

# ブラウザ操作
driver.save_screenshot("ss.png")

driver.quit()

soup = BeautifulSoup(html, "html.parser")
print(soup.prettify())
# ウィンドウハンドルを取得する(list型配列)
handle_array = driver.window_handles

# 一番最後に表示されたブラウザにドライバーを切り替える
driver.switch_to.window(handle_array[-1])
or
driver.switch_to.window(driver.window_handles[-1])

暗号化された接続が確立されたドメインに対する信頼性を保証できません

カスペルスキーをインストールしたパソコンでchromeでアクセスすると

暗号化された接続が確立されたドメインに対する信頼性を保証できません。

対策

  1. カスペルスキーのメイン画面を起動し、画面下部にある便利ツールを開き、下記の順に開きます。[マイネットワーク]→[ネットワークモニター]
  2. ポート8009のIPアドレスをメモに控え、左上の←(戻るボタン)を押しメイン画面に戻ります。
  3. 画面左下の [歯車のマーク(設定)] をクリックし [プロテクション] を選択します。
  4. 画面右の一覧から、下記の順に選択します。[アプリケーションコントロール]→[アプリケーションの管理]
  5. 表示された画面内の右上にある検索バーで「Chrome」と入力し、検索します。
  6. Google Chromeを右クリックし「詳細とルール」を選び「除外リスト」を選択します。
  7. 画面中部にある [すべてのトラフィックをスキャンしない]をクリックし、プルダウンから[暗号化されたトラフィックをスキャンしない]を選択します。
  8. 指定IPアドレスのみにチェックを入れ、メモに控えたIPアドレスを入力します。
  9. [指定ポートのみ] にチェックを入れて、「8809」と入力します。
  10. 画面右下にある [保存] をクリックして、右上の [×] で画面を終了します。

対策2

  1. 画面左下の [歯車のマーク(設定)] をクリックし [詳細]をクリックし [ネットワーク] を選択します。

f:id:imabari_ehime:20190215214633p:plain

  1. 暗号化された接続のスキャンの暗号化された接続をスキャンしないを選択します。

f:id:imabari_ehime:20190215214645p:plain

uipathでインフルエンザ情報をスクレイピング

uipathスクレイピング

種類 評価 備考
データ取得 セレクタを調整すればだいたいのものは取れる
テーブル セル結合やマルチヘッダは苦手
自動化 ブラウザをそのままタッチしていくだけで簡単、別ウインドウでも簡単
データ加工 複数を一括で変更する方法がわからない

f:id:imabari_ehime:20190205172838j:plain
uipathスクレイピング

uipath

できるUiPath 実践RPA

できるUiPath 実践RPA

www.uipath.com

dekiru.net

www.uipath.com

dekiru.net

internet.watch.impress.co.jp

internet.watch.impress.co.jp

forum.uipath.com

qiita.com

i.river.go.jpからダムの貯水率を取得する

import re

import requests
from bs4 import BeautifulSoup

dam_name = '早明浦ダム'
url = 'http://i.river.go.jp/_-p01-_/p/ktm1801070/?mtm=10&swd=&prf=3601&twn=3601208&rvr=&den=2255200700004'

# dam_name = '玉川ダム'
# url = 'http://i.river.go.jp/_-p01-_/p/ktm1801070/?mtm=10&swd=&prf=3801&twn=3801202&rvr=&den=0972900700006'

headers = {
    'User-Agent':
    'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'
}

r = requests.get(url, headers=headers)

if r.status_code == 200:

    soup = BeautifulSoup(r.content, 'html5lib')

    contents = soup.find('a', {'name': 'contents'}).get_text('\n', strip=True)

    # print(contents)

    # サブタイトル・単位を除去
    temp = re.sub(r'■\d{1,2}時間履歴\n単位:%\n', '', contents)

    datas = [i.split() for i in temp.splitlines()]

    for data in datas:

        try:
            float(data[1])
        except:
            continue
        else:
            print('ただいまの{0}の貯水率は{1[1]}%です({1[0]})'.format(dam_name, data))
            break

    else:
        print('取得できませんでした')