一. 命令行工具
● 帮助命令
关于命令的帮助 scrapy <command> -h
所有可用的命令 scrapy -h
● 命令分类
全局命令:startproject, settings, runspider, shell, fetch, view, version
工程相关的命令: crawl, check, list, edit, parse, genspider, deploy,bench
● 具体命令说明
○ startproject: scrapy startproject <project_name> 创建新的scrapy工程
○ genspider: scrapy genspider [-t template] <name> <domain> 在当前工程中创建新的爬虫
○ crawl: scrapy crawl <spider> 用爬虫开始抓取
○ check: scrapy check [-l] <spider> 对比检测
○ list: scrapy list 列出当前工程中可用的爬虫
○ edit: scrapy edit 用EDITOR设置中的编辑器编辑爬虫
○ fetch: scrapy fetch <url> 用scrapy下载器下载指定url,将结果写到标准输出
○ view: scrapy view <url> 以scrapy爬虫可以读取的方式打开url
○ shell: scrapy shell <url> 启动scrapy shell
○ parse: scrapy parse <url> [options] 获取并解析指定url的内容,支持的options有:
◎ --spider=SPIDER 强制使用指定爬虫解析
◎ --a name=value 设置爬虫参数,可以重复
◎ --callback或-c 用spider函数作为回调来解析返回结果
◎ --pipelines 通过pipelines处理抓取条目
◎ --rules或-r 用爬虫规则找对应的回调来解析返回结果
◎ --noitems 不显示抓取条目
◎ --nolinks 不显示提取的链接
◎ --depth或-d 请求循环深度
◎ --verbose或-v 显示每个深度的信息
○ settings: scrapy settings [options] 获取scrapy配置中的值
○ runspider: scrapy runspider <spider_file.py> 不需要创建工程,运行py文件中的爬虫。
○ version: scrapy version [-v] 打印scrapy版本,带参数-v会输出python、twisted和平台的信息。
○ deploy: scrapy deploy [ <target:project> | -l <target> | -L] 部署工程到scrapy服务器
○ bench: scrapy bench 运行基准测试程序
○ COMMANDS_MOUDLE 自定义命令
二. 条目
爬取的目的就是从非结构的信息中获得结构化的数据,Scrapy的Item就是实现该过程的。
● 声明
import scrapy
class Product(scrapy.Item)
name=scrapy.Field()
……
● 创建
>>>product= Product(name='PC')
● 获取字段值
>>>product['name']
● 设置字段值
>>>product['name']= 'App'
● 获取所有值
>>>product.items()
● 继承
class DiscountedProduct(product)
discount_percent=scrapy.Field(serializer=str)
● Item对象
scrapy.item.Item([arg])
● Field对象
scrapy.item.Field([arg])
三. 爬虫
爬虫就是用户定义的抓取和解析指定站点的地方,一般爬虫的执行流程如下:
① 生成初始请求抓取第一个url,当获得请求结果后调用指定的回调函数。
② 在回调函数中,解析返回结果,获取Item对象或请求对象。解析得到的请求对象又包含回调方法,Scrapy循环执行上述过程。
③ 在回调中,一般用Selectors(也可用BeautifulSoup或lxml等)解析到Items。
④ 最后,爬虫返回的结果将被持久化到数据库(用Item Pipeline)或文件(用Feed exports)。
● spider参数
○ scrapy crawl myspider -a category-electronics 命令行参数
○ 构造函数中
import scrapy
class myspider(scrapy.Spider)
name='myspider'
def __init__(self, catagory=None, *args, **kwargs)
super(Myspider, self).__init__(*args, **kwargs)
……
下面介绍几个scrapy自带的spider:
● spider
scrapy.sider.Spider是最简单的Spider,其他爬虫都继承它。它只请求指定的start_urls或start_requests,在返回结果时调用parse方法。包括的属性和方法有:
○ name 唯一标识
○ allowed_domains 爬取的作用域列表
○ start_urls 开始爬取的url列表
○ srart_requests 返回爬虫开始爬取的请求枚举
○ make_requests_from_url(url) 将url转化为请求
○ parse(response) 当请求没指定回调时,获得请求结果时调用的默认回调函数
○ log(message, [level, component]) 用scrapy.log.msg()记录日志信息
○ closed(reason) 关闭爬虫
● CrawlSpider
scrapy.contrib.spiders.CrawlSpider抓取普通网站最常用的爬虫,通过定义规则提供方便的跟踪链接机制。除了继承Spider的属性外,它还有一个新的属性rules,还暴露了一个可重写的方法parse_start_url(response)。
○ Crawling rules
scrapy.contrib.spiders.Rule(link_extractor, callback=None, cb_kwargs=None, follow=None, process_links=None, process_request=None)
◎ link_extractor是个Link Extractor,它定义了如何从每个爬取页面中提取链接。
◎ callback在link_extractor提取链接后调用,它接收response作为参数,必须返回包含Item和/或Request对象的列表。编写爬取规则时避免使用parse作为回调函数。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。