Scrapy笔记(1)- 入门篇
Scrapy笔记01- 入门篇
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提供了更多的特性来让你爬取更加容易和高效。比如:
- 内置支持扩展的CSS选择器和XPath表达式来从HTML/XML源码中选择并提取数据,还能使用正则表达式
- 提供交互式shell控制台试验CSS和XPath表达式,这个在调试你的蜘蛛程序时很有用
- 内置支持生成多种格式的订阅导出(JSON、CSV、XML)并将它们存储在多个位置(FTP、S3、本地文件系统)
- 健壮的编码支持和自动识别,用于处理外文、非标准和错误编码问题
- 可扩展,允许你使用signals 和友好的API(middlewares, extensions, 和pipelines)来编写自定义插件功能。
- 大量的内置扩展和中间件供使用:
- cookies and session handling
- HTTP features like compression, authentication, caching
- user-agent spoofing
- robots.txt
- crawl depth restriction
- and more
- 还有其他好多好东东,比如可重复利用蜘蛛来爬取Sitemaps和XML/CSV订阅, 一个跟爬取元素关联的媒体管道来 自动下载图片, 一个缓存DNS解析器等等。
Scrapy笔记(1)- 入门篇的更多相关文章
- 微信小程序笔记整理--入门篇。
7-2 微信小程序入门篇 准备篇 1.登录网址,https://mp.weixin.qq.com 注册一个微信小程序. 2.获取微信小程序appid,登录自己的小程序后台,在开发者设置中获得appid ...
- Asp.Net Core学习笔记:入门篇
Asp.Net Core 学习 基于.Net Core 2.2版本的学习笔记. 常识 像Django那样自动检查代码更新,自动重载服务器(太方便了) dotnet watch run 托管设置 设置项 ...
- Sass学习笔记之入门篇
Sass又名SCSS,是CSS预处理器之一,,它能用来清晰地.结构化地描述文件样式,有着比普通 CSS 更加强大的功能. Sass 能够提供更简洁.更优雅的语法,同时提供多种功能来创建可维护和管理的样 ...
- pytest 学习笔记一 入门篇
前言 之前做自动化测试的时候,用的测试框架为Python自带的unittest框架,随着工作的深入,发现了另外一个框架就是pytest (官方地址文档http://www.pytest.org/en/ ...
- 现代C++学习笔记之一入门篇:智能指针(C++ 11)
原始指针:通过new建立的*指针 智能指针:通过智能指针关键字(unique_ptr, shared_ptr ,weak_ptr)建立的指针 在现代 C++ 编程中,标准库包含智能指针,该指针用于确保 ...
- [慕课笔记]mongodb入门篇
一:对mongodb有一个系统的完备的了解,只有概念清楚了,才能更好的使用 二:学会mongodb数据库的搭建 首先:了解如何部署数据库的服务 搭建简单的单机服务到搭建具有冗余容错功能的复制集再到搭建 ...
- vue框架学习笔记(vue入门篇)
vue框架 - 构建用户界面的渐进式框架 - 采用自底层向上增量开发的设计 - 核心库只关注视图层 - 当与单文件组件和vue生态系统支持的库结合使用时,也完全能够为复杂的单页应用程序提供驱动 - v ...
- Scrapy笔记09- 部署
Scrapy笔记09- 部署 本篇主要介绍两种部署爬虫的方案.如果仅仅在开发调试的时候在本地部署跑起来是很容易的,不过要是生产环境,爬虫任务量大,并且持续时间长,那么还是建议使用专业的部署方法.主要是 ...
- jQuery学习笔记 - 基础知识扫盲入门篇
jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...
随机推荐
- Django初见
什么市WEB应用? 所谓的web应用就是我们基于浏览器打开的一个个网页(对应网址得到的内容) 软件开发架构 C/S架构: 客户端/服务端 B/S架构:浏览器/服务器 所有的B/S架构本质上就是C/S架 ...
- Vue.js项目中使用iconfont冲突问题解决
在开发前端项目中,字体图标变得越来越常用.一方面因为它比图片使用起来方便,可以像字体一样修改大小和颜色:另一方面是因为它可以减少请求数量,优化前端性能. iconfont的使用方法很简单,主要由三种引 ...
- asp.net core ModelState 模型状态验证扩展类
using DMS.Common.BaseResult; using Microsoft.AspNetCore.Mvc.ModelBinding; using System; using System ...
- 【转】ubuntu16.04安装Vivado 2017.4 教程
ubuntu16.04安装Vivado 2017.4 教程 2017-12-28 20:59:48 wmyan 阅读数 11794 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协 ...
- mysql性能的检查和优化方法
这个命令可以看到当前正在执行的sql语句,它会告知执行的sql.数据库名.执行的状态.来自的客户端ip.所使用的帐号.运行时间等信息 mysql在遇到严重性能问题时,一般都有这么几种可能:1.索引没有 ...
- Hash函数浅谈
Hash函数是指把一个大范围映射到一个小范围.把大范围映射到一个小范围的目的往往是为了节省空间,使得数据容易保存. 除此以外,Hash函数往往应用于查找上.所以,在考虑使用Hash函数之前,需要明白它 ...
- Gordon家族(二)
本文是 Gordon家族(一) 的续集. 16. GoLearn 介绍:Gordon博士为Go开发者提供了一系列机器学习的库,开箱即用. 地址:https://github.com/sjwhitwor ...
- 2019-11-29-C#-字典-Dictionary-的-TryGetValue-与先判断-ContainsKey-然后-Get-的性能对比
原文:2019-11-29-C#-字典-Dictionary-的-TryGetValue-与先判断-ContainsKey-然后-Get-的性能对比 title author date CreateT ...
- 如何在Mac下配置多个Java版本
使用工具:brew cask brew cask是一个用命令行管理Mac下应用的工具,提供了自动安装和卸载功能,能够自动从官网上下载并安装 最新的版本,它是基于homebrew的一个增强工具. 一. ...
- JSON.stringify & JSON.parse 简析
以前用到JSON的场景也不少,但是没有仔细的研究过,这几天趁着一个需求用到了,就整理了一下相关用法. 一. JSON.stringify() 1. 语法 JSON.stringify(value[, ...