通过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. Mybatis八( mybatis工作原理分析)

    MyBatis的主要成员 Configuration        MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中 SqlSession ...

  2. Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系

    转自:http://blog.csdn.net/lmj623565791/article/details/38377229 ,本文出自[张鸿洋的博客] 很多人面试肯定都被问到过,请问Android中的 ...

  3. shell doc

    参考: http://c.biancheng.net/view/1114.html

  4. Asp.Net前台调用后台变量

    1.Asp.Net中几种相似的标记符号: < %=...%>< %#... %>< % %>< %@ %>解释及用法 答: < %#... %&g ...

  5. nginx 虚拟主机、反向代理服务器及负载均衡,多台主机分离php-fpm实验

    一.简介 本章介绍一些架构原理基础知识, 1.1.LNMP及php-fpm 请参考https://www.cnblogs.com/zhangxingeng/p/10242902.html 1.2.透明 ...

  6. python 如何获取当前文件/文件夹

    python 如何获取当前文件/文件夹? 1.获取当前文件的实际路劲: os.path.realpath(__file__)          ==> D:\python_test\test_p ...

  7. delphi java 日期 转换 获取Unix时间戳

    获取Unix时间戳 http://www.cnblogs.com/findumars/p/4716753.html 最简单准确一句话 Result:=IntToStr(  DateTimeToUnix ...

  8. OC copy mutableCopy, 浅拷贝,深拷贝

    copy与mutableCopy都是深拷贝,区别是mutableCopy拷贝出的对象是可变的. OC对象基本都是通过指针访问,所以一般情况下,通过对指针的赋值都是浅拷贝,即只是拷贝了一份对象的指针,对 ...

  9. Erlang 笔记

    集成开发环境:IntelliJ IDEA的Erlang插件 教程:www.erlang-cn.com/462.html,寻找erlang程序设计第2版pdf f():释放之前绑定过的所有变量. -ex ...

  10. zabbix server配置文件参数详解

    AlertScriptsPath默认值:/usr/local/share/zabbix/alertscripts说明:告警脚本目录 AllowRoot默认值:0 说明:是否允许使用root启动,0:不 ...