一.简介

Spider是所有爬虫的基类,其设计原则只是为了爬取start_url列表中网页,而从爬取到的网页中提取出的url进行继续的爬取工作使用CrawlSpider更合适。

二.使用

1.创建scrapy工程:scrapy startproject projectName

2.创建爬虫文件:scrapy genspider -t crawl spiderName www.xxx.com

--此指令对比以前的指令多了 "-t crawl",表示创建的爬虫文件是基于CrawlSpider这个类的,而不再是Spider这个基类。

3.观察生成的爬虫文件

#-*- coding: utf-8 -*-

importscrapyfrom scrapy.linkextractors importLinkExtractorfrom scrapy.spiders importCrawlSpider, RuleclassChoutidemoSpider(CrawlSpider):

name= 'choutiDemo'

#allowed_domains = ['www.chouti.com']

start_urls = ['http://www.chouti.com/']

rules=(

Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),

)defparse_item(self, response):

i={}#i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()

#i['name'] = response.xpath('//div[@id="name"]').extract()

#i['description'] = response.xpath('//div[@id="description"]').extract()

return i

- 2,3行:导入CrawlSpider相关模块

- 7行:表示该爬虫程序是基于CrawlSpider类的

- 12,13,14行:表示为提取Link规则

- 16行:解析方法

CrawlSpider类和Spider类的最大不同是CrawlSpider多了一个rules属性,其作用是定义”提取动作“。在rules中可以包含一个或多个Rule对象,在Rule对象中包含了LinkExtractor对象。

3.1 LinkExtractor:顾名思义,链接提取器。

LinkExtractor(

allow=r'Items/',#满足括号中“正则表达式”的值会被提取,如果为空,则全部匹配。

deny=xxx, #满足正则表达式的则不会被提取。

restrict_xpaths=xxx, #满足xpath表达式的值会被提取

restrict_css=xxx, #满足css表达式的值会被提取

deny_domains=xxx, #不会被提取的链接的domains。

)- 作用:提取response中符合规则的链接。

3.2 Rule :

规则解析器。根据链接提取器中提取到的链接,根据指定规则提取解析器链接网页中的内容。

Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True)

- 参数介绍:

参数1:指定链接提取器

参数2:指定规则解析器解析数据的规则(回调函数)

参数3:是否将链接提取器继续作用到链接提取器提取出的链接网页中。当callback为None,参数3的默认值为true。

3.3 rules=( ):

指定不同规则解析器。一个Rule对象表示一种提取规则。

3.4 CrawlSpider整体爬取流程:

a)爬虫文件首先根据起始url,获取该url的网页内容

b)链接提取器会根据指定提取规则将步骤a中网页内容中的链接进行提取

c)规则解析器会根据指定解析规则将链接提取器中提取到的链接中的网页内容根据指定的规则进行解析

d)将解析数据封装到item中,然后提交给管道进行持久化存储

4.简单代码实战应用

4.1 爬取糗事百科糗图板块的所有页码数据

#-*- coding: utf-8 -*-

importscrapyfrom scrapy.linkextractors importLinkExtractorfrom scrapy.spiders importCrawlSpider, RuleclassCrawldemoSpider(CrawlSpider):

name= 'qiubai'

#allowed_domains = ['www.qiushibaike.com']

start_urls = ['https://www.qiushibaike.com/pic/']#连接提取器:会去起始url响应回来的页面中提取指定的url

link = LinkExtractor(allow=r'/pic/page/\d+\?') #s=为随机数

link1 = LinkExtractor(allow=r'/pic/$')#爬取第一页

#rules元组中存放的是不同的规则解析器(封装好了某种解析规则)

rules =(#规则解析器:可以将连接提取器提取到的所有连接表示的页面进行指定规则(回调函数)的解析

Rule(link, callback='parse_item', follow=True),

Rule(link1, callback='parse_item', follow=True),

)defparse_item(self, response):print(response)

4.2 爬虫文件:

#-*- coding: utf-8 -*-

importscrapyfrom scrapy.linkextractors importLinkExtractorfrom scrapy.spiders importCrawlSpider, Rulefrom qiubaiBycrawl.items importQiubaibycrawlItemimportreclassQiubaitestSpider(CrawlSpider):

name= 'qiubaiTest'

#起始url

start_urls = ['http://www.qiushibaike.com/']#定义链接提取器,且指定其提取规则

page_link = LinkExtractor(allow=r'/8hr/page/\d+/')

rules=(#定义规则解析器,且指定解析规则通过callback回调函数

Rule(page_link, callback='parse_item', follow=True),

)#自定义规则解析器的解析规则函数

defparse_item(self, response):

div_list= response.xpath('//div[@id="content-left"]/div')for div indiv_list:#定义item

item =QiubaibycrawlItem()#根据xpath表达式提取糗百中段子的作者

item['author'] = div.xpath('./div/a[2]/h2/text()').extract_first().strip('\n')#根据xpath表达式提取糗百中段子的内容

item['content'] = div.xpath('.//div[@class="content"]/span/text()').extract_first().strip('\n')yield item #将item提交至管道

4.2 item文件:

#-*- coding: utf-8 -*-

#Define here the models for your scraped items#

#See documentation in:#https://doc.scrapy.org/en/latest/topics/items.html

importscrapyclassQiubaibycrawlItem(scrapy.Item):#define the fields for your item here like:

#name = scrapy.Field()

author = scrapy.Field() #作者

content = scrapy.Field() #内容

4.3 管道文件:

#-*- coding: utf-8 -*-

#Define your item pipelines here#

#Don't forget to add your pipeline to the ITEM_PIPELINES setting#See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

classQiubaibycrawlPipeline(object):def __init__(self):

self.fp=Nonedefopen_spider(self,spider):print('开始爬虫')

self.fp= open('./data.txt','w')defprocess_item(self, item, spider):#将爬虫文件提交的item写入文件进行持久化存储

self.fp.write(item['author']+':'+item['content']+'\n')returnitemdefclose_spider(self,spider):print('结束爬虫')

self.fp.close()

python网络爬虫框架内容_Python网络爬虫-Scrapy框架相关推荐

  1. python爬取新浪微博内容_python新浪微博爬虫,爬取微博和用户信息 (含源码及示例)...

    [实例简介] 这是新浪微博爬虫,采用python+selenium实现. 免费资源,希望对你有所帮助,虽然是傻瓜式爬虫,但是至少能运行.同时rar中包括源码及爬取的示例. 参考我的文章: http:/ ...

  2. python网络爬虫系列教程_Python网络爬虫系列教程连载 ----长期更新中,敬请关注!...

    感谢大家长期对Python爱好者社区的支持,后期Python爱好者社区推出Python网络爬虫系列教程.欢迎大家关注.以下系列教程大纲,欢迎大家补充.视频长期连载更新中 --------------- ...

  3. python 爬虫 学习笔记(一)Scrapy框架入门

    沉迷于通过高效算法及经典数据结构来优化程序的时候并不理解,为什么多线程可以优化爬虫运行速度?原来是程序特性所决定的:传统算法的程序复杂度主要来源于计算,但网络程序的计算时间可以忽略不计,网络程序所面临 ...

  4. python 全栈开发,Day137(爬虫系列之第4章-scrapy框架)

    python 全栈开发,Day137(爬虫系列之第4章-scrapy框架) 一.scrapy框架简介 1. 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所 ...

  5. 爬虫学习笔记(十)—— Scrapy框架(五):下载中间件、用户/IP代理池、settings文件

    一.下载中间件 下载中间件是一个用来hooks进Scrapy的request/response处理过程的框架. 它是一个轻量级的底层系统,用来全局修改scrapy的request和response. ...

  6. python网络爬虫资源库名_Python网络爬虫

    网友NO.524767 Python网络爬虫与信息提取(实例讲解) 课程体系结构: 1.Requests框架:自动爬取HTML页面与自动网络请求提交 2.robots.txt:网络爬虫排除标准 3.B ...

  7. python爬虫实践报告_Python网络爬虫从入门到实践

    本书讲解了如何使用Python编写网络爬虫,涵盖爬虫的概念.Web基础.Chrome.Charles和Packet Capture抓包.urllib.Requests请求库.lxml.Beautifu ...

  8. python网络爬虫的特点_Python网络爬虫(一)- 入门基础

    目录: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程 ...

  9. python爬虫和定位_Python网络爬虫实战,照片定位与B站弹幕!

    之前两篇已经说完了如何爬取网页以及如何解析其中的数据,那么今天我们就可以开始第一次实战了. Python资源共享群:626017123 这篇实战包含两个内容. * 利用爬虫调用Api来解析照片的拍摄位 ...

  10. python爬虫和定位_Python网络爬虫实战(三)照片定位与B站弹幕

    之前两篇已经说完了如何爬取网页以及如何解析其中的数据,那么今天我们就可以开始第一次实战了. 这篇实战包含两个内容. * 利用爬虫调用Api来解析照片的拍摄位置 * 利用爬虫爬取Bilibili视频中的 ...

最新文章

  1. (完全解决)Key already registered with the same priority: GroupSpatialSoftmax
  2. 关于正则表达式的那些个爱恨情仇
  3. 10,000 小时编程反思
  4. QT创建文件夹(QDir方式)
  5. 爬虫第四章 单线程+多任务异步协程
  6. STL模板整理 priority_queue
  7. oschina mysql limit_【MySQL】LIMIT 的用法
  8. [转]Asp.Net下导出/导入规则的Excel(.xls)文件
  9. linux系统中的i386/i686和x86_64有什么区别
  10. 汇川plc支持c语言吗,汇川PLC可编程控制器的功能特点
  11. 【oracle】函数minus
  12. 七、python基础:格式化占位符
  13. php如何让图片铺满屏幕,如何解决js获取屏幕大小并且让图片自适应的方法
  14. 2.SpringBoot学习(二)——Spring Boot ConfigurationProperties
  15. 根据url地址生成二维码,微信扫描二维码可直接打开网址
  16. fiddler监控手机请求 1
  17. MT6735处理器性能,MT6735芯片参数资料
  18. vue简单的图片相册幻灯片实例
  19. Python 提取音乐频谱并可视化,字节面试官
  20. 港大计算机系教授中科大毕业的吗,中科大回顾:那些压抑、纠结、煎熬和开心的经历...

热门文章

  1. mysql 中逆向表模型_PowerDesigner 逆向生成数据库物理模型,以 MySQL 为例
  2. Python贴吧邮箱爬虫
  3. 不知道前端课程学什么?这份完整的web前端课程大纲分享给你
  4. 抖音是怎么做出来的?| 创业故事
  5. 硬盘安装FREEBSD5.4详细步骤
  6. mysql 完整卸载教程_彻底卸载MySQL数据库教程
  7. 使用Qt学习C语言编程1
  8. 当不知轴承型号时如何寻找轴承故障频率_专家总结的齿轮箱滚动轴承故障诊断方法,值得收藏!...
  9. 小班计算机游戏教案,幼儿园小班游戏教案15篇
  10. 母亲节第二期|有哪些母亲节祝福贺卡的素材灵感来源?