scrapy shell命令的【选项】简介

在使用scrapy shell测试某网站时,其返回400 Bad Request,那么,更改User-Agent请求头信息再试。

DEBUG: Crawled (400) <GET https://www.某网站.com> (referer: None)

可是,怎么更改呢?

使用scrapy shell --help命令查看其用法:

Options中没有找到相应的选项;

Global Options呢?里面的--set/-s命令可以设置/重写配置。

使用-s选项更改了User-Agent配置,再测试某网站,成功返回页面(状态200):

...>scrapy shell -s USER_AGENT="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36" https://www.某网站.com

2018-07-15 12:11:00 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.某网站.com> (referer: None)

--------翻篇--------

说明,其实,这个-s的用法并非自己通过上面步骤知道的(之前一直关注Options下面的选项,忽略了Global Options,觉得没用吗?),而是通过网页搜索,然后见到下面的文章:

原文作者:木木&侃侃(一位园友,原文链接

更进一步:在Scrapy的源码中会对相关配置项有更详细的信息。

打开C:\Python36\Lib\site-packages\scrapy\commands目录,可以在里面看到各种内置的Scrapy命令的Python文件,其中,shell.py正是scrapy shell命令的源文件。

从源码可以看到,里面定义了Command类——继承了scrapy.commands.ScrapyCommand,在Command的add_options函数中,添加了三个选项:

-c:evaluate the code in the shell, print the result and exit(执行一段解析代码?)

--spider:use this spider

--no-redirect:do not handle HTTP 3xx status codes and print response as-is

没有发现-s选项,那么,-s选项来自哪儿呢?看看scrapy.commands.ScrapyCommand的源码(__init__.py文件中)。可以发现,其下的add_options函数中添加了-s选项:

 1 def add_options(self, parser):
 2     """
 3     Populate option parse with options available for this command
 4     """
 5     group = OptionGroup(parser, "Global Options")
 6     group.add_option("--logfile", metavar="FILE",
 7         help="log file. if omitted stderr will be used")
 8     group.add_option("-L", "--loglevel", metavar="LEVEL", default=None,
 9         help="log level (default: %s)" % self.settings[‘LOG_LEVEL‘])
10     group.add_option("--nolog", action="store_true",
11         help="disable logging completely")
12     group.add_option("--profile", metavar="FILE", default=None,
13         help="write python cProfile stats to FILE")
14     group.add_option("--pidfile", metavar="FILE",
15         help="write process ID to FILE")
16     group.add_option("-s", "--set", action="append", default=[], metavar="NAME=VALUE",
17         help="set/override setting (may be repeated)")
18     group.add_option("--pdb", action="store_true", help="enable pdb on failure")
19
20     parser.add_option_group(group)

好了,源头找到了。

可是,之前在寻找方法时发现,scrapy crawl、runspider提供了-a选项来设置/重写配置,可是,已经有了-s选项了,为何还要增加-a选项呢?两者有什么区别?

从其解释来看,-a选项仅仅修改spider的参数,而-s可以设置的范围更广泛,包括官文Settings中所有配置吧!(未测试)

parser.add_option("-a", dest="spargs", action="append", default=[], metavar="NAME=VALUE",
        help="set spider argument (may be repeated)")

--------翻篇--------

实践1:scrapy sell的-c选项

(env0626) D:\ws\env0626\ws>scrapy shell -c "response.xpath(‘//title/text()‘)" https://www.baidu.com

输出:

2018-07-15 13:07:23 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.baidu.com> (referer: None)
[<Selector xpath=‘//title/text()‘ data=‘百度一下,你就知道‘>]

实践2:scrapy runspider -a选项和-s选项修改User-Agent请求头

 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3
 4
 5 class MousiteSpider(scrapy.Spider):
 6     name = ‘mousite‘
 7     allowed_domains = [‘www.zhihu.com‘]
 8     start_urls = [‘https://www.zhihu.com/‘]
 9
10     def parse(self, response):
11         yield response.xpath(‘//title/text()‘)

测试结果:-a选项无法获取数据,返回400;-s选项可以,返回200;

-a选项:

(env0626) D:\ws\env0626\ws>scrapy runspider -a USER_AGENT="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36" mousite.py

DEBUG: Crawled (400) <GET https://www.zhihu.com/> (referer: None)

INFO: Ignoring response <400 https://www.zhihu.com/>: HTTP status code is not handled or not allowed

-s选项:

(env0626) D:\ws\env0626\ws>scrapy runspider -s USER_AGENT="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36" mousite.py

DEBUG: Crawled (200) <GET https://www.zhihu.com/> (referer: None)

{‘title‘: [<Selector xpath=‘//title/text()‘ data=‘知乎 - 发现更大的世界‘>]}

看来,两者还是有差别的。

注意,上面的试验都是在Scrapy项目外执行()。

原文地址:https://www.cnblogs.com/luo630/p/9313322.html

时间: 2024-11-05 23:25:32

scrapy shell命令的【选项】简介的相关文章

shell处理命令行选项getopts

getopts是shell的一个内置命令,通常用来处理shell命令行选项,但是不能直接处理长选项(如:--prefix=/home等). getopts有2个参数,第一个参数是字符串,包括字符和":",每一个字符都是一个有效的选项,如果字符后面带有":",表示这个字符有自己的参数.第二个参数用来存储获取的选项. shell为getopts提供了2个内置变量: OPTARG:存储相应选项的参数: OPTIND:存储原始$*中下一个要处理选项的位置: 实例: #!/b

scrapy shell 用法(慢慢更新...)

scrapy shell 命令 1.scrapy shell url #url指你所需要爬的网址 2.有些网址数据的爬取需要user-agent,scrapy shell中可以直接添加头文件, 第①种方法 scrapy shell -s USER_AGENT="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36" url #url指你所

Scrapy的shell命令(转)

scrapy python MrZONT                        2015年08月29日发布 推荐                                                                                                                              1 推荐 收藏                                                         

使用getopts命令解析shell脚本的命令行选项

转自:http://yejinxin.github.io/parse-shell-options-with-getopts-command/ 标准的Unix命令一般都提供很多选项,使用者通过命令行提供具体的选项和参数,格式如下: command -options parameters filename getopts是shell内建的一个命令,它可以帮助我们处理命令行选项,使得我们的脚本也可以与unix命令保持风格一致.getopts的用法格式为: getopts option_string v

Scrapy命令行工具简介

Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0, 在最初使用Scrapy时,使用编辑器或IDE手动编写模块来创建爬虫(Spider)程序,然后使用scrapy crawl命令执行Spider. 这种方式很初级.繁琐,不适合更大型的项目. 很好的是,Scrapy提供了 命令行工具(Command line tool),通过这套工具,开发者可以轻松建立 Scrapy项目,而不仅仅是一个一个的Spider程序. 初见Scrapy命

linux 学习笔记 基本的bash shell命令

/etc/passwd 文件包含了所有系统用户账户列表以及每个用户的基本配置信息 用户名:密码:UID:GID:用户全名:用户默认的工作目录:用户默认的shell程序 默认情况下,bash shell启动时会自动处理用户主目录下.bashrc文件中的命令. 它经常设置各种应用程序中用到的环境变量. “-”是主目录的缩略表示 PS1:控制默认命令行提示符的格式 PS2:控制后续命令行提示符的格式 所有提示符特殊字符都从反斜线(\)开始. man命令用来访问存储在Linux系统上的手册页面. Nam

FS Shell命令手册

1.       FS Shell 1.1     简介 调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args>的形式. 所有的的FS shell命令使用URI路径作为参数.URI格式是scheme://authority/path.对HDFS文件系统,scheme是hdfs,对本地文件系统,scheme是file.其中scheme和authority参数都是可选的,如果未加指定,就会使用配置中指定的默认scheme.一个HDFS文件或目录比如/parent/chi

VxWorks操作系统shell命令与调试方法总结

VxWorks下的调试手段 主要介绍在Tornado集成开发环境下的调试方法,和利用支撑定位问题的步骤.思路. 1         Tornado的调试工具 嵌入式实时操作系统VxWorks和集成开发环境Tornado的组成结构如下图1.分为主机和目标机系统. 图1 集成开发环境结构图 在Tornado下,调试相关操作在Debug菜单下,包括: 图2 Debug菜单 简单解释各菜单项的功能 1.1        WindShell 1.1.1         简介 Vxworks的Shell分为

scrapy爬虫-------命令解析

scrapy是通过命令行进行控制的,你可以在命令行中输入一个scrapy,会出现一拍命令. 你也可以通过tree来查看scrapy的目录结构,scrapy.cfg存放的目录被认为是项目的根目录,该文件中包含python模块名的字段定义了项目的设置.下面的代码是我一个爬取天气的爬虫中的.cfg文件. # Automatically created by: scrapy startproject # # For more information about the [deploy] section