Scrapy中CrawSpider

回头看:

之前的代码中,我们有很大一部分时间在寻找下一页的url地址或者是内容的url地址或者是内容的url地址上面,这个过程能更简单一些么?

思路:

1. 从response中提取所有的a标签对应的url地址
2. 自动的构造自己requests请求,发送给引擎

上面的功能可以做的更好:

满足某个条件的url地址,我们才发送给引擎,同时能够指定callback函数

需求:爬取csdn上面所有的博客专家及其文章

url地址:http://blog.csdn.net/experts.html

生产crawlspider的命令:

scrapy genspider -t crawl csdn 'csdn.cn'
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule class CsdnspiderSpider(CrawlSpider): # 继承自spiders的crawspider类
name = 'csdnspider'
allowed_domains = ['blog.csdn.net']
start_urls = ['http://blog.csdn.net/peoplelist.html?channelid=0&page=1'] # 第一次请求的url,如果对这个url有特殊的需求,可以定义一个parse_start_url函数专门处理所有对应的响应 rules = (
Rule(LinkExtractor(allow=r"http://blog.csdn.net/\w+$"), fllow=True), # 能够找到所有作者的博客地址并且请求,$符号加上表示已\w结尾,否则会匹配上\w+'/abc/def'等内容
Rule(LinkExtractor(allow=r"peoplelist.html?channelid=\d+&page=\d+$), follow=True), #找到所有的翻页地址并且请求,$符合同理
Rule(LinkExtractor(allow=r'/article/details/\d+$'), callback="parse_article", follow=True), # 找到所有的文章的url地址,并且请求,调用parase_article函数处理response
Rule(LinkExtractor(allow=r'/article/list/\d+$'), follow=True)
)

注意点:

  1. 用命令创建一个crawlspider模块:scrapy genspider -t crawl <爬虫名字> <all_domain>,也可以手动创建
  2. CrawlSpider中不能再有以parse为名字的数据提取方法,这个方法被CrawlSpider用来实现基础url提取等功能
  3. 一个Rule对象接收很多参数,首先第一个是包含url规则的LinkExtractor对象,常用的还有callback(制定满足规则的url的解析函数的字符串)和follow(response中提取的链接是否需要跟进)
  4. 不指定callback函数的请求下,如果follow为True,满足该rule的url还会继续被请求
  5. 如果多个Rule都满足某一个url,会从rules中选择第一个满足的进行操作

CrawlSpider补充(了解)

LinkExtractor更多常见参数:

allow:满足括号中“正则表达式”的URL会被提取,如果为空,则全部匹配。
deny:满足括号中“正则表达式”的URL一定不提取(优先级高于allow)
allow_domains:会被提取的链接的domains。
deny_domains:一定不会被提取链接的domains。
restrict_xpaths:使用xpath表达式,和allow共同作用过滤链接,级xpath满足范围内的url地址会被提取 spiders.Rule常见参数:
link_extractor:是一个LinkExtractor对象,用于定义需要提取的链接。
callback:从linkExtractor中每获取链接时,参数所指定的值作为回调函数。
follow:是一个布尔(boolean)值,指定了根据该规则从response提取的链接是否需要跟进。如果callback为None,follow默认设置为True,否则默认为False。
process_links:指定该spider中哪个的函数将会被调用,从link_extractor中获取到链接列表时将会调用该函数,该方法主要用来过滤url。
process_request:指定该spider中哪个的函数将会被调用,该规则提取每个request时都会调用该函数,用来过滤request

crawlspider的更多相关文章

  1. 爬虫学习-使用CrawlSpider

    使用scrapy中的CrawlSpider类来进行爬行 一直用的是BaseSpider,回调函数的方式,有一个问题是title,date在一个页面,author,detail在另一个页面时,怎么把这些 ...

  2. python爬虫入门(八)Scrapy框架之CrawlSpider类

    CrawlSpider类 通过下面的命令可以快速创建 CrawlSpider模板 的代码: scrapy genspider -t crawl tencent tencent.com CrawSpid ...

  3. 爬虫框架之Scrapy(三 CrawlSpider)

    如何爬取一个网站的全站数据? 可以使用Scrapy中基于Spider的递归方式进行爬取(Request模块回调parse方法) 还有一种更高效的方法,就是基于CrawlSpider的自动爬取实现 简介 ...

  4. Scrapy框架-Spider和CrawlSpider的区别

    目录 1.目标 2.方法1:通过Spider爬取 3. 通过CrawlSpider爬取 1.目标 http://wz.sun0769.com/index.php/question/questionTy ...

  5. Scrapy框架-CrawlSpider

    目录 1.CrawlSpider介绍 2.CrawlSpider源代码 3. LinkExtractors:提取Response中的链接 4. Rules 5.重写Tencent爬虫 6. Spide ...

  6. scrapy CrawlSpider解析

    CrawlSpider继承自Spider, CrawlSpider主要用于有规则的url进行爬取. 先来说说它们的设计区别: SpiderSpider 类的设计原则是只爬取 start_urls 中的 ...

  7. Scrapy框架之CrawlSpider

    提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二:基 ...

  8. 爬虫系列---scrapy全栈数据爬取框架(Crawlspider)

    一 简介 crawlspider 是Spider的一个子类,除了继承spider的功能特性外,还派生了自己更加强大的功能. LinkExtractors链接提取器,Rule规则解析器. 二 强大的链接 ...

  9. scrapy 中crawlspider 爬虫

    爬取目标网站: http://www.chinanews.com/rss/rss_2.html 获取url后进入另一个页面进行数据提取 检查网页: 爬虫该页数据的逻辑: Crawlspider爬虫类: ...

随机推荐

  1. * CSS 视觉格式化(基本框、包含块、盒模型、水平格式化、垂直格式化、行布局、em框、内容区、行间距、行内框、行框)

    前言 CSS视觉格式化这个词可能比较陌生,但说起盒模型可能就恍然大悟了.实际上,盒模型只是CSS视觉格式化的一部分.视觉格式化分为块级和行内两种处理方式.理解视觉格式化,可以确定得到的效果是应该显示的 ...

  2. SQLserver 数据库高版本无法还原到低版本的数据解决方法

    sql server 数据库的版本只支持从上往下兼容.即高版本可以兼容低版本 .低版本不能兼容低版本.通常我们在开发时会用比较高的版本.但是部署到客户那边可能他们的数据库版本会比较低. 我们可以通过导 ...

  3. 关于Setup Factory 9的一些使用方法

    之前使用的VS自带的InstallShield2015LimitedEdition 打包工具,但是不太灵活,打包长得也难看:后来使用Setup Factory 9 打包winform应用程序,用起来轻 ...

  4. Excel 2010如何打开多个独立窗口?

    https://jingyan.baidu.com/article/86fae346acca7d3c49121ad4.html

  5. shiro执行原理

    一.架构 要学习如何使用Shiro必须先从它的架构谈起,作为一款安全框架Shiro的设计相当精妙.Shiro的应用不依赖任何容器,它也可以在JavaSE下使用.但是最常用的环境还是JavaEE.下面以 ...

  6. 【easy】110. Balanced Binary Tree判断二叉树是否平衡

    判断二叉树是否平衡 a height-balanced binary tree is defined as a binary tree in which the depth of the two su ...

  7. Python爬虫基础之Urllib

    一.随时随地爬取一个网页下来 怎么爬取网页?对网站开发了解的都知道,浏览器访问Url向服务器发送请求,服务器响应浏览器请求并返回一堆HTML信息,其中包括html标签,css样式,js脚本等.Chro ...

  8. Python爬虫基础之认识爬虫

    一.前言 爬虫Spider什么的,老早就听别人说过,感觉挺高大上的东西,爬网页,爬链接~~~dos黑屏的数据刷刷刷不断地往上冒,看着就爽,漂亮的校花照片,音乐网站的歌曲,笑话.段子应有尽有,全部都过来 ...

  9. 【原创】大叔经验分享(43)logstash设置jdbc_default_timezone后报错

    logstash6.6.0-6.6.2版本使用jdbc input plugin时如果设置了jdbc_default_timezone,会报错: { 2012 rufus-scheduler inte ...

  10. vue2.0 事件处理常用修饰符-----------------记录,加强记忆。

    1,<!-- 阻止单击事件继续传播 --> <a v-on:click.stop="doThis"></a> stop修饰符对应的是阻止冒泡的e ...