##前提・実現したいこと
環境(すべてインストール済み)
windows10
Python3.7.2
beatifulsoup4
pandas
Googleで任意のキーワードでの検索結果上位サイト30件の,title,urlをスクレイピングで取得したい。
また、その際にcsvのキーワードリストを変数に代入して、繰り返し処理しリスト全ての結果を取得したい。
【OUTPUTイメージ(CSVファイル)】
世田谷区のラーメン,世田谷区ラーメンランキングサイト,URL #上位30サイト分 新宿区のラーメン,新宿区ラーメンランキングサイト,URL #上位30サイト分 渋谷区のラーメン,渋谷区ラーメンランキングサイト,URL #上位30サイト分
##発生している問題・エラーメッセージ
現状では任意でソースコードに直接記述したキーワードのみ取得できるが、CSVからキーワードリストを取り込んで処理することが出来ていない。CSVに記述した文字列ごとに上位30件のkw,titlte,urlを取得したい。
##該当のソースコード
import requests as web import bs4 import csv # キーワードを使って検索する list_keywd = ['世田谷区のラーメン'] resp = web.get('https://www.google.co.jp/search?num=30&q=' + ' '.join(list_keywd)) resp.raise_for_status() # 取得したHTMLをパースする soup = bs4.BeautifulSoup(resp.text, "html.parser") # 検索結果のタイトルとリンクを取得 link_elem01 = soup.select('.r > a') # 検索結果の説明部分を取得 link_elem02 = soup.select('.s > .st') if(len(link_elem02) <= len(link_elem01)): leng = len(link_elem02) else: leng = len(link_elem01) # CSVファイルを書き込み用にオープンして整形して書き出す with open('setagayaramen_output.csv','w',newline='',encoding='utf8') as outcsv: csvwriter = csv.writer(outcsv) csvwriter.writerow(['タイトル','URL']) for i in range(leng): # リンクのみを取得し、余分な部分を削除する url_text = link_elem01[i].get('href').replace('/url?q=','') # タイトルのテキスト部分のみ取得 title_text = link_elem01[i].get_text() # 説明のテキスト部分のみを取得/余分な改行コードは削除する t01 = link_elem02[i].get_text() t02 = t01.replace('\n','') disc_text = t02.replace('\r','') csvwriter.writerow([list_keywd,title_text,url_text]) outcsv.close()
##取り込むCSVファイルの中身
ramenlist.csv
世田谷区のラーメン 新宿区のラーメン 渋谷区のラーメン
補足情報
あなたの回答
tips
プレビュー