前提・実現したいこと
現在、検索順位を自動検索しcsvに保存するシステムを実装しています。
データの抽出までは行えたのですが、出力ファイル(csv)
に書き込む際に必ず2行目がずれて表示されてしまいます。
この原因がわかるかたがいらしたら、解決方法を教えていただきたです。
メインのソースコード
import csv import datetime from selenium import webdriver from selenium.webdriver.chrome.options import Options from time import sleep from selenium.webdriver.chrome.webdriver import WebDriver options = Options() driver = webdriver.Chrome('/Users/hamadahikaru/PythonScraping/chromedriver/chromedriver', options=options) def go_serch(serch_word): """検索ワードを引数として検索をかける serch_word: 検索ワードを指定 """ driver.get('https://www.google.co.jp') serch_bar = driver.find_element_by_name('q') serch_bar.send_keys(serch_word) serch_bar.submit() def create_csv_file(): """実行した年、月、日のcsvファイルの名前とし、 ヘッダーまで記録したcsvファイルを作成 """ csv_date = datetime.datetime.today().strftime('%Y%m%d') csv_file_name = 'Google_SEO' + csv_date + '.csv' return csv_file_name def loop_and_write_csv(get_title, serch_word): """検索ワードに合致するタイトルにヒットするまでクローリングする 検索ワードに引っかかった場合のみcsvに記録 get_title: 正解のタイトル """ with open('SEO_scraping/' + create_csv_file(), 'a', encoding='cp932', errors='ignore') as csv_file: writer = csv.writer(csv_file) item = 1 while True: sleep(1) flg = False csv_lists = [] for elem_h3 in driver.find_elements_by_class_name('LC20lb'): if elem_h3.text == get_title: csv_list = [] elem_a = elem_h3.find_element_by_xpath('..') csv_list.append(str(item)) csv_list.append(serch_word) csv_list.append(elem_h3.text) csv_list.append(elem_a.get_attribute('href')) csv_lists.append(csv_list) print(csv_lists) flg = True break else: item += 1 pass if flg is True: break else: next_link = driver.find_element_by_id('pnnext') driver.get(next_link.get_attribute('href')) def loop_serch(): """ 実行プログラム """ with open('SEO_scraping/' + create_csv_file(), 'w', encoding='cp932', errors='ignore') as csv_file: writer = csv.writer(csv_file) csv_head = ['検索順位','検索ワード','タイトル','URL'] writer.writerow(csv_head) with open('serch_SEO.csv', 'r', encoding='utf-8', errors='ignore') as read_csv: reader = csv.DictReader(read_csv) for row in reader: serch_word = row['Serch_word'] get_title = row['Ans_title'] go_serch(serch_word) loop_and_write_csv(get_title, serch_word) loop_serch() driver.close()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。