scrapy是一个用来爬取一个或多个网站的数据,提取数据的应用框架。下载过程非常复杂,而且会遇到各种问题。所以写个博客来记录下。

安装好python2.7之后,就可以开始。安装scrapy前还需要安装其他的库,都放在云盘里了地址是http://pan.baidu.com/s/1hsFh836,基本都是exe文件,直接安装就可以,用的是window64位,里面有个不是exe的文件,用pip install安装即可,都安装好了之后,就可以pip install scrapy安装scrapy了。要验证某个库是否安装成功,import 库名就行,没提示错误就代表安装成功。

scrapy的教程链接http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/overview.html,是中文的官方文档(如果我没搞错的话),基本都是中文,不排除有些地方没翻译完全。里面有基本的实例,教你怎么用scrapy写爬虫,但是,提供的start_url里的url貌似被墙了,所以你跟着教程来爬不到任何东西,不过没关系,至少我们了解了一些基本的知识。除了基本实例,还有各种用到的类的详细说明。

Item类其实就是一个字典,用法和字典一毛一样。

Spider类在我看来是最重要的。Spider类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。个人觉得这些其实就是爬虫的核心。其中的参数有name,allowed_domains,start_url,parse方法其实不止这些,这些只是创建项目的时候就创建好的。

name就是爬虫的名字喽,必须是唯一的。

allowed_domains就是域名白名单,我一直不明白是什么意思,大概是限制爬虫爬取的东东吧,防止爬虫其他的不是我们想要的地方。不知道这样理解对不对

start_url是爬虫最先开始爬取的url列表

start_requests()方法返回一个可迭代对象,包含了爬取到的第一个Request。当spider启动爬取并且未制定URL时,该方法被调用。如果指定了url(start_url),该方法会调用make_requests_from_url(url)来生成一个Request对象,。如果没有指定url,该方法也会被调用。该方法的默认实现是使用 start_url 的url生成Request。我是这么理解的。可以被重写

parse方法是当response没有指定回调函数时,scrapy处理下在的response的默认方法,该方法及其他的Request回调函数必须返回一个包含 Request 及(或) Item 的可迭代的对象。

log(),closed()功能和名字一样。

CrawlSpider类继承自Spider类,提供了一个新的属性rules,也提供了要给可复写的方法

rule是一个包含一个或者多个Rule对象的集合

parse_start_url(response)当start_url请求返回,该方法被调用,分析最初的返回值并返回一个Item对象或者一个Reqeust对象或者包含二者的可迭代对象

link_extractor是一个Link Extractor对象。定义了如何冲爬取的页面提取链接。

callback从link_extractor中每获取到链接时将会调用该函数,接受一个response作为第一个参数,并返回一个Item或者Request或者包含二者的列表

cb_kwargs 包含传递给回调函数的参数(keyword argument)的字典。

follow 是一个布尔(boolean)值,指定了根据该规则从response提取的链接是否需要跟进。 如果 callback 为None, follow 默认设置为 True ,否则默认为 False 。

process_links 是一个callable或string(该spider中同名的函数将会被调用)。 从link_extractor中获取到链接列表时将会调用该函数。该方法主要用来过滤。

process_request 是一个callable或string(该spider中同名的函数将会被调用)。 该规则提取到每个request时都会调用该函数。该函数必须返回一个request或者None。 (用来过滤request)

XMLFeedSpider, CSVFeedSpider,SitemapSpider感觉不常用,先略过

scrapy学习记录的更多相关文章

  1. Scrapy学习篇(十)之下载器中间件(Downloader Middleware)

    下载器中间件是介于Scrapy的request/response处理的钩子框架,是用于全局修改Scrapy request和response的一个轻量.底层的系统. 激活Downloader Midd ...

  2. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  3. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  4. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

  5. UWP学习记录12-应用到应用的通信

    UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...

  6. UWP学习记录11-设计和UI

    UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...

  7. UWP学习记录10-设计和UI之控件和模式7

    UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...

  8. UWP学习记录9-设计和UI之控件和模式6

    UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...

  9. UWP学习记录8-设计和UI之控件和模式5

    UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日 ...

随机推荐

  1. How to read the HTML DTD

    Contents How to read the HTML DTD 1. DTD Comments 2. Parameter Entity definitions 3. Element declara ...

  2. kill 命令详解 系统信号

    kill  命令详解  系统信号 参考: 了解Linux的进程与线程 http://www.cnblogs.com/MYSQLZOUQI/p/4234005.html Linux就这个范儿 P532 ...

  3. shell 判断字符串是否为数字

    本篇文章主要介绍了"shell 判断字符串是否为数字",主要涉及到shell 判断字符串是否为数字方面的内容,对于shell 判断字符串是否为数字感兴趣的同学可以参考一下. #!/ ...

  4. [算法]A General Polygon Clipping Library

    A General Polygon Clipping Library Version 2.32    http://www.cs.man.ac.uk/~toby/alan/software/gpc.h ...

  5. 用仿ActionScript的语法来编写html5——第九篇,仿URLLoader读取文件

    第九篇,仿URLLoader读取文件 先看看最后的代码 function readFile(){ urlloader = new LURLLoader(); urlloader.addEventLis ...

  6. oracle调整表中列顺序

    有一个哥们提出一个问题: 有个表,创建时候的列顺序是a,b,c 如何使用select * 的时候,让列的显示顺序是a,c,b 而且任性地必须使用select *来查询,且不能重建表. 假设有个表tes ...

  7. Redis 存储原理

  8. PostgreSQL rule view materialized view examples

    warehouse_db=# create table tab_view(emp_id int not null,emp_name varchar(10),emp_city varchar(10)); ...

  9. Lintcode: Segment Tree Build

    The structure of Segment Tree is a binary tree which each node has two attributes start and end deno ...

  10. Google 推出的 Java 编码规范(转)

    原文地址:http://www.dahuatu.com/1225/988516.html 原文地址:http://www.dahuatu.com/1225/988516.html 原文地址:http: ...