ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

【Python2.7】BeautifulSoupで(個人的に)よく使うコードをメモ

といっても、初歩的な初歩なんですけども。。。

準備

from bs4 import BeautifulSoup

これでおk。まだインストールしていないならpipでインストールしてね。

今回はurlからデータを取得してそれをBeautifulSoupへ渡す。

import requests

response = requests.get('http://www.yahoo.co.jp')
soup = BeautifulSoup(response.text)

おk。

ちなみに、htmlファイルをディスクからreadして渡すのもおk。

file_path = 'htmlのファイルパス'
f = open(file_path, 'r')
data = f.read()
f.close()

soup = BeautifulSoup(data)

1つの要素にアクセス

soup.find('div')

あれ・・・? なんもとれねぇ。

ソースみたら、全部テーブルだった。。。まじ?(よくみたら推奨ブラウザみたいなのがありました。普通にブラウジングしたら問題ないはず)

soup.find('table')
# いっぱいhtmlが出力される・・・はず

複数の値を取得する

複数の値を取得したいならfindAllを使う。

# まだbeautifulsoupのオブジェクト
>>> type(soup.find('table'))
<class 'bs4.element.Tag'>

# こっちもそうだけど、こっちはループさせることができる
>>> type(soup.findAll('table'))
<class 'bs4.element.ResultSet'>

複数値がとれたらループすることもできる。そうして子要素にアクセスすることができる。pythonlistとほとんど同じ使い方ができる(と思う)

>>> len(soup.findAll('table'))
25

for table in soup.findAll('table'):
    print table # 何かいっぱいでてくる。。。はず

classなどの属性を指定して検索する

findにはパラメータを渡すことができる。

まずはclassを指定して検索する。

soup.findAll('ul', {'class': 'emphasis'})

こんな感じでdictで渡せばそれを条件に検索してくれる。便利。

もちろんidも使えるし、属性値もいける。

soup.findAll('td', {'align': 'center'})

テキストを取得

BeautifulSoupのオブジェクトで、タグの中にテキストが存在するなら、textで取得することができる。

soup.find('td', {'align': 'center'}).text

# メソッドもある。こっちのほうがいいのかな?
soup.find('td', {'align': 'center'}).getText()

属性値を取得

data-*みたいな属性値にもアクセスできるし、imgタグやaタグのsrcまたはhrefにもアクセスできる。

BeautifulSoupのオブジェクトにdictの要素にアクセスするように指定すればおk.

soup.find('td', {'align': 'center'})['align']
'center'

soup.find('a')['href']
'http://help.yahoo.co.jp/'

soup.find('img')['src']
'http://k.yimg.jp/images/clear.gif'

こんな感じ。

雑感

何度か触る割には本日あまり覚えていなかったのがショックだったのでメモしておきます。。。

過去ログに残っているので最後に触ったのって2年前なのね。。。

www.aipacommander.com

www.aipacommander.com

【Wordpress】wp rest apiで、ツールpostmanを使って、mediaをアップロードする

postman検証するのに良いツールです。

www.getpostman.com

色々ハマりつつも進んできましたが、画像のアップロードだけができない。。。OAuth1で認証しながら。。。

で、試行錯誤して、やっとできました。手順をメモ。

飛ばすURLはこちら

http://localhost/wp-json/wp/v2/media

飛ばすHTTPメソッドはPOST

飛ばすパラメータはOAuthの設定と保存したいファイル名を設定する。

Authorizationのタブの設定

TypeはOAuth1.0を選択して下記を入力

key value 備考
Consumer Key wpから発行
Consumer Secret wpから発行
Token wpから発行
Token Secret wpから発行
Signature Method HMAC-SHA1
Timestamp 入力なし postmanが発行してくれる
Nonce 入力なし postmanが発行してくれる
Version 入力なし postmanが発行してくれる
Realm 入力なし 入力する必要なし

Bodyのタブの設定

ラジオボタンform-dataに合わせます。

key value 備考
file 保存したい画像を選択するだけ カラムのタイプをfileに選択するとfile uploadのinput formが出力されます

これでおk

すると保存することができました!

ハマった話

デバッグするとハマる

postmanのbodyのパラメータにxdebugのkeyとvalueをセットしてphpstormでデバッグできるようにしていました。

しかし、そうするとoauthのsigunatureがうまいこと同じにならず、エラーを返すようになりました。

それを知らず最初ものすごくハマりました。。。おかげで勉強にはなったが。。。

2016年9月23日

やばい。

あんまり美味しくない仕事で1日縛られるとキツイ。

相手は喜ぶけど、自分は喜べない。俺の仕事は残っているのだから。。。

人を成長させるので悩み中。プリンター故障。パソコン故障。共有サーバダウン。全部私。

いや、いいよ。やるよ。けど、時間はみんな一緒なんだよ。

できれば共有してやりたい。または、それぞれが自己解決できるような方向に進むようにしたい。

何が必要かな? 勉強会? 数人を選択してスキルの共有? どれも手応えを感じた事例がない。。。

困った困った困った。

最近愚痴ばっか言っている気がする。どうにかしなきゃ。

2016年9月21日

休み明けの仕事はあんまりうまく進まなかった。

午前中は休み中に錯綜した情報をまとめて、タスクをバラすだけ。

バラした後に仕事に入ろうとしたら、仕事を依頼されて中々前に進まず。

もうちょっとで進みそうと思ったら、打ち合わせが入り、そこで1時間半を消費。

その後に進捗を確認され、2時間程残業。

そして、彼女をお向かえし今に至る。(ちょっとすねられた(^^;)

もう一度一日を過ごすなら。。。

午前中はタスクバラしを専念。これは正解だと思う。じゃないと人に助けを求めることができないからね。

午後。午後は、仕事に入る前に終わりを予想すべきだった。

依頼されたタスクの全体像を理解しないと、いきあたりばったりになるので、仕事が遅くなると感じた。

これは明日からでも実践する。

今日はも寝る。