
初めてのPython --webスクレイピング編--
こんにちは。
外出自粛により暇を持て余していますので、お勉強を進めようと思います。
先日、ようやくこの本を購入しました。
「退屈なことはPythonにやらせよう」
4,000円と結構お高いですね。技術論を書いているわけではなく、Tipsのようにできることが説明されています。私のように、「本格的に学ぶ気はないけどやってみたい」という人にはいい本かもしれません。
パラパラ読んでみて、やってみたくなったwebスクレイピングを試してみます。
webスクレイピングとは
まず気になるのが「スクレイピング」って何?
英語だと、scraping、つまり
こすること、削ること、削り落としたもの、かきくず
ということのようです。
webの情報を削り落としてくる、というイメージだとしっくりきますね。
ブラウザを開く
インポートして開くだけらしいです。せっかくなのでSalesforceのログイン画面に行ってみます。
import webbrowser
webbrowser.open('https://login.salesforce.com/')
開きました。簡単。
前回ブラウザに保存したユーザ名が残ってますが、、まぁいいや。
要素の取得
ログインしてみたいと思いましたが、それより先にHTMLの要素をとれるかどうか、やってみます。
requestsとBeautifulsoupというモジュールを使うと便利なようです。事前にインストールが必要と本に書いてあったので、言われるがままにコマンドプロンプトで実行。
pip install requests
pip install beautifulsoup4
特にエラーなく完了。
サイトを開いてファイル保存したほうがいいのかなと思いつつ、そのまま実行してみます。
import requests, bs4
res = requests.get('https://login.salesforce.com/')
res.raise_for_status() #エラーがあったら終わり
# BeautifulSoupで読み込み
soup = bs4.BeautifulSoup(res.text)
# usernameのIDの要素を取得
elem = soup.select('#username')
print('username tag-----' + str(elem))
print('username tag type-----' + str(elem[0].attrs.get('type')))
結果:警告が出ているものの、出力したいものはきちんと出力できました。
今回はidで検索しましたが、タグ名でも検索できて
select('div span')
のようにすると、divの中のspanが全部取れるらしい。これは使いやすそう。
ログインする
やっぱりログインもやってみたい。
ブラウザ上の操作をしなければならないので、今度はSeleniumモジュールが必要だそうです。本がFirefoxベースだったので、Chrome派の私はこちらにお世話になります。
seleniumをインストールして、参考サイトの動作確認を実施。
なんと。Chromeが最新じゃないとダメなようです。めんどくさ。。
Chromeを更新して再実行したら、実行フォルダに勝手に画像ファイルができていました。
では、Salesforceのログイン画面を開き、ユーザ名とパスワードを入力してサブミットするようにコードを書きます。
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://login.salesforce.com/')
try:
elem_un = driver.find_element_by_id('username')
elem_un.send_keys('xxxxx@playful-wolf-epxxtg.com')
elem_pw = driver.find_element_by_id('password')
elem_pw.send_keys('password')
elem_pw.submit()
print('---done---')
except:
print('---error---')‘
結果:ログインできました。
ヘッダのところに自動ソフトウェアという警告が出るんですね。
あと、ユーザ名等を書き込むのは1文字ずつ順番に打ち込んでいくのが意外とゆっくりでかわいらしかったですw
こんなに簡単にブラウザ操作ができると楽しいです。かなりいろんな作業に使えそうですね。
しかし、会社で導入するのはかなり困難だなというのをまたまた実感しました。色々とインストールするのもダメだし、ブラウザが最新じゃないと動かないとか言われたらもうどうにもなりません・・・
会社の環境って制限を厳しくするのはいいと思うんですが、IT部門くらいは自由にやらせて欲しいものですね。。。
では、今日はここまで。いい暇つぶしでした。