crawlspider
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)
)
注意点:
- 用命令创建一个crawlspider模块:
scrapy genspider -t crawl <爬虫名字> <all_domain>,也可以手动创建 - CrawlSpider中不能再有以parse为名字的数据提取方法,这个方法被CrawlSpider用来实现基础url提取等功能
- 一个Rule对象接收很多参数,首先第一个是包含url规则的LinkExtractor对象,常用的还有callback(制定满足规则的url的解析函数的字符串)和follow(response中提取的链接是否需要跟进)
- 不指定callback函数的请求下,如果follow为True,满足该rule的url还会继续被请求
- 如果多个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的更多相关文章
- 爬虫学习-使用CrawlSpider
使用scrapy中的CrawlSpider类来进行爬行 一直用的是BaseSpider,回调函数的方式,有一个问题是title,date在一个页面,author,detail在另一个页面时,怎么把这些 ...
- python爬虫入门(八)Scrapy框架之CrawlSpider类
CrawlSpider类 通过下面的命令可以快速创建 CrawlSpider模板 的代码: scrapy genspider -t crawl tencent tencent.com CrawSpid ...
- 爬虫框架之Scrapy(三 CrawlSpider)
如何爬取一个网站的全站数据? 可以使用Scrapy中基于Spider的递归方式进行爬取(Request模块回调parse方法) 还有一种更高效的方法,就是基于CrawlSpider的自动爬取实现 简介 ...
- Scrapy框架-Spider和CrawlSpider的区别
目录 1.目标 2.方法1:通过Spider爬取 3. 通过CrawlSpider爬取 1.目标 http://wz.sun0769.com/index.php/question/questionTy ...
- Scrapy框架-CrawlSpider
目录 1.CrawlSpider介绍 2.CrawlSpider源代码 3. LinkExtractors:提取Response中的链接 4. Rules 5.重写Tencent爬虫 6. Spide ...
- scrapy CrawlSpider解析
CrawlSpider继承自Spider, CrawlSpider主要用于有规则的url进行爬取. 先来说说它们的设计区别: SpiderSpider 类的设计原则是只爬取 start_urls 中的 ...
- Scrapy框架之CrawlSpider
提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二:基 ...
- 爬虫系列---scrapy全栈数据爬取框架(Crawlspider)
一 简介 crawlspider 是Spider的一个子类,除了继承spider的功能特性外,还派生了自己更加强大的功能. LinkExtractors链接提取器,Rule规则解析器. 二 强大的链接 ...
- scrapy 中crawlspider 爬虫
爬取目标网站: http://www.chinanews.com/rss/rss_2.html 获取url后进入另一个页面进行数据提取 检查网页: 爬虫该页数据的逻辑: Crawlspider爬虫类: ...
随机推荐
- * CSS 视觉格式化(基本框、包含块、盒模型、水平格式化、垂直格式化、行布局、em框、内容区、行间距、行内框、行框)
前言 CSS视觉格式化这个词可能比较陌生,但说起盒模型可能就恍然大悟了.实际上,盒模型只是CSS视觉格式化的一部分.视觉格式化分为块级和行内两种处理方式.理解视觉格式化,可以确定得到的效果是应该显示的 ...
- SQLserver 数据库高版本无法还原到低版本的数据解决方法
sql server 数据库的版本只支持从上往下兼容.即高版本可以兼容低版本 .低版本不能兼容低版本.通常我们在开发时会用比较高的版本.但是部署到客户那边可能他们的数据库版本会比较低. 我们可以通过导 ...
- 关于Setup Factory 9的一些使用方法
之前使用的VS自带的InstallShield2015LimitedEdition 打包工具,但是不太灵活,打包长得也难看:后来使用Setup Factory 9 打包winform应用程序,用起来轻 ...
- Excel 2010如何打开多个独立窗口?
https://jingyan.baidu.com/article/86fae346acca7d3c49121ad4.html
- shiro执行原理
一.架构 要学习如何使用Shiro必须先从它的架构谈起,作为一款安全框架Shiro的设计相当精妙.Shiro的应用不依赖任何容器,它也可以在JavaSE下使用.但是最常用的环境还是JavaEE.下面以 ...
- 【easy】110. Balanced Binary Tree判断二叉树是否平衡
判断二叉树是否平衡 a height-balanced binary tree is defined as a binary tree in which the depth of the two su ...
- Python爬虫基础之Urllib
一.随时随地爬取一个网页下来 怎么爬取网页?对网站开发了解的都知道,浏览器访问Url向服务器发送请求,服务器响应浏览器请求并返回一堆HTML信息,其中包括html标签,css样式,js脚本等.Chro ...
- Python爬虫基础之认识爬虫
一.前言 爬虫Spider什么的,老早就听别人说过,感觉挺高大上的东西,爬网页,爬链接~~~dos黑屏的数据刷刷刷不断地往上冒,看着就爽,漂亮的校花照片,音乐网站的歌曲,笑话.段子应有尽有,全部都过来 ...
- 【原创】大叔经验分享(43)logstash设置jdbc_default_timezone后报错
logstash6.6.0-6.6.2版本使用jdbc input plugin时如果设置了jdbc_default_timezone,会报错: { 2012 rufus-scheduler inte ...
- vue2.0 事件处理常用修饰符-----------------记录,加强记忆。
1,<!-- 阻止单击事件继续传播 --> <a v-on:click.stop="doThis"></a> stop修饰符对应的是阻止冒泡的e ...