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

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

新規登録して質問してみよう
ただいま回答率
85.49%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Django

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

Python 3.x

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

Q&A

解決済

2回答

4917閲覧

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

grilled_python

総合スコア237

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Django

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

Python 3.x

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

0グッド

0クリップ

投稿2018/06/15 18:26

実現したいこと。

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)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

投稿2018/06/16 13:04

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grilled_python

2018/06/17 03:57

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

0

ベストアンサー

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

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

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

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

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

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

投稿2018/06/16 12:23

-jL-

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grilled_python

2018/06/17 03: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位を取得できないか試してみたいと思います。
grilled_python

2018/06/17 03:07

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

2018/06/17 09:11

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

2018/06/17 14:33 編集

何かの参考になればと思い、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) ```
grilled_python

2018/06/17 17:28

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

2018/06/18 00:46

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問