Scrapy爬虫框架第三讲(linux环境)
下面我们来学习下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环境)的更多相关文章
- Scrapy爬虫框架第一讲(Linux环境)
1.What is Scrapy? 答:Scrapy是一个使用python语言(基于Twistec框架)编写的开源网络爬虫框架,其结构清晰.模块之间的耦合程度低,具有较强的扩张性,能满足各种需求.(前 ...
- Python之Scrapy爬虫框架安装及简单使用
题记:早已听闻python爬虫框架的大名.近些天学习了下其中的Scrapy爬虫框架,将自己理解的跟大家分享.有表述不当之处,望大神们斧正. 一.初窥Scrapy Scrapy是一个为了爬取网站数据,提 ...
- scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...
- Python爬虫教程-31-创建 Scrapy 爬虫框架项目
本篇是介绍在 Anaconda 环境下,创建 Scrapy 爬虫框架项目的步骤,且介绍比较详细 Python爬虫教程-31-创建 Scrapy 爬虫框架项目 首先说一下,本篇是在 Anaconda 环 ...
- 手把手教你如何新建scrapy爬虫框架的第一个项目(上)
前几天给大家分享了如何在Windows下创建网络爬虫虚拟环境及如何安装Scrapy,还有Scrapy安装过程中常见的问题总结及其对应的解决方法,感兴趣的小伙伴可以戳链接进去查看.关于Scrapy的介绍 ...
- python3.7.1安装Scrapy爬虫框架
python3.7.1安装Scrapy爬虫框架 环境:win7(64位), Python3.7.1(64位) 一.安装pyhthon 详见Python环境搭建:http://www.runoob.co ...
- 安装scrapy 爬虫框架
安装scrapy 爬虫框架 个人根据学习需要,在Windows搭建scrapy爬虫框架,搭建过程种遇到个别问题,共享出来作为记录. 1.安装python 2.7 1.1下载 下载地址 1.2配置环境变 ...
- scrapy爬虫框架教程(二)-- 爬取豆瓣电影
前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大家讲解一个完整爬虫的流程. 工具和环境 语言:python 2 ...
- Scrapy爬虫框架(实战篇)【Scrapy框架对接Splash抓取javaScript动态渲染页面】
(1).前言 动态页面:HTML文档中的部分是由客户端运行JS脚本生成的,即服务器生成部分HTML文档内容,其余的再由客户端生成 静态页面:整个HTML文档是在服务器端生成的,即服务器生成好了,再发送 ...
随机推荐
- Python学习笔记 - 字符串和编码
#!/usr/bin/env python3 # -*- coding: utf-8 -*- #第一行注释是为了告诉Linux/OS X系统, #这是一个Python可执行程序,Windows系统会忽 ...
- 【一天一道LeetCode】#21. Merge Two Sorted Lists
一天一道LeetCode系列 (一)题目 Merge two sorted linked lists and return it as a new list. The new list should ...
- Leetcode_35_Search Insert Position
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43739647 Given a sorted array a ...
- Linux多线程编程初探
Linux线程介绍 进程与线程 典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情.有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程 ...
- 第一个Polymer应用 - (4)收尾工作
原文链接: Step 4: Finishing touches翻译日期: 2014年7月8日翻译人员: 铁锚在本节中,会在卡片上添加收藏按钮,并可以通过切换选项卡(tabs)连接到不同的 <po ...
- FineReport性能调优的一些办法
FineReport性能调优的基本思路,就要对应用服务器的内存大小进行合理的设置. 一般服务器默认的内存配置都比较小,在较大型的应用项目中,这点内存是不够的,因此需要加工使其调大. 各应用服务器的内存 ...
- Twemproxy分析
twemproxy(又称为nutcracker)是一个轻量级的Redis和Memcached代理,主要用来减少对后端缓存服务器的连接数. 由Twitter开源出来的缓存服务器集群管理工具,主要用来弥补 ...
- 遗传算法解决TSP问题实现以及与最小生成树的对比
摘要: 本实验采用遗传算法实现了旅行商问题的模拟求解,并在同等规模问题上用最小生成树算法做了一定的对比工作.遗传算法在计算时间和占用内存上,都远远优于最小生成树算法. 程序采用Microsoft vi ...
- OpenCV x64 vs2010 下打开摄像头录制视频写成avi(代码为转载)
首先参照下面这里进行opencv x64位机器下面的配置 http://wiki.opencv.org.cn/index.php/VC_2010%E4%B8%8B%E5%AE%89%E8%A3%85O ...
- 云技术:负载均衡SLB
什么是SLB? SLB是Server Load Balance(负载均衡)的简称,XX云计算有限公司提供的负载均衡服务,通过设置虚拟服务IP,将位于同一机房的多台云服务器资源虚拟成一个高性能.高可用的 ...