请问no module named xxx.spiders报错怎么解决

我初学scrapy爬虫,在github上下载了一个工程用pycharm运行了一下是没有问题的,然后在cmd中通过scrapy crawl xiaohuar 的命令运行爬虫的时候出现了 no module named xiaohuar.spiders 的报错

代码如下:

#coding=utf-8
import scrapy
import re
import os
import urllib
from scrapy.selector import Selector
from scrapy.http import HtmlResponse, Request

class Xiaohuar_spider(scrapy.spiders.Spider):
name = "xiaohuar"

allowed_domains = ["xiaohuar.com"] # 搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页

start_urls = ["http://www.xiaohuar.com/list-1-1.html"]

该函数名不能改变,因为Scrapy源码中默认callback函数的函数名就是parse

def parse(self, response):
current_url = response.url # 爬取时请求的url
body = response.body # 返回的html
unicode_body = response.body_as_unicode() # 返回的html unicode

hxs = Selector(response) # 创建查询对象,HtmlXPathSelector已过时

if re.match('http://www.xiaohuar.com/list-1-\d+.html', response.url): # 如果url能够匹配到需要爬取的url,就爬取
items = hxs.xpath('//div[@class="item_list infinite_scroll"]/div') # 匹配到大的div下的所有小div(每个小div中包含一个图片)

for i in range(len(items)): # 遍历div个数
src = hxs.xpath(
'//div[@class="item_list infinite_scroll"]/div[%d]//div[@class="img"]/a/img/@src' % i).extract() # 查询所有img标签的src属性,即获取校花图片地址
name = hxs.xpath(
'//div[@class="item_list infinite_scroll"]/div[%d]//div[@class="img"]/span/text()' % i).extract() # 获取span的文本内容,即校花姓名
school = hxs.xpath(
'//div[@class="item_list infinite_scroll"]/div[%d]//div[@class="img"]/div[@class="btns"]/a/text()' % i).extract() # 校花学校

if src:
absoluteSrc = "http://www.xiaohuar.com" + src[
0] # 拼接实际路径,因为.extract()会返回一个list,但是我们是依次取得div,所以是取第0个
file_name = "%s_%s.jpg" % (school[0], name[0]) # 拼接文件名,学校_姓名
file_path = os.path.join("E:\file", file_name) # 拼接这个图片的路径下
urllib.urlretrieve(absoluteSrc, file_path) # 接收文件路径和需要保存的路径,会自动去文件路径下载并保存到我们指定的本地路径

all_urls = hxs.xpath('//a/@href').extract() # 提取界面所有的url
for url in all_urls: # 遍历获得的url,如果满足条件,继续爬取
if url.startswith('http://www.xiaohuar.com/list-1-'):
yield Request(url, callback=self.parse)

图片说明
整个工程的文件就是这样
请问各位大神这个问题出在哪里,怎么解决呢?

1个回答

这是因为调用的方法不在同一个目录下面,pycharm能够找到,但是在cmd上或者Linux系统上运行,就会出错;你可以在首行加入以下代码:

import sys
reload(sys)
sys.path.append("../")

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!