Scrapy官网程序执行示例
Windows 10家庭中文版本,Python 3.6.4,Scrapy 1.5.0,
Scrapy已经安装很久了,前面也看了不少Scrapy的资料,自己尝试使其抓取微博的数据时,居然连登录页面(首页)都进不去,后又在前几日补充学习了re、requests、urllib3、bs4.BeautifulSoup的一些知识后,今天正式开始学习Scrapy爬虫框架。希望通过学习和实践,可以开发出分布式爬虫程序,可以抓取各种网站的数据,包括微博的,包括不熟悉的暗网的。
本文介绍了运行Scrapy官网的示例的过程。
由于孤的系统安装了Python 2.7和Python 3.6,因此,在第一次运行时居然出错了。
1.在Eclipse中编写程序(有自动提示)


2.打开命令行执行程序
第一次输入的是官网的命令:scrapy runspider scrapy0.py,结果执行错误——默认使用了Python 2.7的解释器。


更改执行命令为:python3 -m scrapy runspider scrapy0.py,再次执行,成功:

显示抓取到的数据:

执行scrapy runspider命令后发生了什么呢?在官文Scrapy at a glance中有介绍。

3.在命令行中结束程序:Ctrl+C

4.其它
4.1. 源码解读
其实,在编写爬虫程序之前,首先应该分析网站的数据的,然后再根据网站的数据指定抓取规则。
在官网示例中,抓取的是https://blog.scrapinghub.com中的文章的标题,这个标题位于class为entry-title的<h2>标签中,但这个标题的文字又被一个<a>标签包含,因此,才有了parse函数中的解析语法:
response.css('h2.entry-title')
title.css('a ::text').extract_first()
因为一个页面上有多个文章引用,因此,首先用for循环打印此本页的所有标题,
然后,执行【翻页】,去新的页面找到新的标题,于是有了parse中的第二个for循环。
但孤对第二个for循环中的response.follow(...)函数了解有限,还需阅读官网,大概的功能就是 跳转到新页面——<a>标签对象,指定解析函数——还是这个parse函数。
4.2. 网页分析——重难点
其实,开发爬虫程序前,首先要确定源网站的数据格式,需要对源网站进行网页结构、数据分析等工作,而且这个工作会在网页改版后立即调整——调整会导致爬虫【短时间】失效,也可能【长时间】失效。
下面是https://blog.scrapinghub.com的分析(这个比较简单,之前看的文章都是拿知乎、微博、博客园做例子,非常“凶残”):使用了Chrome浏览器的Developer Tool(F2 或 Ctrl + Shift + J打开)


4.3. 继续改进
Scrapy首页中是在命令行执行程序,其实,可以在Eclipse中直接执行,需要写更多代码,还需dig;
Scrapy首页还提到了部署,可以试试部署到云平台或自己的服务器;
之前看资料讲,需要设定爬虫的运行周期或频率,不一定要每时每刻运行,也是可以在Scrapy中配置吧?或者要外部程序?
本示例的抓取结果是输出到命令行窗口,之前看的资料提示可以结合Mongodb、Redis将抓取的数据存储到本地,那么,这就会涉及到更多内容了,比如,重复抓取数据、抓取数据的页面/图片保存、数据量太大、制定关键字抓取等,一个一个来解决;
5.示例启动过程
5.1. 启动
INFO: Scrapy 1.5.0 started (bot: scrapybot)
INFO: Versions: lxml 4.2.1.0, ...
INFO: Enabled extensions: ...
INFO: Enabled downloader middlewares: ...
INFO: Enabled spider middlewares: ...
INFO: Enabled item pipelines: ...
INFO: Spider opened
INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
DEBUG: Crawled (200) <GET https://blog.scrapinghub.com> (referer: None)
...数据来了...
5.2. 结束
INFO: Dumping Scrapy stats:
{
...
'finish_reason': 'shutdown',
'finish_time': datetime.datetime(2018, 6, 26, 1, 13, 42, 25259),
'request_depth_max': 4,
...
'start_time': datetime.datetime(2018, 6, 26, 1, 13, 36, 126224)}
INFO: Spider closed (shutdown)
6.后记
之前看爬虫资料时,觉得自己可以做一个系统给每个人提供 个性化的爬虫(自行指定关键词)。在和朋友聊过后发现,原来,今日头条就是这个干的啊。哈,谁让自己不早点学习呢。
Scrapy官网程序执行示例的更多相关文章
- Threejs 官网 - 怎样执行本地的东西(How to run things locally)
Threejs 官网 - 怎样执行本地的东西(How to run things locally) 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循&qu ...
- KEIL建立新唐MCU的工程时,移植官网程序报错变量未定义问题解决方法
最近在使用新唐的MCU,新唐的MCU使用还算方便,你安装好KEIL之后再安装 Nu-Link_Keil_Driver_V3.00.6909 驱动即可建立新唐的MCU工程,注意的是因为新唐MCU是C51 ...
- [微软官网] SQLSERVER 执行页面还原
执行页面还原 https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms175168(v=sql.105) ...
- 贝叶斯、朴素贝叶斯及调用spark官网 mllib NavieBayes示例
贝叶斯法则 机器学习的任务:在给定训练数据A时,确定假设空间B中的最佳假设. 最佳假设:一种方法是把它定义为在给定数据A以及B中不同假设的先验概率的有关知识下的最可能假设 贝叶斯理论提供了 ...
- Microsoft Power BI Desktop概念学习系列之Microsoft Power BI Desktop的官网自带示例数据(图文详解)
不多说,直接上干货! https://docs.microsoft.com/zh-cn/power-bi/sample-datasets 后续的博文系列,将进行深入的剖析和分享. 欢迎大家,加入我的微 ...
- APOC官网触发器示例执行后Web页面一直转圈
apoc使用触发器:如apoc官网指导 CREATE (d:Person {name:'Daniel'}) CREATE (l:Person {name:'Mary'}) CREATE (t:Pers ...
- [踩过的坑]Elasticsearch.Net 官网示例的坑
经过昨天的ElasticSearch 安装,服务以及可以启动了,接下来就可以开发了,找到了官网提供的API以及示例,Es 官方提供的.net 客户端有两个版本一个低级版本: [Elasticsearc ...
- docker swarm(当前官网示例)
介绍 Docker Swarm 是 Docker 公司推出的官方容器集群平台,基于 Go 语言实现 作为容器集群管理器,Swarm 最大的优势之一就是 100% 支持标准的 Docker API.各种 ...
- 【重点突破】—— UniApp 微信小程序开发官网学习Two
一.使用Vue.js注意事项 Vue.js在uni-app中使用的差异: 新增:uni-app除了支持Vue实例的生命周期,还支持应用启动.页面显示等生命周期 受限:发布到H5时支持所有vue的语法, ...
随机推荐
- 洛谷 P2731 骑马修栅栏 Riding the Fences 解题报告
P2731 骑马修栅栏 Riding the Fences 题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样 ...
- java之初学线程
线程 学习线程相关的笔记,前面写过关于很多线程的使用,有兴趣的可以去了解下 线程 概念理解 并发 : 指两个或多个事件在同一个时间段内发生(交替执行). 并行 : 指两个或多个事件在同一时刻发生(同时 ...
- Android Studio 使用VCS版本控制
1.SVN的配置: 如果项目使用的是SVN配置,那么除了乌龟SVN GUI工具外,你还得下载Subversion, 因为AS要用其中的xx.exe命令行执行程序, 下载地址:https://www.v ...
- 解题:POI 2006 Periods of Words
题面 洛谷翻译有毒系列 正常人能看懂的题面:若$S$可以通过前缀$s$重复若干次(可重叠)来表示($s!=S$),则称$s$是$S$的一个循环串.求一个字符串所有前缀(包括本身)的最长循环串的长度之和 ...
- Git1:Git简介
目录 什么是版本控制系统 集中式版本控制系统 分布式版本控制系统 Git起源 Git特性 什么是版本控制系统 版本控制系统是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.版本控制 ...
- Java DataSource
ojdbc的jar包 在使用连接oracle数据库的时候尽量使用服务端E:\app\80953\product\11.2.0\dbhome_1\jdbc\lib下的jar包,否则可能会出错! 在JDK ...
- 2017年Java面试题整理
原文出处:CSDN邓帅 面试是我们每个人都要经历的事情,大部分人且不止一次,这里给大家总结最新的2016年面试题,让大家在找工作时候能够事半功倍. 1.Switch能否用string做参数? a.在 ...
- Hadoop基础原理
Hadoop基础原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 业内有这么一句话说:云计算可能改变了整个传统IT产业的基础架构,而大数据处理,尤其像Hadoop组件这样的技术出 ...
- 微信小程序开发(五)开发框架MINA
微信团队为小程序提供的框架命名为MINA应用框架.MINA框架通过封装微信客户端提供的文件系统.网络通信.任务管理.数据安全等基础功能,对上层提供一整套JavaScript API,让开发者能够非常方 ...
- 【转】 jquery easyui Tab 引入页面的问题
原地址:http://blog.csdn.net/superdog007/article/details/8225518 jQuery Easyui 的tabs插件有两种方式加载某个tab(标签页)上 ...