Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What is going on with this article?
@tamago324

【Python】RoboBrowserを使ってナナコの残高を Slack に送る

More than 3 years have passed since last update.

この記事はRoboBrowserを使ってWebページにログインしてクローリング - TILの転載です


最近、下の本を読んでいる。RoboBrowserと言うものがあるらしいので、使ってみたときのメモ

Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド- | 加藤 耕太 |本 | 通販 | Amazon

なんか、フォームに入力したりするときには Requests で行うのは面倒らしいので、 RoboBrowser を使用するっぽい。

jmcarp/robobrowser

インストール

pip install robobrowser

RoboBrowserは内部でBeautifulSoupを使用しているため、BeautifulSoup4とRequestsは一緒にインストールされる

nanacoのサイトにログインし、残高確認をしてみる

RoboBrowserを使ったプログラムの作成で、nanacoのサイトにログインして、残高を表示するプログラムを作ってみた

ソースはGitHubにあげた

tamago324/post_nanaco_slack: Get nanaco balance info

フォームの送信

フォームを送信するには、まず、フォームを取得する。フォームを取得するにはRoboBrowser.get_form()を使う。引数にformのidを渡すことでフォームを取得できる。

ログインのフォームを取得する

>>> from robobrowser import RoboBrowser
>>> browser = RoboBrowser()
>>> browser.open('https://www.nanaco-net.jp/pc/emServlet')
>>> form = browser.get_form(id='login_card')
>>> form
<RoboForm _PageID=SCBS_PCB1001, _DataStoreID=DSBS_PCB1001_Control, _SeqNo=1509980487174_[ACTIVE]_ExecuteThread:__19__for_queue:__weblogic.kernel.Default_(self-tuning)___, _ControlID=BS_PCB1001_Control, _WID=NoWID, _ORGWID=, _WIDManager=, _preProcess=, _TimeOutControl=, _WIDMode=0, _WindowName=, _ReturnPageInfo=, XCID=, SECURITY_CD=, ACT_ACBS_do_LOGIN2=>

テキストボックスに入力する

テキストボックスの name を指定し、value属性に値を代入する

>>> form['XCID'].value = '1234567891234567'
>>> form['SECURITY_CD'].value = '1234567'

フォームの送信

送信するときにはRoboBrowser.submit_form()を使う。引数に値を入力したフォームを渡す。送信後の状態が browser に入っているため、selectなどで要素を取得できる。

>>> browser.submit_form(form)
>>> browser.select('#cardzan > span.time')
[<span class="time">2017年11月05日23時59分時点</span>]

あとはごちゃごちゃ取っていく(適当)


書いている最中になんかエラーが出た

エラー内容

/Users/tamago324/.local/share/virtualenvs/robobrowser-zDYVPytv/lib/python3.6/site-packages/bs4/__init__.py:181: UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("html.parser"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.

The code that caused this warning is on line 60 of the file nanaco_zan.py. To get rid of this warning, change code that looks like this:

 BeautifulSoup(YOUR_MARKUP})

to this:

 BeautifulSoup(YOUR_MARKUP, "html.parser")

  markup_type=markup_type))
Traceback (most recent call last):
  File "nanaco_zan.py", line 60, in <module>
    main()
  File "nanaco_zan.py", line 13, in main
    loginedForm = login(browser)
  File "nanaco_zan.py", line 40, in login
    browser['XCID'].value = NANACO_NUM
TypeError: 'RoboBrowser' object is not subscriptable

解決策

インスタンス生成時にparserを指定すればいいらしい

>>> browser = RoboBrowser(parser='html.parser')

python - Robobrowser BeautifulSoup error - Stack Overflow

6
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tamago324
PythonとかVimとか

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
6
Help us understand the problem. What is going on with this article?