目录:
1:crawlspider
- 主要介绍crawlspider爬虫的一些拓展,可以用来自动换页
- 有些场景使用crawlspider爬虫框架还是很方便的,前提是url的规则,使用正则表达式来方便
1.1:什么是crawlspider
- crawlspider是另一种爬取数据的方式,从本质上来讲和scrapy是一种技术,只不过是当中添加了一些别的数据
1.2:学习目标
- 通过这个知识点来了解crawlspider是如何使用的
1.3:特性
- crawlspider爬虫框架继承于spider爬虫类,所以说spider爬虫可以完成的事情,crawlspider爬虫都可以完成
1.4:相比于普通的spider爬虫的优势
- 可以自动根据一些规则来提取网页源码的链接发送给引擎,让引擎来调配
1.5:crawlspider的使用
1.5.1:如何创建crawlspider
- 在原来创建spider爬虫时候,需要把创建爬虫的代码换为
scrapy genspider -t crawl 爬虫文件的名字 爬虫爬取的范围地址
- -t:以什么方式来创建爬虫框架
- crawl:以crawl的方式来创建爬虫框架
1.6:crawlspider爬虫框架和crapy爬虫框架的区别
相同点:
- 与别的scrapy爬虫框架的页面结构完全一样
不同点:
-
1:多导入了几个包:
-
from scrapy.linkextractors import LinkExtractor
-
from scrapy.spiders import CrawlSpider, Rule
-
-
2:多了个rules变量:这个变量存储的是一个元组,在这个元组中定义了一个链接提取的规则,可以定义多个rules变量,共有三个参数,
- 参数一:链接提取器,用来编写提取链接的规则的,多使用的是正则表达式,但是正则表达式一定要写正确,要不然返回的数据会出错;
- 参数二:回调方法,虽然是一个str类型的数据,但是scrapy爬虫框架内部实现了函数的调用,在这里只是作为一个参数来调用;
- 参数三:决定是否在提取的链接继续跟进,T为跟进,F为不跟进
-
3:没有了pares方法:虽然没有了pares方法,但是scrap爬虫框架重写了pares方法,所以还是可以使用的
-
4:多了个pares——item方法:
2:scrapy模拟登陆
2.1:怎么实现模拟登陆
- 1:直接携带cookie登陆
- 2:发送post请求,携带账号和密码登陆
- 3:使用selenium模拟登陆
2.2:使用scrapy框架模拟登陆
- 在使用scrapy框架模拟登陆的时候,只需要使用前两个方法就可以了,不使用第三个方法模拟登陆
2.3:直接携带cookie模拟登陆
- 也就是在使用scrapy框架爬取数据的使用,在爬虫程序中直接携带cookie来模拟登陆
方法一
- 在爬虫中间件文件中设置cookie,来实现模拟登陆
- 注意:
- Request()方法当中的所有参数,都可以作为请求对象request的属性
- headers、cookies在爬虫中间件文件中,都是以字典的形式存储数据的
- 代理IP的设置
- 在爬虫中间件中添加一个request请求,使用meat属性
- meat属性的作用:
- 1:在不同方法间相互传递参数
- 2:设置定义的ip,在下载中间件中写cookie文件
- 代码
- 注意:
- 1:先在setting文件中把配置cookie的代码注释打开,原来是注释的情况(默认注释的情况是禁止的)
- 2:打开,若改为False,找到的cookie是在setting文件中的headers中的cookie
- 3:打开,若为True,找到的cookie是在下载中间件中的cookies
方法二
- 在爬虫文件中,携带cookie发起请求
- 步骤
- 1:找爬虫文件中,重写start_request()方法,在这个时候携带cookie,就是在发起请求之前携带好的cookie
- 2:使用cookie来加入request
- 注意在这里携带的为cookies属性,而不是headers属性,在使用UA的时候使用的才是headers属性
- 3:使用字典的形式存在呈现cookie,
- 注意要使用字典的形式呈现cookie
- 4:在scrapy中,cookie需要以字典的形式来呈现,headers和cookie都是需要使用字典的形式来呈现
2.4:使用post请求
方法一
- 发送post请求来携带账号和密码
- 在使用yield发送请求的时候可以携带账号和密码
- 代码:
yield scrapy FromRequest(url, data, pages)
- 步骤:
- 1:先在网页源码中得到我们需要得到的数据
- 2:发送请求,注意要把from_data中的数据拿过来
- 3:携带数据发送请求,post请求,From_Request–>post请求、Request–>get请求
- 另外:post请求的参数:1:url:主要的地址 、2:fromdata携带的数据(在网页源码中的包可以找到)、3:calldack:解析数据的反方法
方法二
- from_request()、次要拓展,scrapy的一种内置的方法,可以只输入账号和密码,别的数据可以不用输入,也就是说更方便了
- 获得响应的数据,请求数据
formdata={'login':'账号','password':'密码'},
- login:账号
- password:密码