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

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

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

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

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python

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

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

Q&A

解決済

2回答

1185閲覧

Scrapyにてモジュールが存在しないというエラーが発生してしまう

penmon

総合スコア3

スクレイピング

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

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python

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

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

0グッド

0クリップ

投稿2021/06/05 09:11

背景

対象:Scrapy,MySQL
実現したいこと:Scrapyでスクレイピングを行ったデータをMySQlに格納したい
環境:Windouws/JupyterNotebook

参照
https://sugiaki1989.gitbook.io/scrapy-note/chapter07_mysql

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

python

1ModuleNotFoundError Traceback (most recent call last) 2<ipython-input-39-071624cbe252> in <module> 3 1 from scrapy import Spider 4 2 from scrapy.http import Request 5----> 3 from sample_books_mysql.items import BooksMysqlItem 6 7ModuleNotFoundError: No module named 'sample_books_mysql.items'

推測

参照サイトのコードをほぼそのまま貼り付けていっただけだが、
なぜか「sample_books_mysql.items」というモジュールは存在しないとのメッセージが表示される
確認したところ、「sample_books_mysql」というファイル内に「items.py」というドキュメントが存在していたため、
何が問題がわからない

該当のソースコード

python

1 2!pip install pymysql 3!pip3 install Scrapy 4 5! scrapy startproject sample_books_mysql 6! cd sample_books_mysql 7! scrapy genspider books_spider_mysql books.toscrape.com 8 9import scrapy 10class BooksMysqlItem(scrapy.Item): 11 title = scrapy.Field() 12 price = scrapy.Field() 13 detail_page_url = scrapy.Field() 14 15from scrapy import Spider 16from scrapy.http import Request 17from sample_books_mysql.items import BooksMysqlItem

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

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

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

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

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

ppaul

2021/06/05 09:38

「sample_books_mysql」というファイル内に「items.py」というドキュメントが存在していた というのは、 「sample_books_mysql」というフォルダ内に「items.py」というファイルが存在していた という意味であっていますか。 もしそうなら、「sample_books_mysql」というフォルダはどこにありますか。
penmon

2021/06/05 10:55

C:\Users\moonb\sample_books_mysql\sample_books_mysql\items.py 上記のようなパスになっております。
jbpb0

2021/06/06 00:23

> 「sample_books_mysql.items」というモジュールは存在しないとのメッセージが表示 を、全部省略せずに質問に追記してください おそらく「Traceback...」があると思うので、そこから全部 (ユーザー名とかの個人情報は、もちろん伏せ字にしていいです) ここに書かないで、質問を編集して追記してください
guest

回答2

0

ベストアンサー

Jupyterで「!cd ...」は効果なく、その行を実行しても次の行の「! scrapy genspider...」の実行には反映されません

参考
Jupyter Notebookでシステムコマンドを実行し文字列のリストとして取得
の「!をつけてシステムコマンドを実行」の「!cdコマンドの注意点」の「カレントディレクトリを変更(移動)するシステムコマンド...」のところ

下記のように変えてみてください

python

1! cd sample_books_mysql

↓ 変更

python

1import os 2os.chdir('sample_books_mysql’)

そうしたら、当方では
No module named ‘sample_books_mysql.items'
は出なくなりました
(ppaulさんの回答の対策は、どちらも行ってません)

 .
ただし、当方で試したところ、別のエラー
cannot import name 'BooksMysqlItem' from ‘sample_books_mysql.items'
が出ました

「items.py」の内容を確認したら、確かに「BooksMysqlItem」はありませんでした
「SampleBooksMysqlItem」というのはありましたけど

【追記】 第7章 ScrapyとMySQL
を見ると、そこは自分でコード書く部分ですね
私はそれやってないので、エラー出て当然です

【追記2】 質問のコード中で「BooksMysqlItem」が定義されてますが、そこじゃなくて「items.py」内で定義しないとエラー出ます
下記で、「items.py」から「BooksMysqlItem」をimportしようとするからです

python

1from sample_books_mysql.items import BooksMysqlItem

投稿2021/06/07 05:37

編集2021/06/07 11:09
jbpb0

総合スコア7651

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

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

0

C:\Users\moonb\sample_books_mysql\sample_books_mysql\items.py

を読み込みたいとのことですと、以下のいずれかを試してみてください。

修正案1

python

1from scrapy import Spider 2from scrapy.http import Request 3import os 4#os.chdir('C:\Users\moonb\sample_books_mysql') 間違っていました 5os.chdir('C:\Users\moonb') 6from sample_books_mysql.items import BooksMysqlItem

修正案2

python

1from scrapy import Spider 2from scrapy.http import Request 3import sys 4#sys.path.append('C:\Users\moonb\sample_books_mysql') 間違っていました 5sys.path.append('C:\Users\moonb') 6from sample_books_mysql.items import BooksMysqlItem

投稿2021/06/05 11:33

編集2021/06/06 05:31
ppaul

総合スコア24666

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

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

penmon

2021/06/05 13:53

ご回答頂きありがとうございました。 しなしながら、どちらの場合でも同様のエラー(ModuleNotFoundError)が発生いたします。 この場合、どのような原因が考えられるのでしょうか?
ppaul

2021/06/06 05:32

'C:\Users\moonb\sample_books_mysql'は間違いでした。 'C:\Users\moonb'に修正して試してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問