現在の以下のコードでスクレイピングをしています
たくさんのワードを入れ替えて検索結果の収集をしたく
現在はすべて手作業で一つずつコピペでワードの入れ替えをしているため、その工数を効率化するコードを頂きたいという依頼です
以下コード「keyword_sets =」の内容をいろいろなワードに入れ替えたいです
自分でしらべて試行錯誤した結果、検索したいワードを書いたCSVを読み込ませる方法が良いかと考えましたが、動くコードがかけずご教示頂ければ・・
[python3]
from time import sleep
import csv
import requests as web
from urllib.parse import urlparse
from bs4 import BeautifulSoup
keyword_sets = [['リフォーム','ガラス','山口'],
['リフォーム','ガラス','愛媛'],
['リフォーム','ガラス','長崎'],
['リフォーム','ガラス','奈良'],
['リフォーム','ガラス','鹿児島'],
['リフォーム','ガラス','青森'],
['リフォーム','ガラス','岩手'],
['リフォーム','ガラス','大分'],
['リフォーム','ガラス','石川'],
['リフォーム','ガラス','山形'],
def google(keywords):
url = '
https://www.google.co.jp/search?num=100&q='; + ' '.join(keywords)
print('googling... ', url)
# URL から HTML を取得する。
resp = web.get(url)
# HTML から BeautifulSoup オブジェクトを作成する。
soup = BeautifulSoup(resp.text, "html.parser")
results = []
# URL、タイトル、説明を取得する。
# <div class="g"> のタグ一覧を取得する。
for div_elems in soup.select('div.g'):
# class="r" のタグ配下の a タグを取得する。
a_elem = div_elems.select('.r > a')
# class="s" のタグ配下の class="st" のタグを取得する。
div_elem = div_elems.select('.s > .st')
# 両方存在しない場合があったので、その場合はスキップする。
if not a_elem or not div_elem:
continue
# select() は選択された要素が1つでもリストで返すので、1個目の要素を取り出す。
a_elem, div_elem = a_elem[0], div_elem[0]
# a_elem タグの href 属性を取得し、'/url?q=' を削除する。
url = a_elem.get('href').replace('/url?q=', '')
# ドメイン部分までを取得する。
url_prefix = '{0.scheme}://{0.netloc}/'.format(urlparse(url))
# a タグのテキストを取得する。
title = a_elem.text
# 説明文を取得する。改行コードは削除する。
description = div_elem.text.replace('\n','').replace('\r','')
# ドメイン部分までの URL、タイトル、説明をリストに追加する。
results.append([url_prefix, title, description])
return results
results = []
# キーワード分検索を実行する。
for keywords in keyword_sets:
results.extend(google(keywords))
print(results)
# CSV に書き込む。
with open('リフォーム_屋根葺き(山口-鳥取)_list_190212.csv', 'w', encoding='utf8') as f:
writer = csv.writer(f)
writer.writerow(['タイトル・説明','URL']) # ヘッダーを書き込む。
writer.writerows(results) # データを書き込む。