現在の以下のコードでスクレイピングをしています
たくさんのワードを入れ替えて検索結果の収集をしていて、現在はすべて手作業で一つずつコピペでワードの入れ替えをしているため、その工数を効率化したく伺います
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を読み込ませる方法が良いかと考えましたが、動くコードがかけず恐れ入りますがご教示頂きたく伺います
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/12 03:57
2019/02/12 04:19
退会済みユーザー
2019/02/12 04:26
2019/02/12 04:31
退会済みユーザー
2019/02/12 04:42
2019/02/12 04:44
2019/02/12 04:45
退会済みユーザー
2019/02/12 04:46
2019/02/12 04:50
退会済みユーザー
2019/02/12 04:56
2019/02/12 05:07