scrapy框架02_入门使用

版权声明:内容版权为CSDN用户:kayseen 所有,若您需要引用、转载,需要注明来源及原文链接 https://blog.csdn.net/m0_43394876/article/details/90143173

1. scrapy项目实现流程

  • 创建一个scrapy项目:scrapy startproject mySpider
  • 生成一个爬虫:scrapy genspider itcast "itcast.cn
  • 提取数据:完善spider,使用xpath等方法
  • 保存数据:pipeline中保存数据

2. 创建scrapy项目

下面以抓取传智师资库来学习scrapy的入门使用:http://www.itcast.cn/channel/teacher.shtml

命令:scrapy startproject +<项目名字>

示例:scrapy startproject myspider

生成的目录和文件结果如下:
在这里插入图片描述

3. 创建爬虫

命令:scrapy genspider +<爬虫名字> + <允许爬取的域名>

示例:scrapy genspider itcast itcast.cn

生成的目录和文件结果如下:
在这里插入图片描述

4. 完善spider

完善spider即通过方法进行数据的提取等操作
在这里插入图片描述
注意:

  1. response.xpath方法的返回结果是一个类似list的类型,其中包含的是selector对象,操作和列表一样,但是有一些额外的方法
  2. extract() 返回一个包含有字符串的列表
  3. extract_first() 返回列表中的第一个字符串,列表为空没有返回None
  4. spider中的parse方法必须有
  5. 需要抓取的url地址必须属于allowed_domains,但是start_urls中的url地址没有这个限制
    启动爬虫的时候注意启动的位置,是在项目路径下启动

5.数据传递到pipeline

在这里插入图片描述

为什么要使用yield?

  • 让整个函数变成一个生成器,有什么好处呢?
  • 遍历这个函数的返回值的时候,挨个把数据读到内存,不会造成内存的瞬间占用过高
  • python3中的range和python2中的xrange同理

注意:

  • yield能够传递的对象只能是:BaseItem,Request,dict,None

6. 完善pipeline

在这里插入图片描述
在这里插入图片描述

pipeline在settings中能够开启多个,为什么需要开启多个?

不同的pipeline可以处理不同爬虫的数据
不同的pipeline能够进行不同的数据处理的操作,比如一个进行数据清洗,一个进行数据的保存

pipeline使用注意点

使用之前需要在settings中开启
pipeline在setting中键表示位置(即pipeline在项目中的位置可以自定义),值表示距离引擎的远近,越近数据会越先经过
有多个pipeline的时候,process_item的方法必须return item,否则后一个pipeline取到的数据为None值
pipeline中process_item的方法必须有,否则item没有办法接受和处理
process_item方法接受item和spider,其中spider表示当前传递item过来的spider

7. 输出日志LOG的设置

为了让我们自己希望输出到终端的内容能容易看一些,我们可以在setting中设置log级别

在setting中添加一行(全部大写):LOG_LEVEL = "WARNING”

默认终端显示的是debug级别的log信息

8.scrapy实现翻页请求

对于要提取如下图中所有页面上的数据该怎么办?
在这里插入图片描述
回顾requests模块是如何实现翻页请求的:

找到下一页的URL地址
调用requests.get(url)

思路:

找到下一页的url地址
构造url地址的请求,传递给引擎

8.1 实现翻页请求

使用方法

在获取到url地址之后,可以通过scrapy.Request(url,callback)得到一个request对象,通过yield关键字就可以把这个request对象交给引擎

具体使用
在这里插入图片描述

添加User-Agent

同时可以再在setting中设置User-Agent:

USER_AGENT = ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36’
通过爬取腾讯招聘的页面的招聘信息,学习如何实现翻页请求

地址:http://hr.tencent.com/position.php

思路分析:

获取首页的数据
寻找下一页的地址,进行翻页获取数据

8.2 scrapy.Request的更多参数

scrapy.Request(url[,callback,method="GET",headers,body,cookies,meta,dont_filter=False])

注意:

  • 括号中的参数为可选参数
  • callback:表示当前的url的响应交给哪个函数去处理
  • meta:实现数据在不同的解析函数中传递,meta默认带有部分数据,比如下载延迟,请求深度等
  • dont_filter:默认会过滤请求的url地址,即请求过的url地址不会继续被请求,对需要重复请求的url地址可以把它设置为Ture,比如贴吧的翻页请求,页面的数据总是在变化;start_urls中的地址会被反复请求,否则程序不会启动

9. 定义Item

定义Item的原因

定义item即提前规划好哪些字段需要抓取,scrapy.Field()仅仅是提前占坑,通过item.py能够让别人清楚自己的爬虫是在抓取什么,同时定义好哪些字段是需要抓取的,没有定义的字段不能使用,防止手误

定义Item
在这里插入图片描述

使用Item

Item使用之前需要先导入并且实例化,之后的使用方法和使用字典相同

 from yangguang.items import YangguangItem
 item = YangguangItem() #实例化

猜你喜欢

转载自blog.csdn.net/m0_43394876/article/details/90143173