爬虫学习笔记--scrapy二

全站数据爬取: 将网站中某板块下的全部页码所对应的信息爬取 Scrapy中 Yield scrapy.requests(url= ,callback=self.parse) #手动请求发送:callback回调函数是专门用作于数据解析,,类比递归

-请求传参 -使用场景:如果爬取解析的数据不在同一张页面中(深度爬取) –中间件: —位置: 引擎和下载器之间 ----作用 :批量拦截到整个工程中所有的请求和相应 ----拦截请求: ----ua伪装 ----代理ip -----拦截相应: —篡改响应数据,相应对象 Middlewares.py 是中间件的方法集

可以只保留这三个 Process_request用于拦截请求 #ua伪装 Request.headers[‘user-agent’] =’xxx’ #或者搜索ua池,让该池随机出一个赋值 _response 用于拦截回应 _excption 用于拦截异常 #代理 同样应用代理池 If request.url.split(“:’)[0]==’http’: Request.meta[‘proxy’]=random.choice(self,list_name) Else : Pass Return request #将修正后的请求对象重新发送请求 将setting中的打开

如果解析时遇到动态加载的页面要使用中间件处理 对 process_response 编写 #挑选出指定的响应对象进行篡改 #通过url指定request 通过request指定response If request.url in spider.models_urls: //针对定位到的这些进行篡改,实例化一个新的响应对象(符合需求:包含动态加载出的新闻数据),替代旧的相应对象 所以要导包

from scrapy.http import HtmlReponse
New_reponse=HtmlResponse(url,body,encoding,request)
return  new_reponse

else:
return reponse

crawl spider:基于spider的一个子类 —全站数据爬取的方式 使用: —创建一个工程 –cd xxx —创建的爬虫文件(基于crawlspider): —scrapy genspider -t crawl 爬虫文件名 www。Xxxx。Com

#链接提取器
    link=LinkExtractor(allow=rItems/)

—链接提取器: 对链接进行提取,根据指定规则进行指定连接提取 Allow表示制定好的规则,等号后面表示正则表达式

Rules=()表示规则解析器 将连接提取器渠道的链接进行指定规则(callback)的解析操作

Follow=true时可以将链接提取器继续作用到 链接提取器提取到的连接 所对应的链接中

Xpath解析器中不能出现tbody标签,如果出现就使用//跳过

分布式爬虫: —概念:我们需要搭建一个分布式的集群,让其对一组资源进行分布爬取 –作用:提升爬取数据的效率 –如何实现分布式? –安装scrapy-redis 的组件 —原生的scrapy不可以实现分布式,必须要scrapy结合组件一起实现分布式爬虫,调度器不能共享,管道不能共享 —组件作用: ---- 给原生scrapy框架提供可被共享的管道和调度器

---实现流程:

—创建工程 —创建基于crwalspider的爬虫文件 –修改当前爬虫文件 –导包from scapy_redis.spiders import RedisCrwaSpider – 将start_urls和allowed_domains进行注释 使用redis_key=”” 进行代替 可以被共享的调度器队列的名称 —将爬虫的父类改成RedisCrwaSpider —修改settings文件 –指定可以使用的管道 –指定调度器 增量式爬虫: 概念: 检测网站数据更新的情况,只会爬取网站最新更新出来的数据。 –分析: –制定起始的url –基于crwalspider获取其他页码链接 –基于rule将其他页码链接进行请求 –从每个页码对应的页面源码中解析出每一个电影详情页的url –检测电影详情页的url之前有没有请求过 –将爬取过的电影详情页的url存储 –存储到redis的set数据结构 –对详情页的url发起请求,然后解析出电影名称和简介 –进行持久化存储

经验分享 程序员 微信小程序 职场和发展