質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Python 3.x

    6442questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Django

    1061questions

    DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

  • スクレイピング

    342questions

djangoからselenium、Beautiful Soupの操作は可能でしょうか?

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 331

grilled_python

score 170

実現したいこと。

djangoでサイトを作成。サイト上から受け取った値を元に、seleniumでブラウザ操作(chrome)。各サイトから得た情報をdjango上に表示する。

例えば、
1.djangoで作成したサイトにユーザーが'python'と入力します。

2.seleniumでブラウザを操作して'python'の検索結果1~10位までのURLを取得します。

3.そのURLを元にBeautiful Soupでスクレイピングします。

4.その結果を表示します。

以上が実現したい事です。

通常のブラウザ操作とスクレイピングに関してなんとかコードは書けたのですが、django上で操作は可能なのでしょうか?

調べてみるとseleniumはブラウザドライバが必須だということは分かりました。
最近はHeadlessChromeというものも出てきているの使うとしたらこれかなと予想してはいます。

イメージとしてはサーバー側のubuntuにHeadlessChromeを入れて、それをseleniumで操作する事で実現できそうな気がするのですが、勘違いしていますでしょうか?

ご指導頂けたらと思います。
よろしくお願いいたします。

参考
SeleniumからHeadless Chromeを使ってみた

サーバー上(Ubuntu16.04)で、Webブラウザを自動実行することで、Web上の特定のデータを定点観測する(1)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

できます。
DjangoはPythonで動いているのですから当然Pythonでできることは何でもDjangoでもできます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/17 12:57

    ありがとうございます。試してみたいと思います。

    キャンセル

checkベストアンサー

+1

可能か、不可能だけならば…どちらも操作するコードを書ければ、可能です。

自分はまだ使った事は無いですが、Djangoのソースを見たところ、テスト実行ファイル内には、seleniumを実行するコードが含まれてましたので、実際に動かす事は可能だと思いますよ。そちらを流用することが出来れば、第一関門はクリアできるかと思います。

第二に、スクレピングも実際のところ、可能かと思われます。

ただ、マルチスレッドなどに対応してないとブロックされたり、して使い物にはならないんじゃ無いかというのが一番の問題な気がします。

単純に思った事ですが…seleniumを使って検索結果の1〜10位を取得するのは、各種ブラウザの挙動って事でしょうか?そうでなければ、単純にスクレピングして、検索結果にアクセスして回した方が効率よく書けそうな気がします。

user agentなら、単純にスクレピングする際にも指定できるから、seleniumを使う理由が分からなかったです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/17 12:00

    ありがとうございます。初心者なもので漠然とした質問で申し訳ありません。
    マルチスレッドの対応していないとブロックされたりするのですね。調べてみたいと思います。1~10位を検索できればseleniumにこだわる必要はないと考えております。ただ最初はscrapyのみでスクレイピングをしようとしていたんですが、1~10位を取得するという挙動はブラウザ操作が適当かと思ったんですが、scrapyのみでも可能であればそちらでしたら試してみたいと思います。
    https://medium.com/@ali_oguzhan/how-to-use-scrapy-with-django-application-c16fabd0e62e
    こちらの記事の通り進めた事があり、djangoとの連携は可能でした。
    scrapyもしくはbeautifulsoupのみで1~10位を取得できないか試してみたいと思います。

    キャンセル

  • 2018/06/17 12:07

    申し訳ありません。もう一つ、今回の質問の趣旨の一つに、web上での第三者の操作を前提としたアプリを制作したいという部分が含まれています。つまりpythonが使えない人間でもログインして検索ワードさえ入力すればスクレイピング結果が返ってくるような自動化を実現させたい考えており、seleniumが妥当ではないかと考えています。他に適当な方法があればご指導いただければ幸いです。

    キャンセル

  • 2018/06/17 18:11

    selenium djangoで検索するとテストコードの記事ばかりが出てきて関係ないかと思っておりましたがよく読んでみたい思います。スレッドという言葉を教えて頂いてありがとうございます。こちらも学習してみたいと思います。seleniumとscrapyとdjangoで色々試してみたいと思います。

    キャンセル

  • 2018/06/17 23:32 編集

    何かの参考になればと思い、google検索を取得してみるコードを書いてみました。

    そもそも、seleniumの使用用途を調べる事から始めた方が良いかと思います。
    seleniumというソフトウェアは、スクレイピングをするというよりも、ブラウザの挙動を自動テストする事が前提なので、単純にブラウザの挙動を結果として使わないのであれば、別の方法でスクレイピングは検討された方が良いかと思います。

    ```python
    # -*- coding: utf-8
    from bs4 import BeautifulSoup as bsp
    import requests

    def spider(list_keywd):
    lis = []
    g_url = 'https://www.google.co.jp/search?num=10&q='
    b_url = '&ie=UTF-8&oe=UTF-8&hl=ja&client=safari'
    for keywd in list_keywd:
    print('')
    print(keywd)
    lis = [g_url, keywd, b_url]
    s = str(''.join(lis))
    print(s)
    resp = requests.get(s)
    resp.raise_for_status()
    bsObj = bsp(resp.text, "html.parser")
    s = bsObj.select('.r > a')
    print(s)

    if __name__ == '__main__':
    #URLの指定
    list_keywd = ['python','スクレイピング','Django']
    spider(list_keywd)
    ```

    キャンセル

  • 2018/06/18 02:28

    コードありがとうございます!
    &ie=UTF-8&oe=UTF-8&hl=ja&client=safari
    こういう書き方が出来るんですね。勉強になりました。

    キャンセル

  • 2018/06/18 09:46

    補足するならば、
    num=10を100にすれば100返ってきます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python 3.x

    6442questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Django

    1061questions

    DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

  • スクレイピング

    342questions