文章目录
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的距离也可以叫做权值,越小越优先