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

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

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

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

CSV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

2896閲覧

python Nonetypeエラー

shiawase_get

総合スコア4

スクレイピング

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

CSV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

1クリップ

投稿2020/04/20 16:56

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
エクセルに入っているデータ(コンビニ商品の情報)の中からsizzle.txtの中にあるワードが商品名に使われていたら別のエクセルファイルに保存するプログラムを作成しています。

発生している問題・エラーメッセージ

エラーメッセージ

Traceback (most recent call last):
File "/Users/mk/卒研関係/sizzleitem_scraping.py", line 51, in <module>
if i[0].find(sizzle)>=0:
AttributeError: 'NoneType' object has no attribute 'find'

該当のソースコード

ソースコード

import openpyxl as px
import re
import datetime

fp=open('sizzle.txt','r',encoding='utf-8')
list=[s.strip() for s in fp.readlines()]
fp.close()

id_list = []
itemname=[]
itemsizzle=[]
itemstar=[]
itemvotes=[]
itemrating=[]
itemdate=[]
itemcategory=[]
itemurl=[]

wb = px.load_workbook("コンビニ新商品.xlsx")

num=1

ws = wb["Sheet"+str(num)]

for row in ws.iter_rows(min_row=2):
item_name=row[0].value
item_star=row[1].value
item_votes=row[2].value
item_rating=row[3].value
item_date=row[4].value
item_category=row[5].value
item_url=row[6].value
id_list.append([item_name,item_star,item_votes,item_rating,item_date,item_category,item_url])

for sizzle in list:
for i in id_list:
if i[0].find(sizzle)>=0:
itemname.append(i[0])
itemsizzle.append(sizzle)
itemstar.append(i[1])
itemvotes.append(i[2])
itemrating.append(i[3])
itemdate.append(i[4])
itemcategory.append(i[5])
itemurl.append(i[6])

from collections import Counter
c=Counter(itemsizzle)

for k,v in c.most_common():
print(str(k)+":"+str(v))

wb = px.load_workbook("コンビニ商品あり.xlsx")

ws = wb.active
ws=wb["Sheet"+str(num)]

for r2 in range(1000000):
if ws.cell(row=r2+2,column=1).value==None:
maxRow=r2+1
break

for r3 in range(len(itemname)):
ws.cell(row=maxRow+1+r3,column=1).value=itemname[r3]
ws.cell(row=maxRow+1+r3,column=2).value=itemsizzle[r3]
ws.cell(row=maxRow+1+r3,column=3).value=itemstar[r3]
ws.cell(row=maxRow+1+r3,column=4).value=itemvotes[r3]
ws.cell(row=maxRow+1+r3,column=5).value=itemrating[r3]
ws.cell(row=maxRow+1+r3,column=6).value=itemdate[r3]
ws.cell(row=maxRow+1+r3,column=7).value=itemcategory[r3]
ws.cell(row=maxRow+1+r3,column=8).value=itemurl[r3]

wb.save('コンビニ商品あり.xlsx')

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

DrqYuto👍を押しています

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

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

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

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

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

guest

回答2

0

if i[0].find(sizzle)>=0:でやりたいことが、i[0](文字列?)の中にsizzle(文字列?)が含まれていることを判定したいのだとしたら、
if sizzle in i[0]:
で良いと思います。(もっと複雑なら正規表現で)

あと、質問中でコードを書くときは<code>を使って"""にはさまれた中に書くと読みやすくて、回答が集まりやすいですよ。

投稿2020/04/20 23:28

jeanbiego

総合スコア3966

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

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

shiawase_get

2020/04/21 12:46

回答いただきありがとうございます・・・!書き換えたところ、 argument of type 'NoneType' is not iterable というエラーに変わりました。調べたのですがエラーの意味があまりよくわからず・・・もしもう少し教えていただけるのであればお願いしたいです。 また、質問の形式へのアドバイスもありがとうございます。初めてで勝手が分からずこのような形になってしまいました・・・。次からはご指摘いただいた通りに質問させていただきます。感謝です。
jeanbiego

2020/04/21 23:15

id_listから取り出したiは[item_name,item_star,item_votes,item_rating,item_date,item_category,item_url]という構造で、i[0]、つまりitem_nameは文字列を意図しているのだと思いましたが、正しくそうなっていますか。nasudengさんの書かれたとおり、iやi[0]の中身を確認してみたほうが良さそうです。
guest

0

NoneTypeオブジェクトであるからfindメソッドが使えない、反復可能でないというエラーメッセージがでています。
i[0]がlistやstrであるような書き方がされているのに、実際はNoneが入っている為エラーが出ています。
エラーが発生する数行前で、該当の変数には意図した通りの値は入っていますか?

投稿2020/04/21 13:22

nasudeng

総合スコア89

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問