mrwwww 2017-05-06 06:24 采纳率: 0%
浏览 7060

请问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条回答 默认 最新

  • Double_Click007 2017-05-26 13:34
    关注

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

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

报告相同问题?

悬赏问题

  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划