通过cmd 运行命令scrapy crawl 【爬虫名称】可以正常运行,并把数据保存到json文件和下载爬取的图片

但是在项目的spiders目录下的 firstTestSpider.py文件里添加:

 if __name__=='__main__':
#启动爬虫方法一
process=CrawlerProcess({
'USER_AGENT':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
})
process.crawl(FirstTestSpider)
# 如果有多个Spider,可以写多几个
#process.crawl(SecondTestSpider)
process.start() #启动爬虫方法二
configure_logging()
runner=CrawlerProcess()
runner.crawl(FirstTestSpider)
# 如果有多个Spider,可以写多几个
#runner.crawl(name)
d=runner.join()
d.addBoth(lambda _:reactor.stop())
reactor.run() #启动爬虫方法三
configure_logging()
runner=CrawlerRunner()
@defer.inlineCallbacks
def crawl():
yield runner.crawl(FirstTestSpider)
# 如果有多个Spider,可以写多几个
#yield runner.crawl(SecondTestSpider)
reactor.stop()
crawl()
reactor.run() 以上三种方式虽然运行后正常结束,不过没有保存json文件,也没有下载图片。(应该是没有跑进pipeline) 所以后来上网搜索之后转用另一种方式,直接在项目下新建run.py文件:#coding=utf-8
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings from spiders.firstTestSpider import FirstTestSpider settings=get_project_settings()
process=CrawlerProcess({
'USER_AGENT':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
})
process.settings=settings
process.crawl(FirstTestSpider)
process.start() 这里使用的的是前面的第一种启动方式
运行后,可以正常下载爬取的图片,在UseScrapyProject目录下(即run.py同级目录下可以生成paper.json) 然后通过对比run.py和spider.py中if __name__=='__main__'的启动方法一的代码,
发现其实这里漏了一步process.settings=settings所以其实是因为没有获取到settings里的设置,因而没有保存数据。(所以前面猜测是对的,确实没有跑进pipeline模块)
所以把前面代码中添加:
from scrapy.utils.project import get_project_settings
if __name__=='__main__':
settings = get_project_settings()#获取设置
   #启动爬虫方法一
process=CrawlerProcess({
'USER_AGENT':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
})
process.settings = settings #赋值
process.crawl(FirstTestSpider)
# 如果有多个Spider,可以写多几个
#process.crawl(SecondTestSpider)
process.start()
就可以成功保存数据,json文件放在firstTestSpider.py同级目录下。图片也能正常下载

同理方法二改为:
from scrapy.utils.project import get_project_settings
  settings = get_project_settings()
    #启动爬虫方法二
configure_logging()
runner=CrawlerProcess(settings=settings)
    runner.crawl(FirstTestSpider)
# 如果有多个Spider,可以写多几个
#runner.crawl(name)
d=runner.join()
d.addBoth(lambda _:reactor.stop())
reactor.run()
方法三改为:
from scrapy.utils.project import get_project_settings
  
  settings = get_project_settings()
  #启动爬虫方法三
  configure_logging()
  runner=CrawlerRunner(settings=settings)
  @defer.inlineCallbacks
  def crawl():
  yield runner.crawl(FirstTestSpider)
  # 如果有多个Spider,可以写多几个
  #yield runner.crawl(SecondTestSpider)
  reactor.stop()
  crawl()
  reactor.run()

所以说,其实在spider中启动和新建run.py效果都是一样的,就是注意获取一下settings

以上方法都亲测可行,如有不足之处欢迎指正~

【Spider】使用命令行启动时,能正常抓取,但是在pycharm直接运行不能保存数据的更多相关文章

  1. Java 命令行启动时指定配置文件目录

    java -jar -Xbootclasspath/a:/home/tms/conf    /home/tms/bin/S17-tms.jar 先指定配置文件目录: 再指定jar包路径: 运行clas ...

  2. Appium命令行启动,提示找不到命令,本地没有appium.cmd文件

    安装appium时,直接从github上下载的appium-desktop-windows版本,安装后,从打开桌面端Server,能启动服务,appium-doctor也能正常运行. 但奇怪的地方来了 ...

  3. Apache Commons CLI官方文档翻译 —— 快速构建命令行启动模式

    昨天通过几个小程序以及Hangout源码学习了CLI的基本使用,今天就来尝试翻译一下CLI的官方使用手册. 下面将会通过几个部分简单的介绍CLI在应用中的使用场景. 昨天已经联系过几个基本的命令行参数 ...

  4. UWP: 通过命令行启动 UWP 应用

    最近在开发应用的过程中,我遇到了如标题所述的需求,其实主要是为了能够快捷启动应用,正像我们可以在"运行"对话框中可以输入一些可执行程序的名称后,就能够直接启动它:这样做,可以增加 ...

  5. mysql在windows下命令行启动与关闭服务

    一.命令行关闭与启动服务的命令: 二.运行cmd的命令行程序时,必须以管理员身份运行.否则会出现如下提示: 三.mysql5.7版本的服务名一般默认为mysql57,因此如果使用服务名mysql,那么 ...

  6. Appium客户端,命令行启动server

    目标:通过命令行启动Appium的server   1.通过命令行安装的Appium   直接命令行输入appium即可启动服务   2.安装的Appium客户端   可以查看客户端中打印的启动日志: ...

  7. Oracle安装完成后,如何用命令行启动和关闭数据库?

    Oracle安装完成后,如何用命令行启动和关闭数据库? 解答: 打开:STARTUP [FORCE] [RESTRICT] [PFILE= filename] [OPEN [RECOVER][ dat ...

  8. [七月挑选]Tomcat使用命令行启动之指定jdk版本

    title: Tomcat使用命令行启动之指定jdk版本 准备好环境,jdk和tomcat. 主要步骤 1.找到Tomcat/bin/catalina.bat文件. 2.在文件前端添加如下. set ...

  9. scrapy 源码解析 (一):启动流程源码分析(一)命令行启动

    前言 虽然爬虫的入门级编写并不难,但要让爬虫真正稳定可靠的运行起来,真不是一件容易的事.首先,要用到scrapy,就必须要读懂scrapy这个爬虫框架,如果连这个框架的执行逻辑都搞不懂,那么爬虫也很难 ...

随机推荐

  1. python操作浏览器及截图小结

    近期做网页自动化用到内容小结 1.打开浏览器1)打开默认配置的浏览器from selenium import webdriverdriver = webdriver.Firefox()"&q ...

  2. 3.div+css 的布局较 table 布局有什么优点

    改版的时候更方便,只需改css文件. 页面加载速度更快.结构化清晰.页面显示简介. 表现与结构相分离. 已于优化搜索引擎更友好,排名更容易靠前.

  3. Windows系统不同磁盘间的扩容教程

    1.windows系统不同磁盘的空间扩展: https://www.cnblogs.com/yunweis/p/8023098.html

  4. debug_toolbar工作原理

    #toolbar的中间件的响应处理函数,会调用到panel.generate_stats(request, response)def process_response(self, request, r ...

  5. Linux 远程登录配置

    如果使用FlashFxp的sftp无法登陆,提示SSH 错误: 协商认证模式失败,也同样这样操作 修改你的ssh配置文件 配置文件路径如:/etc/ssh/sshd_config PasswordAu ...

  6. 机器学习进阶-案例实战-停车场车位识别-keras预测是否停车站有车

    import numpy import os from keras import applications from keras.preprocessing.image import ImageDat ...

  7. Hbase数据读写流程

    From: https://blog.csdn.net/wuxintdrh/article/details/69056188 写操作: Client写入,存入Memstore,Memstore满则Fl ...

  8. Java学习路线(转)

    原文:http://www.hollischuang.com/archives/489 一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http ...

  9. python中函数基础

    函数 什么是函数? 函数分为内置函数和自定义函数 定义:在程序中具备某一功能的工具.在使用之前需准备该工具(函数的定义),遇到应用场景拿来就用(后引用). 为什么要用函数? 1.代码冗余 程序组织结构 ...

  10. hadoop搭建部署

    HDFS(Hadoop Distributed File System)和Mapreduce是hadoop的两大核心: HDFS(文件系统)实现分布式存储的底层支持 Mapreduce(编程模型)实现 ...