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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

1回答

254閲覧

CVSファイルが出力されない

kmll

総合スコア19

Python 3.x

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

0グッド

0クリップ

投稿2019/09/30 08:23

コード import sys import pyperclip import requests import bs4 import csv import datetime #置換用 def replace_n(str_data): return str_data.replace('\n', '').replace('\r', '') #コンカチ用 def concat_list(list_data): str_data = '' for j in range(len(list_data)): str_data = str_data + replace_n(list_data[j].getText()) + ' / ' return str_data #出力データ output_data = [] output_data.append(['検索順位', 'サイトURL', 'TITLEタグ', 'H1タグ', 'H2タグ', 'H3タグ', '記事文字数']) #キーワードの受け取り(引数から。なければクリップボードから) if len(sys.argv) > 1: search_url_keyword = '犬の飼い方'.join(sys.argv[1:]) else: search_url_keyword = pyperclip.paste() #検索順位取得処理 if search_url_keyword and search_url_keyword.strip(): #Google検索の実施 search_url = 'https://www.google.co.jp/search?hl=ja&num=50&q=' + search_url_keyword res_google = requests.get(search_url) res_google.raise_for_status() #BeautifulSoupで掲載サイトのURLを取得 bs4_google = bs4.BeautifulSoup(res_google.text, 'html.parser') link_google = bs4_google.select('div > h3.r > a') for i in range(len(link_google)): #変な文字が入るので除く site_url = link_google[i].get('href').split('&sa=U&')[0].replace('/url?q=', '') if 'https://' in site_url or 'http://' in site_url: #サイトの内容を解析 try: res_site = requests.get(site_url) res_site.encoding = res_site.apparent_encoding except: continue bs4_site = bs4.BeautifulSoup(res_site.text, 'html.parser') #データを初期化 title_site = '' h1_site = '' h2_site = '' h3_site = '' mojisu_site = 0 #データを取得 if bs4_site.select('title'): title_site = replace_n(bs4_site.select('title')[0].getText()) if bs4_site.select('h1'): h1_site = concat_list(bs4_site.select('h1')) if bs4_site.select('h2'): h2_site = concat_list(bs4_site.select('h2')) if bs4_site.select('h3'): h3_site = concat_list(bs4_site.select('h3')) if bs4_site.select('body'): mojisu_site = len(bs4_site.select('body')[0].getText()) #データをリストに入れておく output_data_new = i+1, site_url, title_site, h1_site, h2_site, h3_site, mojisu_site output_data.append(output_data_new) #CSVファイルに出力する now = datetime.datetime.now() csv_file = open('[' + search_url_keyword + ']' + '{0:%Y%m%d%H%M%S}'.format(now) + '.csv', 'w', encoding='UTF-8') csv_writer = csv.writer(csv_file, lineterminator='\n') for j in range(len(output_data)): csv_writer.writerow(output_data[j]) csv_file.close print("done")

実行してもCSVが出力されません。
原因を教えてください。

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

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

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

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

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

meg_

2019/09/30 09:03

OSは何でしょうか? エラーは出ていないのですね?
kmll

2019/09/30 09:10

windows1oになります。 エラーは出ていません
meg_

2019/09/30 09:26

CSVファイル自体が作成されないのでしょうか? それとも0バイトのファイルが作成されるのでしょうか?
kmll

2019/09/30 09:33

インデントなどの修正をしていたところ、次のようなエラーが発生しました。 csv_file = open('[' + search_url_keyword + ']' + '{0:%Y%m%d%H%M%S}'.format(now) + '.csv', 'w', encoding='UTF-8') FileNotFoundError: [Errno 2] No such file or directory: "[try:\r\n res_site = requests.get(site_url)\r\n res_site.encoding = res_site.apparent_encoding\r\n except:\r\n continue\r\n bs4_site = bs4.BeautifulSoup(res_site.text, 'html.parser')]20190930192215.csv"
kmll

2019/09/30 10:22

ヘッダーしかCSVに入っていませんでした。 原因は何でしょうか?
guest

回答1

0

ベストアンサー

python

1 try: 2 res_site = requests.get(site_url) 3 res_site.encoding = res_site.apparent_encoding 4 except: 5 continue 6 bs4_site = bs4.BeautifulSoup(res_site.text, 'html.parser')

continueのインデントがずれているのでそろえる

CSVには保存されるけどデータがないのでヘッダーのみ保存されてるみたいだけど

投稿2019/09/30 09:01

barobaro

総合スコア1286

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

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

kmll

2019/09/30 09:25

インデントを整理したところ次のようなエラーが発生しました。 csv_file = open('[' + search_url_keyword + ']' + '{0:%Y%m%d%H%M%S}'.format(now) + '.csv', 'w', encoding='UTF-8') FileNotFoundError: [Errno 2] No such file or directory: "[try:\r\n res_site = requests.get(site_url)\r\n res_site.encoding = res_site.apparent_encoding\r\n except:\r\n continue\r\n bs4_site = bs4.BeautifulSoup(res_site.text, 'html.parser')]20190930192215.csv"
kmll

2019/09/30 10:55

おっしゃる通り、ヘッダーしかCSVに入っていませんでした。 原因は何でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問