通过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. JMeter做http接口功能测试

    1. 普通的以key-value传参的get请求 e.g. 获取用户信息 添加http请求:填写服务器域名或IP:方法选GET:填写路径:添加参数:运行并查看结果. 2. 以Json串传参的post请 ...

  2. DataSnap Server 客户端调用 异常

    No peer with the interface with guid {9BB0BE5C-9D9E-485E-803D-999645CE1B8F} has been registered.

  3. 电脑组装DIY

    技嘉主板:B150M-D3H 网卡驱动: CPU: 风扇: 机箱: 显示器:

  4. Vmware 不使用物理内存运行缓慢的处理方法

    VMware虚拟机直接使用物理内存的方法 1:打开虚拟机操作系统文件夹,找到.vmx后缀的文件 2:以记事本方式打开文件,在最后一行添加mainMem.useNamedFile=FALSE. 3:保存 ...

  5. Git 全局配置查看修改

    查看 git config --list git config --global --list 新增 git config --global user.emal=123 删除 git config - ...

  6. for循环实例2

    九九乘法表: //九九乘法表 ; x < ; x++) { ; y <=x;y++ ) { Console.Write(y.ToString()+"*"+x.ToStr ...

  7. 07_组件三大属性(1)_state

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. ElasticSearch centos7 安装

    参考: https://blog.csdn.net/u014180504/article/details/78733827 https://blog.csdn.net/youzhouliu/artic ...

  9. RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介(转载)

    RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介 今天这篇博文是我翻译的RabbitMQ的最后一篇文章了,介绍一下RabbitMQ的C#开发的接口.好了,言归正传吧. N ...

  10. LeetCode OJ 89. Gray Code

    题目 The gray code is a binary numeral system where two successive values differ in only one bit. Give ...