下面我们来学习下Spider的具体使用:

我们已上节的百度阅读爬虫为例来进行分析:

  1 # -*- coding: utf-8 -*-
2 import scrapy
3 from scrapy.linkextractors import LinkExtractor
4 from ..items import BookItem
5
6 class BookSpider(scrapy.Spider):
7 name = 'book'
8 allowed_domains = ['yuedu.baidu.com']
9 #定义起始爬取点
10 start_urls = ['https://yuedu.baidu.com/rank/newbook?pn=0']
11
12 #提取书籍列表页面
13 def parse(self, response):
14 #提取每本书点书籍页面链接
15 le = LinkExtractor(restrict_css = 'a.al.title-link')
16 le.extract_links(response)
17 for link in le.extract_links(response):
18 yield scrapy.Request(link.url,callback = self.parse_book)
19
20 #提取下个页面的列表页面
21 url = url = response.css('div.pager a.next::attr(href)').extract_first()
22 if url:
23 url = response.urljoin(url)
24 yield scrapy.Request(url,callback = self.parse)
25
26 #解析每本书的页面
27 def parse_book(self,response):
28 sel = response.css('div.content-block')
29
30 item = BookItem()
31 item['name'] = sel.css('h1.book-title::attr(title)').extract_first()
32 item['rating'] = sel.css('div.doc-info-score span.doc-info-score-value::text') .extract_first()
33 item['authors'] = sel.css('li.doc-info-field.doc-info-author a::text').extract _first()
34 item['publisher'] = sel.css('li.doc-info-field a::text').extract_first()
35 item['price'] = sel.css('div.doc-info-price span.numeric::text').extract_first ()
36
37 yield item

  


1、继承scrap.Spider

摘自官方文档

意思如下:scrapy框架为我们提供了一个Spider基类,我们编写的spider要继承它,如上面我们编写了一个BookSpider类,而这个类是继承于scrapy.Spider的

name属性:顾名思义就是命名,如上面我们将其命名为BookSpider,这是识别Spider的唯一标志(相当于你叫什么),供后面我们执行scrapy crawl 时使用,告诉spider 使用哪个Spider 去爬取

allowed_domains属性:顾名思义就是定义爬取的域名(也就是在哪个网站开始我们的爬虫)

start_urls属性:顾名思义就是定义起始爬取点【通常被实现为一个列表】

start_requests属性:

摘自官网

我们来解读下:

上面我们声明了start_urls通常为一个列表对象,实际上对于起始爬取点的请求是由Scrapy引擎调用Spider中的start_requests提交的,通过分析源码我们知道start_requests通过调用start_urls中的每一个u'r'l来构造Request请求

这里就提供给各位小伙伴一个重新定义起始爬取点的方法,即修改start_requests方法【它需要返回一个可迭代对象(列表、生成器等)】

示例如下:

def start_requests(self):

  yield scrapy.Request('https://yuedu.baidu.com/rank/newbook?pn=20',callback = self.parse_book,headers = {User-Agent:'........'},dont_filter =True)

我们来分析下:

我们重新定义的起始爬取点为百度阅读新书榜第二页,并指定了回调函数为parse_book(如不指定会自动回调parse函数),设置了请求头字段,并更改了dont_filter为True (这里该字段默认为False 即对同一个url多次提交下载请求时,后面的请求会被去重过滤器过滤,这里我们设定了避免被过滤,进行强制下载!)--针对Request和Response对象小伙伴们我会单独列一篇文章与大家一起学习!

parse属性:顾名思义就是指定页面解析函数它的作用如下:
1、使用选择器提取页面中的信息,将数据封装后传个Scrapy引擎

2、使用选择器或者LinkExtractor提取页面中的链接,构造新的Request对象给Scrapy引擎

摘自官网

总结:

本文我们学习了spider的使用,它有四大基本属性name ; allowed_domains ; start_urls ;start_requests (其他的小伙伴们参见官网http://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/spiders.html),并学了构造起始爬取点的两种方法和整个spider的工作流程定义Spider类---命名爬虫---定义爬取的域名---定义起始爬取点--传递给页面解析函数进行解析

最后小伙伴DO YOU UNDERSTAND?明白了我们继续往下一起学习吧!

Scrapy爬虫框架第三讲(linux环境)的更多相关文章

  1. Scrapy爬虫框架第一讲(Linux环境)

    1.What is Scrapy? 答:Scrapy是一个使用python语言(基于Twistec框架)编写的开源网络爬虫框架,其结构清晰.模块之间的耦合程度低,具有较强的扩张性,能满足各种需求.(前 ...

  2. Python之Scrapy爬虫框架安装及简单使用

    题记:早已听闻python爬虫框架的大名.近些天学习了下其中的Scrapy爬虫框架,将自己理解的跟大家分享.有表述不当之处,望大神们斧正. 一.初窥Scrapy Scrapy是一个为了爬取网站数据,提 ...

  3. scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250

    scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...

  4. Python爬虫教程-31-创建 Scrapy 爬虫框架项目

    本篇是介绍在 Anaconda 环境下,创建 Scrapy 爬虫框架项目的步骤,且介绍比较详细 Python爬虫教程-31-创建 Scrapy 爬虫框架项目 首先说一下,本篇是在 Anaconda 环 ...

  5. 手把手教你如何新建scrapy爬虫框架的第一个项目(上)

    前几天给大家分享了如何在Windows下创建网络爬虫虚拟环境及如何安装Scrapy,还有Scrapy安装过程中常见的问题总结及其对应的解决方法,感兴趣的小伙伴可以戳链接进去查看.关于Scrapy的介绍 ...

  6. python3.7.1安装Scrapy爬虫框架

    python3.7.1安装Scrapy爬虫框架 环境:win7(64位), Python3.7.1(64位) 一.安装pyhthon 详见Python环境搭建:http://www.runoob.co ...

  7. 安装scrapy 爬虫框架

    安装scrapy 爬虫框架 个人根据学习需要,在Windows搭建scrapy爬虫框架,搭建过程种遇到个别问题,共享出来作为记录. 1.安装python 2.7 1.1下载 下载地址 1.2配置环境变 ...

  8. scrapy爬虫框架教程(二)-- 爬取豆瓣电影

    前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大家讲解一个完整爬虫的流程. 工具和环境 语言:python 2 ...

  9. Scrapy爬虫框架(实战篇)【Scrapy框架对接Splash抓取javaScript动态渲染页面】

    (1).前言 动态页面:HTML文档中的部分是由客户端运行JS脚本生成的,即服务器生成部分HTML文档内容,其余的再由客户端生成 静态页面:整个HTML文档是在服务器端生成的,即服务器生成好了,再发送 ...

随机推荐

  1. Python学习笔记 - 字符串和编码

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- #第一行注释是为了告诉Linux/OS X系统, #这是一个Python可执行程序,Windows系统会忽 ...

  2. 【一天一道LeetCode】#21. Merge Two Sorted Lists

    一天一道LeetCode系列 (一)题目 Merge two sorted linked lists and return it as a new list. The new list should ...

  3. Leetcode_35_Search Insert Position

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43739647 Given a sorted array a ...

  4. Linux多线程编程初探

    Linux线程介绍 进程与线程 典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情.有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程 ...

  5. 第一个Polymer应用 - (4)收尾工作

    原文链接: Step 4: Finishing touches翻译日期: 2014年7月8日翻译人员: 铁锚在本节中,会在卡片上添加收藏按钮,并可以通过切换选项卡(tabs)连接到不同的 <po ...

  6. FineReport性能调优的一些办法

    FineReport性能调优的基本思路,就要对应用服务器的内存大小进行合理的设置. 一般服务器默认的内存配置都比较小,在较大型的应用项目中,这点内存是不够的,因此需要加工使其调大. 各应用服务器的内存 ...

  7. Twemproxy分析

    twemproxy(又称为nutcracker)是一个轻量级的Redis和Memcached代理,主要用来减少对后端缓存服务器的连接数. 由Twitter开源出来的缓存服务器集群管理工具,主要用来弥补 ...

  8. 遗传算法解决TSP问题实现以及与最小生成树的对比

    摘要: 本实验采用遗传算法实现了旅行商问题的模拟求解,并在同等规模问题上用最小生成树算法做了一定的对比工作.遗传算法在计算时间和占用内存上,都远远优于最小生成树算法. 程序采用Microsoft vi ...

  9. OpenCV x64 vs2010 下打开摄像头录制视频写成avi(代码为转载)

    首先参照下面这里进行opencv x64位机器下面的配置 http://wiki.opencv.org.cn/index.php/VC_2010%E4%B8%8B%E5%AE%89%E8%A3%85O ...

  10. 云技术:负载均衡SLB

    什么是SLB? SLB是Server Load Balance(负载均衡)的简称,XX云计算有限公司提供的负载均衡服务,通过设置虚拟服务IP,将位于同一机房的多台云服务器资源虚拟成一个高性能.高可用的 ...