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

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

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

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

Python 3.x

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

Q&A

解決済

2回答

2027閲覧

スクレイピング google検索ワード CSV読み込みのコード

sadie

総合スコア18

スクレイピング

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

Python 3.x

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

0グッド

0クリップ

投稿2019/02/12 02:23

現在の以下のコードでスクレイピングをしています
たくさんのワードを入れ替えて検索結果の収集をしていて、現在はすべて手作業で一つずつコピペでワードの入れ替えをしているため、その工数を効率化したく伺います

python3

1from time import sleep 2import csv 3import requests as web 4from urllib.parse import urlparse 5from bs4 import BeautifulSoup 6 7keyword_sets = [['リフォーム','ガラス','山口'], 8 ['リフォーム','ガラス','愛媛'], 9 ['リフォーム','ガラス','長崎'], 10 ['リフォーム','ガラス','奈良'], 11 ['リフォーム','ガラス','鹿児島'], 12 ['リフォーム','ガラス','青森'], 13 ['リフォーム','ガラス','岩手'], 14 ['リフォーム','ガラス','大分'], 15 ['リフォーム','ガラス','石川'], 16 ['リフォーム','ガラス','山形'], 17 18def google(keywords): 19 url = 'https://www.google.co.jp/search?num=100&q=' + ' '.join(keywords) 20 print('googling... ', url) 21 22 # URL から HTML を取得する。 23 resp = web.get(url) 24 # HTML から BeautifulSoup オブジェクトを作成する。 25 soup = BeautifulSoup(resp.text, "html.parser") 26 27 results = [] 28 # URL、タイトル、説明を取得する。 29 # <div class="g"> のタグ一覧を取得する。 30 for div_elems in soup.select('div.g'): 31 # class="r" のタグ配下の a タグを取得する。 32 a_elem = div_elems.select('.r > a') 33 # class="s" のタグ配下の class="st" のタグを取得する。 34 div_elem = div_elems.select('.s > .st') 35 # 両方存在しない場合があったので、その場合はスキップする。 36 if not a_elem or not div_elem: 37 continue 38 # select() は選択された要素が1つでもリストで返すので、1個目の要素を取り出す。 39 a_elem, div_elem = a_elem[0], div_elem[0] 40 41 # a_elem タグの href 属性を取得し、'/url?q=' を削除する。 42 url = a_elem.get('href').replace('/url?q=', '') 43 # ドメイン部分までを取得する。 44 url_prefix = '{0.scheme}://{0.netloc}/'.format(urlparse(url)) 45 # a タグのテキストを取得する。 46 title = a_elem.text 47 # 説明文を取得する。改行コードは削除する。 48 description = div_elem.text.replace('\n','').replace('\r','') 49 # ドメイン部分までの URL、タイトル、説明をリストに追加する。 50 results.append([url_prefix, title, description]) 51 52 return results 53 54results = [] 55# キーワード分検索を実行する。 56for keywords in keyword_sets: 57 results.extend(google(keywords)) 58print(results) 59 60# CSV に書き込む。 61with open('リフォーム_屋根葺き(山口-鳥取)_list_190212.csv', 'w', encoding='utf8') as f: 62 writer = csv.writer(f) 63 writer.writerow(['タイトル・説明','URL']) # ヘッダーを書き込む。 64 writer.writerows(results) # データを書き込む。

上記「keyword_sets =」の内容をいろいろなワードに入れ替えたいです
自分でしらべて試行錯誤した結果、検索したいワードを書いたCSVを読み込ませる方法が良いかと考えましたが、動くコードがかけず恐れ入りますがご教示頂きたく伺います

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

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

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

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

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

guest

回答2

0

ベストアンサー

Googleに機械的な検索クエリを投げてはいけません。

Google の利用規約では、どのような種類かに関わらず、自動化されたクエリを Google から明示的な許可を事前に得ずに Google のシステムに送信することは禁止されています。リソースの浪費につながる自動化されたクエリの送信には、WebPosition Gold などのソフトウェアを使って自動化されたクエリを Google に送信し、さまざまなクエリによる Google 検索結果におけるウェブサイトやウェブページのランキングを調べようとする行為が含まれます。(Search Console ヘルプより)

投稿2019/02/12 02:29

maisumakun

総合スコア145121

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

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

grilled_python

2019/02/12 03:57

最近スクレイピングを勉強している初心者です。 上級者の方にお聞きしたいのですが、スクレイピング関係になると利用規約を出してくる方が多いのですが、法的拘束力のない事例に対してなんでもかんでも守りに入りすぎな気がするんですが。 もちろん一定のルールを守る事は必要なのは当たり前なのですが、 たとえば利用規約に関してですが、法律的に利用規約に効果をもたらす場合必要なのは利用者登録とログインだと言う事が書いてありました。逆にいうならログインを必要としないサービスはいくら利用規約を定めても法律的には無効の判断される場合があるという事です。 この場合はgoogleの利用規約。 もちろんスクレイピングに関して検挙されてしまった判例も勉強しました。 なにが言いたいかというと。ルールに捕らわれすぎていて余計な足かせをつけている気がしてならないです。 法的な解釈と技術論は別に考えるべきだと思います。 海外のサイトとかだともっと頻繁にスクレイピングに関して議論されているのを見てそんな気がしてなりません。
maisumakun

2019/02/12 04:19

> 法的拘束力のない事例に対してなんでもかんでも守りに入りすぎな気がするんですが。 特にGoogleの場合、機械的なクエリに対しては機械的にブロックしてくることもあります。スクレイピングできるのは「当然の権利」ではありませんので、はっきり禁止を謳っているサイトに関して、堂々と答えるのも適当ではないと判断します。 (技術的な問題であれば、それだけをうまく抽出できるように質問を構成していただくのが、質問する側としての最低限の礼儀ではないかと思います。)
退会済みユーザー

退会済みユーザー

2019/02/12 04:26

> grilled_python さん こんなオープンな場所で、「規約上問題を抱えている方法」を堂々と聞くなよ。ってだけで、別に議論することは問題ないです。 まぁ、初心者がスクレイピングとかリスクでしか無いので止めたほうが良い。 方法を回答しちゃう人はリスク管理できてない人なんで参考にならんし、リスクを理解している人は、初心者にスクレイピングはすすめないです。
grilled_python

2019/02/12 04:31

回答ありがとうございます。 私見ですが、きちんとスリープを入れれば止められる事はありませんでした。 なんどかIPアドレスから禁止されて一日程度止められましたが、それも含めてよい経験になったと思いました。自宅だからいいですが、会社だったらやばいですけど。 初心者にとって良くないことも(この場合はIPを止められる) おすすめはされないけど、上級者の方からアドバイスとして受けられる場所として議論が活発になってくれればと思います。
退会済みユーザー

退会済みユーザー

2019/02/12 04:42

> 方法を回答しちゃう人はリスク管理できてない人なんで参考にならんし、リスクを理解している人は、初心者にスクレイピングはすすめないです。 っていうのを実践しないでください^^; 一般的なプロバイダ契約の解除条件に合致していること認識してます?
grilled_python

2019/02/12 04:44

>>一般的なプロバイダ契約の解除条件に合致 こちらを教えて頂けますでしょうか?
tiitoi

2019/02/12 04:45

スクレイピング技術についてこのサイトで議論するのはいいと思うのですが、「スクレイピングに関して利用規約で制限されているサイト」を対象としたやり方の議論するべきでないかと。 特に Google は以下のような API を提供しているので、情報を取得するために直接アクセスしてスクレイピングする必要はありませんし。 https://developers.google.com/custom-search/v1/overview
退会済みユーザー

退会済みユーザー

2019/02/12 04:46

> こちらを教えて頂けますでしょうか? 調べようよ^^; 議論にもならん。。。
grilled_python

2019/02/12 04:50

すいません 煽ったりしているわけではないのです。 ただスクレイピングなどをした場合プロバイダ契約を解除される可能性があるという事を知らなかったのです。具体的にはどのような所で解除されてしまうのでしょうか?
退会済みユーザー

退会済みユーザー

2019/02/12 04:56

> すいません 煽ったりしているわけではないのです。 回答しといて煽ってないとか^^; 放置します。自身で決着してください。
grilled_python

2019/02/12 05:07

>>回答しといて煽ってないとか^^; te2ji様の投稿1分前に投稿しているので入れ違いです。 勉強不足でした。不快な思いをさせてしまって申し訳ないです。
guest

0

利用規約に違反する可能性がるので記述を削除いたします。

投稿2019/02/12 04:25

編集2019/02/12 05:06
grilled_python

総合スコア237

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問