Scrapy基本介绍
scrapy是一种用于爬虫的框架 , 并提供了相当成熟的模板 , 大大减少了程序员在编写爬虫时的劳动需要 。
Command line tool & Project structure使用scrapy需要先创建scrapy project , 之后再于project文件夹路径下生成spider(爬虫)文件 , 编写完程序后 , 再运行爬虫(手动指定保存文件) 。以上过程由命令行执行 , 具体如下:
- scrapy startproject <myproject>
- scrapy genspider <spider_name> <domain>
- scrapy crawl <spider_name> [-o filename]
myproject/scrapy.cfgmyproject/__init__.pyitems.pymiddlewares.pypipelines.pysettings.pyspiders/__init__.pyspider_name.py
Scrapy Overview文章插图
上图是scrapy的基本结构 , 易见scrapy的程序执行和数据流动是由 engine 来调度控制的 , 关于该结构的具体解释见: scrapy document overview .
Scrapy Spider详解基础的使用scrapy一般只需要在spider_name.py中进行编写 , 该文件是我们使用scrapy genspider <spider_name>命令后自动创建中 , 文件中还自动import了scrapy并且还自动创建了一个模版spider类(自动继承自scrapy.Spider) 。spider的功能简介于此: scrapy document spider 。这里介绍一些常用的scray.Spider类的属性及方法:
Attribute :
name :name属性即是我们使用命令行时所指定的spider_name,这是scrapy框架中用于标识spider所用 , 每个spider都必须有一个独一无二的name 。
allowed_domains :该属性为一个以string为元素的list , 每个元素string为一个domain , 限定爬虫所能爬取的网址 。
start_urls :该属性同样为一个以string为元素的list , 每个元素string对应一个完整的url , 是spider开始时需要爬取的初始网址 。
custom_settings :该属性的形式为一个dict , 即如修改user-agent , 开启pipeline , 指定log_level之类的 , 并且局限于http header 。
method :
start_requests :该方法用于在scrapy开始爬虫时以start_urls返回一个Request iterable或者一个generator , 该方法在一次爬虫过程中仅被调用一次 。其默认实现为:Request(url, dont_filter=True) for each url in start_urls 。
parse :这是spider类中最重要的一个方法 。由scrapy文档中对spider的介绍 , spider每发出一个Request , 便要对该Request的Response进行处理 , 处理的函数称为callback function , 即 one Request corresponds to one Callback 。而parse就是默认的callback函数 , 它负责对传回的response进行解析(xpath) , 提取数据(item dict-like object)并交予 , 并且还会根据需要发出新的Request请求 。和start_requests一样 , 它的返回值也需要是一个iterable或是一个generator 。一般来说 , 先yield item , 再根据对response的解析得到新的url与yield Request(url,callback) 。这里对于response的解析和数据提取交予过程略过 , 具体可以见于 b站教程 。
由以上介绍可见对于start_request和parse方法的返回值要求 , scrapy框架的内部代码逻辑应该是像for循环一样轮询两者的返回值 , 对于parse方法还需要判断其返回值的类型(item/Request)来区别处理 。
Scrapy Request and ResponseTypically, Request objects are generated in the spiders and pass across the system until they reach the Downloader, which executes the request and returns a Response object which travels back to the spider that issued the request.
Request objectscrapy.Request(url,callback,method="GET",headers=None,body=None,cookies=None,meta=None,..,dont_filter=False)
- 其中url参数即为我们想要爬取网站的url
- callback为该request对应的在返回response时的处理函数
- method是http请求方法 , 常用的有:"GET","POST"
- headers是请求头 , 形式为dict
- body是http请求的请求数据 , 即一般的表单数据 , 形式为bytes字符串
- cookies形式为dict
- 这里先讲dont_filter , 默认值为False , scrapy中默认对于同一url是不重复爬取的 , 所以会把相同的url给filter掉 , 而有时我们需要爬取同一url(如爬取某个不断更新的论坛页面) , 就需要把该值设为True
推荐阅读
- 数据持久化框架为什么放弃Hibernate、Mybatis选择JDBCTemplate
- Go 语言 Web 框架 Echo 系列教程
- Win10系统下搭建Go lang开发环境更换国内源并且体验宇宙最快框架
- Python元类实战,通过元类实现数据库ORM框架
- 新一代BDD框架Gauge+Taiko
- 推荐一款适合程序员使用的前端框架ZUI,基于Bootstrap深度定制款
- 前端测试框架Jest——语法篇
- 适合收藏 如何将Rasa聊天机器人框架部署到linux,简明教程
- AliOS Things内置的嵌入式GUI框架LittlevGL
- Streamlit是python的一个机器学习、数据科学、应用开发框架