Pythonによるクローラー&スクレイピング入門 Scrapyのサンプルでエラー
Pythonによるクローラー&スクレイピング入門をはじめて
Scrapyの箇所まできました。(Capter6-5)
「Pythonによるクローラー&スクレイピング入門」
サンプルどおり進めていたのですが
最初でつまづく。。
リスト6-14:my_project/my_project/spiders/quotes.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
"""http://quotes.toscrape.com/ クローラー. トップページのみをクロールして、Quoteを収集する. """ import scrapy from scrapy.spiders import CrawlSpider from my_project.items import Quote class QuotesSpider(CrawlSpider): """Quoteアイテムを収集する.""" name = 'quotes' allowed_domains = ['quotes.toscrape.com'] start_urls = ['http://quotes.toscrape.com/'] def parse(self, response): """クロールしたページからItemをスクレイピングする.""" for quote_html in response.css('div.quote'): item = Quote() item['author'] = quote_html.css('small.author::text').extract_first() item['text'] = quote_html.css('span.text::text').extract_first() item['tags'] = quote_html.css('div.tags a.tag::text').extract() yield item |
これを実行すると
items.append(item)
NameError: name ‘items’ is not defined
と、エラーが…
items が定義されてないよねってことなんだろうけど。。
色々調べてみて、↓の記事を参考にさせて頂きました。
2018/8/4【42日目】 Scrapyで取得したデータをMySQLに保存する
修正した箇所は、
items = []
を下記のように追加。
def parse(self, response):
items = []
for quote_html in response.css(‘div.quote’):
これで
‘item_scraped_count’: 10,
となり、スクレイピングができました。
色々調べたけど、このようなエラーが出ている情報は出てこなかったです。。
自分だけ?
皆さんサンプル通りで動いているのかな。
ちなみに、先に進むと「リスト6-22」では「item = []」が入ってますね。。