简单方法直接在黑窗口中pip install scrapy
这种是最好的 除了scrapy 还会下载其他依赖插件
安装好scrapy后 通过 “scrapy startproject 项目名称” 创建一个scrapy 爬虫框架
"cd 项目名称 "
“scrapy genspider 一个爬虫” 创建一个爬虫
“scrapy crawl 爬虫名称” crawl 启动一个爬虫
五个大的模块
1.scheduler 用于存放request对象队列
2. download 用于发送请求获取响应
3. spider 用于提取数据或处理之后再提取url并放回url队列中
4. item pipeline (数据管道) 用于存储数据 iteam->项
5. scrapy engine scrapy 引擎 框架调度器
前面4个不同的模块相互之间的关联就是通过scrapy 引擎来进行调度管理的
scheduler队列把request对象交给引擎;
引擎把request交给download 进行请求;
请求的响应交给engin,
engin再把response 交给spider 进行数据处理 完毕之后再交给engin
engin再负责交给item pipeline(数据管道)或者再交给scheduler队列,
以此进行以整个循环
1.数据重复怎么搞
- 后一次循环的时候会覆盖前一次item修改的结果,scrapy item 传输的都是对象的引用,需要注意
- 在yield下一个函数的时候使用cp库的deepcopy
url地址js生成的怎么搞
- 寻找规律
- 在响应或html中寻找页数或者页码数
crawlspdier
使用步骤
-
1.创建爬虫 scrapy genspdier -t crawl 爬虫名 限制域名
-
2.指定start_url
-
3.完善rules
-
元组
-
Rule
-
LinkExtractor
- 通过规则提取url
- allow 正则
-
callback
- 连接提取器提取的url的响应交给该函数处理
-
follow
- 连接提取器提取的url的响应会继续被rules提取url地址
-
-
-
4.完善callback
crawlspider的使用场景
-
1.url的规律能够通过正则或者xpath表示
-
2.最终的页面有当前业务需要的所有数据
- 如果没有,可以在callback中手动构造请求
注意点
- 1.parse函数不能定义,该函数有多用途,如果被定义就被覆盖了
下载中间件
process_request
-
处理请求
-
添加随机
- request.headers[“User-Agent”]=’…’
-
添加代理
- request.meta[“proxy”]=“ip:port”
-
不需要erturn
process_response
- 处理响应
- 过滤?
- 中间值的处理?
process_exception
- …
…
模拟登录
1.携带cookie登录
- scrapy.request(url,callback,cookies={})
- 不能把cookie放到headers中,无效的
2.使用FormReqeust
-
scrapy.FromRequest(url,formdata={},callback=self.xxx)
- formdate:请求体
- key:value ->form.name:value
3.自动寻找form表单中的action的url
- scrapy.FormRequest.from_response(response,formdata={},callback)