Scrapy笔记01- 入门篇

  Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘, 信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取(更确切来说,网络抓取)所设计的, 也可以应用在获取API所返回的数据(比如Web Services)或者通用的网络爬虫。

  Scrapy也能帮你实现高阶的爬虫框架,比如爬取时的网站认证、内容的分析处理、重复抓取、分布式爬取等等很复杂的事。

安装scrapy

  我的测试环境是centos6.5

  升级python到最新版的2.7,下面的所有步骤都切换到root用户

  由于scrapy目前只能运行在python2上,所以先更新centos上面的python到最新的 Python 2.7.11, 具体方法请google下很多这样的教程。

先安装一些依赖软件

yum install python-devel
yum install libffi-devel
yum install openssl-devel

然后安装pyopenssl库

pip install pyopenssl

安装xlml

yum install python-lxml
yum install libxml2-devel
yum install libxslt-devel

安装service-identity

pip install service-identity

安装twisted

pip install scrapy

安装scrapy

pip install scrapy -U

测试scrapy

scrapy bench

最终成功,太不容易了!

简单示例

  创建一个python源文件,名为stackoverflow.py,内容如下:

import scrapy

class StackOverflowSpider(scrapy.Spider):
name = 'stackoverflow'
start_urls = ['http://stackoverflow.com/questions?sort=votes'] def parse(self, response):
for href in response.css('.question-summary h3 a::attr(href)'):
full_url = response.urljoin(href.extract())
yield scrapy.Request(full_url, callback=self.parse_question) def parse_question(self, response):
yield {
'title': response.css('h1 a::text').extract()[0],
'votes': response.css('.question .vote-count-post::text').extract()[0],
'body': response.css('.question .post-text').extract()[0],
'tags': response.css('.question .post-tag::text').extract(),
'link': response.url,
}

运行:

scrapy runspider stackoverflow_spider.py -o top-stackoverflow-questions.json

结果类似下面:

[{
"body": "... LONG HTML HERE ...",
"link": "http://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than-an-unsorted-array",
"tags": ["java", "c++", "performance", "optimization"],
"title": "Why is processing a sorted array faster than an unsorted array?",
"votes": ""
},
{
"body": "... LONG HTML HERE ...",
"link": "http://stackoverflow.com/questions/1260748/how-do-i-remove-a-git-submodule",
"tags": ["git", "git-submodules"],
"title": "How do I remove a Git submodule?",
"votes": ""
},
...]

  当你运行scrapy runspider somefile.py这条语句的时候,Scrapy会去寻找源文件中定义的一个spider并且交给爬虫引擎来执行它。 start_urls属性定义了开始的URL,爬虫会通过它来构建初始的请求,返回response后再调用默认的回调方法parse并传入这个response。 我们在parse回调方法中通过使用css选择器提取每个提问页面链接的href属性值,然后yield另外一个请求, 并注册parse_question回调方法,在这个请求完成后被执行。

处理流程图:

  Scrapy的一个好处是所有请求都是被调度并异步处理,就算某个请求出错也不影响其他请求继续被处理。

  我们的示例中将解析结果生成json格式,你还可以导出为其他格式(比如XML、CSV),或者是将其存储到FTP、Amazon S3上。 你还可以通过pipeline 将它们存储到数据库中去,这些数据保存的方式各种各样。

Scrapy特性一览

  你已经可以通过Scrapy从一个网站上面爬取数据并将其解析保存下来了,但是这只是Scrapy的皮毛。 Scrapy提供了更多的特性来让你爬取更加容易和高效。比如:

  1. 内置支持扩展的CSS选择器和XPath表达式来从HTML/XML源码中选择并提取数据,还能使用正则表达式
  2. 提供交互式shell控制台试验CSS和XPath表达式,这个在调试你的蜘蛛程序时很有用
  3. 内置支持生成多种格式的订阅导出(JSON、CSV、XML)并将它们存储在多个位置(FTP、S3、本地文件系统)
  4. 健壮的编码支持和自动识别,用于处理外文、非标准和错误编码问题
  5. 可扩展,允许你使用signals 和友好的API(middlewares, extensions, 和pipelines)来编写自定义插件功能。
  6. 大量的内置扩展和中间件供使用:
    • cookies and session handling
    • HTTP features like compression, authentication, caching
    • user-agent spoofing
    • robots.txt
    • crawl depth restriction
    • and more
  7. 还有其他好多好东东,比如可重复利用蜘蛛来爬取Sitemaps和XML/CSV订阅, 一个跟爬取元素关联的媒体管道来 自动下载图片, 一个缓存DNS解析器等等。

Scrapy笔记(1)- 入门篇的更多相关文章

  1. 微信小程序笔记整理--入门篇。

    7-2 微信小程序入门篇 准备篇 1.登录网址,https://mp.weixin.qq.com 注册一个微信小程序. 2.获取微信小程序appid,登录自己的小程序后台,在开发者设置中获得appid ...

  2. Asp.Net Core学习笔记:入门篇

    Asp.Net Core 学习 基于.Net Core 2.2版本的学习笔记. 常识 像Django那样自动检查代码更新,自动重载服务器(太方便了) dotnet watch run 托管设置 设置项 ...

  3. Sass学习笔记之入门篇

    Sass又名SCSS,是CSS预处理器之一,,它能用来清晰地.结构化地描述文件样式,有着比普通 CSS 更加强大的功能. Sass 能够提供更简洁.更优雅的语法,同时提供多种功能来创建可维护和管理的样 ...

  4. pytest 学习笔记一 入门篇

    前言 之前做自动化测试的时候,用的测试框架为Python自带的unittest框架,随着工作的深入,发现了另外一个框架就是pytest (官方地址文档http://www.pytest.org/en/ ...

  5. 现代C++学习笔记之一入门篇:智能指针(C++ 11)

    原始指针:通过new建立的*指针 智能指针:通过智能指针关键字(unique_ptr, shared_ptr ,weak_ptr)建立的指针 在现代 C++ 编程中,标准库包含智能指针,该指针用于确保 ...

  6. [慕课笔记]mongodb入门篇

    一:对mongodb有一个系统的完备的了解,只有概念清楚了,才能更好的使用 二:学会mongodb数据库的搭建 首先:了解如何部署数据库的服务 搭建简单的单机服务到搭建具有冗余容错功能的复制集再到搭建 ...

  7. vue框架学习笔记(vue入门篇)

    vue框架 - 构建用户界面的渐进式框架 - 采用自底层向上增量开发的设计 - 核心库只关注视图层 - 当与单文件组件和vue生态系统支持的库结合使用时,也完全能够为复杂的单页应用程序提供驱动 - v ...

  8. Scrapy笔记09- 部署

    Scrapy笔记09- 部署 本篇主要介绍两种部署爬虫的方案.如果仅仅在开发调试的时候在本地部署跑起来是很容易的,不过要是生产环境,爬虫任务量大,并且持续时间长,那么还是建议使用专业的部署方法.主要是 ...

  9. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

随机推荐

  1. SWIG 3 中文手册——5. SWIG 基础知识

    目录 5 SWIG 基础知识 5.1 运行 SWIG 5.1.1 输入格式 5.1.2 SWIG 输出 5.1.3 注释 5.1.4 C 预处理器 5.1.5 SWIG 指令 5.1.6 解析限制 5 ...

  2. ReentrantLock的实现原理及AQS和CAS

    AQS,即AbstractQueuedSynchronizer, 队列同步器,它是多线程访问共享资源的同步器框架,Java中的ReentrantLock/Semaphore/CountDownLatc ...

  3. WPF XAML的读法

    XAML 一直以为读作X-A-M-L 不过 一直都是念错了 正确念法:ZAMMEL 类似:ZeIMO [平音]

  4. WPF 精修篇 静态资源

    原文:WPF 精修篇 静态资源 在WPF中 如果设置好了一个控件样式或者矩形样式 如果Copy出一个新的 那么样式也会双份 比如 下面的矩形 我定义好了一个 Copy 以后 就出现一个新的 但是改变样 ...

  5. ASP.Net Core中设置JSON中DateTime类型的格式化(解决时间返回T格式)

    最近项目有个新同事,每个API接口里返回的时间格式中都带T如:[2019-06-06T10:59:51.1860128+08:00],其实这个主要是ASP.Net Core自带时间格式列化时间格式设置 ...

  6. c# 项目nuget不自动安装dll

    问题 创建的项目提交到服务器上,其他人下载项目后无法生成解决方案成功,无法自动生成dll,无法自动下载安装相应的插件 解决方案 删除packages文件夹即可,nuget就可以自动安装相关的dll了

  7. APS.NET MVC + EF (10)---使用AJAX

    在Web系统中,Ajax技术已经成为提高用户体验的必备技术.开发Ajax程序,涉及两方面的内容:一是客户端技术,二是服务器端技术. (1)客户端技术 核心工作是通过JavaScript向服务器发送数据 ...

  8. 在redis上实现分布式锁

    /** *在redis上实现分布式锁 */ class RedisLock { private $redisString; private $lockedNames = []; public func ...

  9. Spring事件监听机制

    前言 Spring中的事件机制其实就是设计模式中的观察者模式,主要由以下角色构成: 事件 事件监听器(监听并处理事件) 事件发布者(发布事件) 首先看一下监听器和发布者的接口定义 public int ...

  10. webuploader-异步切片上传(暂不支持断点续传)及 下载方法!C#/.NET

    十年河东,十年河西,莫欺少年穷 学无止境,精益求精 进入正题: 关于webuploader,参考网址:https://fex.baidu.com/webuploader/: 本篇博客范例下载地址:ht ...