1.创建
2.继承的类
3.不能用parse方法
4.parse_start_url
反爬措施:
- 基于请求头的反爬(合理构建请求头)(请求头参数(user-agent,referer,cookie),常见的状态码,常见的请求方式)
- 基于cookie的反爬(cookie池,文件存储,数据库存储)(如何获取cookie,如何验证cookie,怎么进行模拟登陆)
- 基于IP的反爬(代理,代理的原理?代理如何获取?代理怎么检测?代理池)
- 基于动态加载的网页(ajax,js,jq)(selenium?无头和有头浏览器?selenium方法)
- 关于数据加密?(js,app,web网页)
下载中间件:处于引擎和下载器之间
@classmethod
def from_crawler(cls, crawler):
def process_request(self, request, spider):
所有的request请求在交给下载器之前都会经过这个方法
# - return None: continue processing this request
# - or return a Response object
# - or return a Request object
# - or raise IgnoreRequest: process_exception() methods of
# installed downloader middleware will be called
def process_response(self, request, response, spider):
所有的相应结果会经过这个方法
# - return a Response object
# - return a Request object
# - or raise IgnoreRequest
def process_exception(self, request, exception, spider):
处理请求的异常错误
# - return None: continue processing this exception
# - return a Response object: stops process_exception() chain
# - return a Request object: stops process_exception() chain
def spider_opened(self, spider):
spider.logger.info('Spider opened: %s' % spider.name)
关于爬虫断点爬取:
scrapy crawl 爬虫名称 -s JOBDIR=crawls/爬虫名称
requests.queue:保存请求的任务队列
requests.seen:保存的指纹
spider.status:爬虫运行状态
scrapy settings.py设置文件(相关参数)