scrapy爬虫框架 (1. Scrapy的基本介绍、使用流程、分组打印、pipelines(管道)使用)

1.scrapy介绍

scrapy是一个为更快爬取网站数据、提取结构性数据而编写的爬虫框架。并且scrapy使用了Twisted异步网络框架,使下载速度更快。
request是模块,模块只能帮助我们发送请求。
scrapy是框架,框架可以帮助我们解决各种需求,其中可能每一个都是模块,框架包含模块。

1.1流程

准备ur队列
发送请求
内容提取(提取url、提取数据)
获得数据队列
在这里插入图片描述
在这里插入图片描述

2.流程步骤及解释

同样通过pip下载scrapy

pip install scrapy

2.1创建项目

通过cmd进入项目存放的文件夹下,然后输入

scrapy startproject [projectName]

在这里插入图片描述

2.2进入创建的项目里创建一个爬虫

进入刚刚创建的项目

cd [progectName]

创建一个爬虫
scrapy genspider [爬虫名字] [爬取范围]

scrapy genspider itcast itcast.cn

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

注:parse不能改名

2.3运行爬虫

通过cmd在项目文件夹下启动爬虫,即在firstScrapy下运行指令:
scrapy crawl [爬虫名]

scrapy crawl itcast

在这里插入图片描述

2.4取消日志显示

在settings.py里进行设置

LOG_LEVEL="WARNING"   #只显示warning及以上的日志

在这里插入图片描述

2.5更改初始请求url地址,爬取传智播客的教师名字

itcast.py

# -*- coding: utf-8 -*-
import scrapy


class ItcastSpider(scrapy.Spider):
    name = 'itcast'  #爬虫名
    allowed_domains = ['itcast.cn']  #爬取范围
    start_urls = ['http://www.itcast.cn/channel/teacher.shtml']   #初始请求的url地址,没有指定的话按爬取范围自动生成

    def parse(self, response):
        #处理start_urls地址对应的响应
        res=response.xpath("//div[@class='tea_con']//h3/text()").extract()  #extract()为提取中文
        print(res)

在这里插入图片描述

3.爬取腾讯课堂课程名字例子

1.scrapy startproject firstScrapy
2.cd firtstScrapy
scrapy genspider class qq.com
3.firstScrapy---------->spiders----------->class.py ,class.py的代码为:

# -*- coding: utf-8 -*-
import scrapy


class ClassSpider(scrapy.Spider):
    name = 'class'
    allowed_domains = ['qq.com']
    start_urls = ['https://ke.qq.com/course/list?mt=1001&st=2002&tt=3019&price_min=1']

    def parse(self, response):
        res=response.xpath("//div[@class='market-bd market-bd-6 course-list course-card-list-multi-wrap js-course-list']//h4//a/text()").extract()
        print(res)

4.settings.py记得设置

LOG_LEVEL="WARNING" 

5.cmd输入

scrapy crawl class

在这里插入图片描述

4.分组爬取

# -*- coding: utf-8 -*-
import scrapy


class ItcastSpider(scrapy.Spider):
    name = 'itcast'  #爬虫名
    allowed_domains = ['itcast.cn']  #爬取范围
    start_urls = ['http://www.itcast.cn/channel/teacher.shtml']   #初始请求的url地址,没有指定的话按爬取范围自动生成

    def parse(self, response):
        #处理start_urls地址对应的响应
        res=response.xpath("//div[@class='tea_con']//li")
        #分组
        for resList in res:
            item={}
            item["name"]=resList.xpath(".//h3/text()").extract_first()
            item["title"]=resList.xpath(".//h4/text()").extract_first()
            print(item) #在cmd执行运行指令后,结果在cmd显示

在这里插入图片描述

5.Pipelines(管道)使用

spider用来抓取数据,Pipelines用来处理抓取到的数据,比如存储

5.1更改settings.py里的内容,让Pipelines起作用

在这里插入图片描述

5.2

在spider里加上

yield 数据(Request、BaseItem、dict、None)

在这里插入图片描述

5.3

在pipelinse.py里打印
在这里插入图片描述

注:pipeline中的process_item不能改名

5.4

cmd运行

scrapy crawl itcast

6.多管道处理数据

使用多个pipeline的原因
1.有多个spider,不同的pipeline处理不同的item的内容
2.一个spider的内容要做不同的操作,比如存入不同的数据库中

首先知道settings.py里的代码
在这里插入图片描述
然后到pipelines.py里设置多管道
在这里插入图片描述

接着到settings.py设计先经过哪个管道
在这里插入图片描述
cmd运行,结果为在这里插入图片描述

注:上一个管道必须返回值,要不然下一个管道没有数据处理,返回null

7.总结

7.1流程

在这里插入图片描述

7.2注意

1.spider里的parse函数不能改名
2.pipeline中的process_item不能改名
3.多个管道使用时上一个管道必须返回值,要不然下一个管道没有数据处理,返回null
4.settings.py里的pipeline的距离也可以叫做权值,越小越优先

发布了63 篇原创文章 · 获赞 3 · 访问量 1700

猜你喜欢

转载自blog.csdn.net/qq_34405401/article/details/104022938