Scrapy学习中解决No module named tutorial,items问题

Scrapy学习中解决No module named tutorial.items问题


DATE: 2018-01-25 15:36:44

初学Scrapy,开始以为是官网教程很坑爹的有错,仔细排查后发现还是自己太粗心。
(版本问题:2018-1-25,python 2.7.11)
报错:No module named tutorial.items

解决问题注意两点:

  1. 引入items的路径。items包实际是在上一级目录的,直接对着教程操作容易忽略这个问题
  2. tutorial.items 这个导入包,不知为何不识别,只能以..items 的方式导入。
  3. 重点:items文件中需要添加代码,这个我在看手册时忽略了。添加内容如下:
import scrapy


class DmozItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    link = scrapy.Field()
    desc = scrapy.Field()
    pass

正确导入,解决问题。

# 这样不行:from ..tutorial.items import *

# 正确引入代码如下:
from ..items import *

在scrapy目录下执行命令:
\turorial\spiders>scrapy crawl dmoz -o items.json
测试发现返回200OK
这里写图片描述
再看下items.json 的文件内容:
这里写图片描述

结果满足预期。

附:代码全文

import scrapy
from ..items import DmozItem

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["yixzm.cn"]
    start_urls = [
            "http://www.yixzm.cn"
    ]

    def parse(self, response):
        for sel in response.xpath('//ul/li'):
            item = DmozItem()
            item['title'] = sel.xpath('a/text()').extract()
            item['link'] = sel.xpath('a/@href').extract()
            item['desc'] = sel.xpath('text()').extract()
            yield item
版权声明

弈心博客


本文首发site_name,转载请附上博文链接!