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

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

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

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

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

809閲覧

検索順位クローリングのデータをcsvに出力する際にヘッダーの次の行の表示がずれる件

hamahi1222

総合スコア0

スクレイピング

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

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2020/05/21 05:05

前提・実現したいこと

現在、検索順位を自動検索し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()

###検索ワード取得ファイル(serch_SEO.csv)の中身
イメージ説明
###出力ファイルの中身
イメージ説明

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

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

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

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

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

guest

回答1

0

自己解決

以下のように空のcsv_listsを関数の外で定義して、appendしていき、最後に出力という形にしたら解決しました。

csv_lists=[] def main(): """実行プログラム """ loop_serch() print(csv_lists) write_csv(csv_lists) driver.close() def loop_and_append_list(get_title, serch_word): """検索ワードに合致するタイトルにヒットするまでクローリングする 検索ワードに引っかかった場合のみcsvに記録 get_title: 正解のタイトル """ item = 1 while True: sleep(1) flg = False 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) 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'))

投稿2020/05/21 06:09

hamahi1222

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問