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

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

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

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

Python

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

Scrapy

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

Q&A

0回答

1362閲覧

Scrapy - CrawlSpiderで動的にURLを指定する

wayway

総合スコア11

スクレイピング

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

Python

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

Scrapy

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

0グッド

0クリップ

投稿2021/02/16 09:21

前提・実現したいこと

Scrapyでスクレイピングを行っています。
"県" "カテゴリ"を入れ替えながら、動的にURLを指定しようとした際に、エラーが起きてしまいました。

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

Traceback (most recent call last): File "/home/ec2-user/venv/lib64/python3.7/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks result = g.send(result) File "/home/ec2-user/venv/lib64/python3.7/site-packages/scrapy/crawler.py", line 88, in crawl start_requests = iter(self.spider.start_requests()) TypeError: 'NoneType' object is not iterable

該当のソースコード

python

1class StorelistSpider(CrawlSpider): 2 name = "crawler" 3 4 # #パッチ間で永続的な状態を維持 5 # self.logger.info(self.state.get("state_key1")) 6 # self.state["state_key1"] = {"key":"value"} 7 # self.state["state_key2"] = 0 8 9 allowed_domains = ["example.com"] 10 11 def start_requests(self): 12 #Target Category 13 with open('CategoryList.txt') as f1: 14 for q1 in f1: 15 targetCategory = q1 16 17 #Target Prefecture 18 with open('prefectureList.txt') as f2: 19 for q2 in f2: 20 prefectureName = q2 21 22 23 start_urls=("https://example.com/" + q2 + "/") 24 25 #rules to follow links: 26 rules = ( 27 #follow area link first, then category link next, check list pages and go to the details 28 Rule(LinkExtractor( 29 allow=r"/\w+/A\d{4}/$", 30 restrict_xpaths = "//*[@id='js-leftnavi-area-scroll']", 31 unique = True,)), 32 Rule(LinkExtractor( 33 allow=r"/\w+/A\d{4}/rstLst/" + "{}".format(targetCategory) + r"/$", 34 restrict_xpaths = "//*[@id='js-leftnavi-genre-balloon']", 35 unique = True,)), 36 Rule(LinkExtractor( 37 allow=r"/\w+/A\d{4}/rstLst/" + "{}".format(targetCategory) + r"/\d*/$", 38 restrict_xpaths = "//*[@id='container']/div[15]/div[4]/div/div[7]/div/ul", 39 unique = True,)), 40 Rule(LinkExtractor( 41 allow=r"/\w+/A\d{4}/A\d{6}/\d+/$", 42 restrict_xpaths = "//*[@id='container']/div[15]/div[4]/div/div[6]", 43 unique = True, 44 ), callback="page_parse"), 45 ) 46 47 def page_parse(self, response): 48 yield Page.from_response(response) 49 50

試したこと

公式サイトなども見たのですが、
https://doc.scrapy.org/en/latest/topics/spiders.html#scrapy.spiders.Spider.start_requests

CrawlSpiderで、start_requestsを使用しているサンプルなどが発見できず、詰まってしまった次第です。

質問

エラー回避の方法、方針ご教示いただけると大変幸いです。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問