‘壹’ scrapy的extract命令有何作用
大概意思就是你用css选择器选择了一个标签里的一个元素,用了extract()方法,返回的结果是那整个标签,用列表的方法返回
‘贰’ 在pycharm中编写python爬虫怎么解决scrapy没有crawl命令问题
答案很简单,四步:
新建项目 (Project):新建一个新的爬虫项目
明确目标(Items):明确你想要抓取的目标
制作爬虫(Spider):制作爬虫开始爬取网页
存储内容(Pipeline):设计管道存储爬取内容
‘叁’ 请简述scrapy创建项目的流程以及相应语句,对相关参数进行解释
摘要 一.创建项目
‘肆’ 同时装有python2.7 python3.5 scrapy命令怎么在python2.7上面运行
终端scrapy命令实际上是调用了python安装文件夹的子文件夹Scripts里的scrapy.exe(windows系统)或者scrapy.sh(linux系统)
所以如果你在终端键入scrapy执行的是python3.5的, 说明你的默认python是3.5
这个时候要想执行python2.7的,有几个方法:
改变path环境变量, 设置python2.7为默认python(这个太麻烦, 不推荐)
执行scrapy命令(假设要执行scrapy startproject projectname)的时候不直接键入scrapy, 而是加上scrapy的绝对路径,
windows上: C:InstallAnaconda2Scriptsscrapy startproject projectname
linux 同理
把python2.7的scrapy.exe所在的文件夹(我这里是C:InstallAnaconda2Scripts)添加到环境变量Path里, 将scrapy.exe重命名为scrapy2.exe(linux同理)
然后终端运行的时候就输入 scrapy2 startproject projectname 即可
4. 用virtualenv创建两个隔离的虚拟python环境, 分别执行
‘伍’ 究竟在哪里打开Scrapy 命令行,当我不是在scrapy的安装目录下打开命令行运算符时,scrapy为什么就用不了
因为没有把路径添加到 PATH 环境变量 中,所以,当前路径不是安装目录时,打不开的。。。。。。。。。。。。。。
‘陆’ Python中Scrapy框架中写运行命令,为啥我这没有结果,去掉nolog有运行结果,加上啥都没
-nolog的意思就是不显示运行相关的信息。但是程序已经执行了,主要是网络访问的信息很多,为了避免看不过来所以加这个选项的。
‘柒’ scrapy命令是否必须在cmd状态下才能用
关于如何查看端口是否被占用,可以根据以下步骤来操作:1、开始---->运行---->cmd,或者是window+R组合键,调出命令窗口;2、输入命令:netstat-ano,列出所有端口的情况。在列表中观察被占用的端口,比如是49157,首先找到它。3、查看被占用端口对应的PID,输入命令:netstat-aon|findstr"49157",回车,记下最后一位数字,即PID,这里是2720。4、继续输入tasklist|findstr"2720",回车,查看是哪个进程或者程序占用了2720端口,结果是:svchost.exe5、或者是打开任务管理器,切换到进程选项卡,在PID一列查看2720对应的进程是谁,如果看不到PID这一列,如下图:6、则点击查看--->选择列,将PID(进程标示符)前面的勾打上,点击确定。7、这样就看到了PID这一列标识,看一下2720对应的进程是谁,如果没有,把下面的显示所有用户的进程前面的勾打上,就可以看到了,映像名称是svchost.exe,描述是,Windows的主进程,与上面命令查看的完全一致。8、结束该进程:在任务管理器中选中该进程点击”结束进程“按钮,或者是在cmd的命令窗口中输入:taskkill/f/t/imTencentdl.exe。
‘捌’ 写个shell脚本要启动scrapy框架!现在情况是启动会打印第三横的内容,第二句scrapy crawl命令并不会执行
用$把命令括起来:$((scrapy crawl ch))
‘玖’ 如何在eclipse中使用scrapy
步骤如下:
一、创建项目
如果安装了最新的pydev,创建一个新项目会有三个选项,这里直接选择一个普通的python项目即可,此时查看项目目录,目录项只有两个工程文件。
配置完成,点击Debug按钮,如果能正常显示类似于下面的信息则说明配置成功。
2015-07-04 00:10:10 [scrapy] INFO: Closing spider (finished)
2015-07-04 00:10:10 [scrapy] INFO: Dumping Scrapy stats:
至此eclipse + pydev开发环境debug Scrapy就全部完成了。
‘拾’ scrapy 怎样添加命令行参数
在scrapy使用过程中,很多情况下需要根据实际需求定制自己的扩展,小到实现自己的pipelines,大到用新的scheler替换默认的scheler。
扩展可以按照是否需要读取crawler大致分为两种,对于不需要读取的,比如pipelines的编写,只需要实现默认的方法porcess_item。需要读取的,如scheler的编写又存在另外的方式。
1.第一种
这种处理起来比较简单,一般是根据scrapy的signals实现相应的处理。具体实现可见文档pipelines的编写方法。
2.第二种
(1)区别:
这种方式和第一种的主要区别是需要使用crawler内部信息,比如接收内部信号,如signals.spider_opened等。还体现在对设置setting.py的是否需要读取上。
(2)实现:
i)读取设置一般通过from_settings函数实现。一下是scrapy-redis中scheler的from_settings的实现方法:
def from_settings(cls, settings):
persist = settings.get('SCHEDULER_PERSIST', SCHEDULER_PERSIST)
queue_key = settings.get('SCHEDULER_QUEUE_KEY', QUEUE_KEY)
queue_cls = load_object(settings.get('SCHEDULER_QUEUE_CLASS', QUEUE_CLASS))
pefilter_key = settings.get('DUPEFILTER_KEY', DUPEFILTER_KEY)
idle_before_close = settings.get('SCHEDULER_IDLE_BEFORE_CLOSE', IDLE_BEFORE_CLOSE)
server = connection.from_settings(settings)
return cls(server, persist, queue_key, queue_cls, pefilter_key, idle_before_close)
ii)from_crawler()
Scrapy API的主要入口是 Crawler 的实例对象, 通过类方法 from_crawler 将它传递给扩展(extensions)。 该对象提供对所有Scrapy核心组件的访问, 也是扩展访问Scrapy核心组件和挂载功能到Scrapy的唯一途径。
实现例子如下:
def from_crawler(cls, crawler):
instance = cls.from_settings(crawler.settings)
return instance
iii)其它函数
想pipelines中的process_item一样,有些函数是此类型组建所必需的,整个框架在执行时会使用到次函数,所以必须加以实现。如scheler中的enqueue_request、next_request等函数。
最难处理的也是第iii种,这需要全局了解scrapy运行逻辑,函数调用关系等。比较简单的方式是按照原组件的函数功能,函数返回值等根据自己编写的扩展的功能重新实现。就是照葫芦画瓢。
scrapy内data stream在其文档的架构上已经说明,但是转化到代码上好难找啊。