scrapy学习记录
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学习记录的更多相关文章
- Scrapy学习篇(十)之下载器中间件(Downloader Middleware)
下载器中间件是介于Scrapy的request/response处理的钩子框架,是用于全局修改Scrapy request和response的一个轻量.底层的系统. 激活Downloader Midd ...
- Quartz 学习记录1
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
- Java 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
- Apache Shiro 学习记录4
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
- UWP学习记录12-应用到应用的通信
UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...
- UWP学习记录11-设计和UI
UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...
- UWP学习记录10-设计和UI之控件和模式7
UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...
- UWP学习记录9-设计和UI之控件和模式6
UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...
- UWP学习记录8-设计和UI之控件和模式5
UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日 ...
随机推荐
- iostart命令
Linux系统中的 iostat命令可以对系统的磁盘IO和CPU使用情况进行监控.iostat属于sysstat软件包,可以用yum -y install sysstat 直接安装. 1.基本使用:i ...
- 复制中的NOT FOR REPLICATION
错误#1 10:51 2012-9-4sp_MSget_repl_commands 重复键插入解答#1 修改distribution库下sp_MSget_repl_commands 存储过程decla ...
- 手机大数据_SQL映射对象_动软_代码模板_Models
<#@ template language="c#" HostSpecific="True" #> <#@ output extension= ...
- Megacli查看raid磁盘信息
准备: 新版本的 MegaCli-1.01.24-0.i386.rpm (下载地址:http://www.lsi.com/downloads/Public/MegaRAID%20Common%20Fi ...
- ajax get和post请求 后端接收并返回数据
get请求$(function(){ //alert("23"); var x = "#page"; var y = "${ctx!}/static/ ...
- 解决plsql工具不能用中文字进行模糊匹配
今天碰到了 select * from table1 t where t.name like '模块a' 查不出数据 而select * from table1 t where t.name like ...
- 编写简单的Mapreduce程序并部署在Hadoop2.2.0上运行
今天主要来说说怎么在Hadoop2.2.0分布式上面运行写好的 Mapreduce 程序. 可以在eclipse写好程序,export或用fatjar打包成jar文件. 先给出这个程序所依赖的Mave ...
- javax.xml.ws.webserviceexception class do not have a property of the name
我是用wsimport生成webservice 的客户端,放到工程里,调用,出现这个异常, 后来发现,是没有把package-info.java这个文件一起放到包里的缘故 解决: 连同package- ...
- iOS 顺传
ios 顺传一层的话,直接用属性 改变里面的值 顺传穿两到三层的话 使用KVO // 设置item - (void)setItem:(UITabBarItem *)item { _item = ite ...
- js拖拽换位置,使用数组方法
之前一直需要一个拖拽效果,网上找了些感觉不是不好用,就是写的有些地方让人不太满意,下面贡献一个自己写的.亲测可用,拖动后可互换位置!(带有注释) 方法/步骤 CSS代码部分 <style> ...