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 水平垂直居中的几种实现方法

    前言 项目中经常碰到需要实现水平垂直居中的样式.下面就总结几种常用的方法 水平对齐+行高 [思路一]text-align + line-height实现单行文本水平垂直居中 <style> ...

  2. requests中自定义adapter

    # encoding:utf-8 import sslfrom requests import sessionsfrom requests import Requestfrom requests.ad ...

  3. Django 内置分页器

    先导入Django内置的分页器 在商品列表页或者购物车列表页导入 在渲染list.html导入 然后在views后台渲染方法写入 打开list页面结果

  4. Java消息队列--ActiveMq 初体验

    1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...

  5. vim配置(使用Vundle)

    1.前言 Vim的配置文件位于~/.vimrc,文件使用VimScript语法来编写. 2. vim插件管理 Vundle是一个全自动的插件管理器,让我们通过维护插件列表的方式管理插件.它为安装.更新 ...

  6. 帆软报表(finereport)安装/配置

    1.首先是安装帆软报表软件 下载地址:http://www.finereport.com/product/download           激活码注册格账号就有了 2.启动软件,新建连接数据库 点 ...

  7. Vue项目中使用webpack配置了别名,引入的时候报错

    chainWebpack(config) { config.resolve.alias .set('@', resolve('src')) .set('assets', resolve('src/as ...

  8. [转载]解决在win10中webstrom无法使用命令行(Terminal)

    转载地址:https://qiaolevip.iteye.com/blog/2217688 原因:计算机从win7更新到win10,webstorm9命令框无法输入,以为是webstorm问题和win ...

  9. svn忽略不需要同步的文件夹或文件

    如果某个文件已经提交到了svn,这个时候需要通过svn来把服务器上的改文件删除,然后再在本地,点击该文件 选择把该文件删除,recursively表示递归删除(文件下->下级文件夹->下级 ...

  10. 《剑指offer》二叉搜索树和双向链表

    本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结: