【Spider】使用命令行启动时,能正常抓取,但是在pycharm直接运行不能保存数据
通过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直接运行不能保存数据的更多相关文章
- Java 命令行启动时指定配置文件目录
java -jar -Xbootclasspath/a:/home/tms/conf /home/tms/bin/S17-tms.jar 先指定配置文件目录: 再指定jar包路径: 运行clas ...
- Appium命令行启动,提示找不到命令,本地没有appium.cmd文件
安装appium时,直接从github上下载的appium-desktop-windows版本,安装后,从打开桌面端Server,能启动服务,appium-doctor也能正常运行. 但奇怪的地方来了 ...
- Apache Commons CLI官方文档翻译 —— 快速构建命令行启动模式
昨天通过几个小程序以及Hangout源码学习了CLI的基本使用,今天就来尝试翻译一下CLI的官方使用手册. 下面将会通过几个部分简单的介绍CLI在应用中的使用场景. 昨天已经联系过几个基本的命令行参数 ...
- UWP: 通过命令行启动 UWP 应用
最近在开发应用的过程中,我遇到了如标题所述的需求,其实主要是为了能够快捷启动应用,正像我们可以在"运行"对话框中可以输入一些可执行程序的名称后,就能够直接启动它:这样做,可以增加 ...
- mysql在windows下命令行启动与关闭服务
一.命令行关闭与启动服务的命令: 二.运行cmd的命令行程序时,必须以管理员身份运行.否则会出现如下提示: 三.mysql5.7版本的服务名一般默认为mysql57,因此如果使用服务名mysql,那么 ...
- Appium客户端,命令行启动server
目标:通过命令行启动Appium的server 1.通过命令行安装的Appium 直接命令行输入appium即可启动服务 2.安装的Appium客户端 可以查看客户端中打印的启动日志: ...
- Oracle安装完成后,如何用命令行启动和关闭数据库?
Oracle安装完成后,如何用命令行启动和关闭数据库? 解答: 打开:STARTUP [FORCE] [RESTRICT] [PFILE= filename] [OPEN [RECOVER][ dat ...
- [七月挑选]Tomcat使用命令行启动之指定jdk版本
title: Tomcat使用命令行启动之指定jdk版本 准备好环境,jdk和tomcat. 主要步骤 1.找到Tomcat/bin/catalina.bat文件. 2.在文件前端添加如下. set ...
- scrapy 源码解析 (一):启动流程源码分析(一)命令行启动
前言 虽然爬虫的入门级编写并不难,但要让爬虫真正稳定可靠的运行起来,真不是一件容易的事.首先,要用到scrapy,就必须要读懂scrapy这个爬虫框架,如果连这个框架的执行逻辑都搞不懂,那么爬虫也很难 ...
随机推荐
- JAVA获取文件夹下所有的文件
package com.test; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; im ...
- 3.div+css 的布局较 table 布局有什么优点
改版的时候更方便,只需改css文件. 页面加载速度更快.结构化清晰.页面显示简介. 表现与结构相分离. 已于优化搜索引擎更友好,排名更容易靠前.
- 查SQLserver性能瓶颈
https://www.cnblogs.com/wayne-ivan/p/3821750.html
- Flex学习笔记--多层菜单按钮
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...
- python中的递归小实例
#1.n! def fact(n): if n == 0: return 1 else: return n*fact(n-1)print(fact(10)) #2.斐波那契数列F(n)=F(n-1)+ ...
- poi excel设置合并单元格边框格式
版本3.17 //设置合并单元格的边框 public static void setBorderForMergeCell(BorderStyle style,int color, CellRangeA ...
- Ubuntu下无法使用Secure_CRT连接服务器
虚拟机使用 1 .指令安装了SSH服务器 sudo apt-get install openssh-server 2. 输入命令 ps | grep ssh 查看SSH服务是否开启 显示服务已开启 3 ...
- tips___代码规范
函数变量尽可能置于最小作用域内,并在变量声明时进行初始化 变量声明的位置最好离第一次使用的位置越近越好:应使用初始化的方式代替声明再赋值. int x=0; rather than int x; x ...
- U3D的结构体堆分配栈分配
ST ot;//分配在栈上 ST[] arrt = new ST[2];//分配在堆上,因为数组是引用
- linux 内核假死循环导致的问题
[, comm: -IFileSender Tainted: G B ENX -- ZTE Grantley/S1008 [:[<ffffffff810fb2cb>] [<fffff ...