博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scrapy官网程序执行示例
阅读量:2240 次
发布时间:2019-05-09

本文共 2264 字,大约阅读时间需要 7 分钟。

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命令后发生了什么呢?在中有介绍。

 

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.后记

之前看爬虫资料时,觉得自己可以做一个系统给每个人提供 个性化的爬虫(自行指定关键词)。在和朋友聊过后发现,原来,今日头条就是这个干的啊。哈,谁让自己不早点学习呢。

 

转载于:https://www.cnblogs.com/luo630/p/9227834.html

你可能感兴趣的文章
一文了解强化学习
查看>>
CART 分类与回归树
查看>>
seq2seq 的 keras 实现
查看>>
seq2seq 入门
查看>>
什么是 Dropout
查看>>
用 LSTM 做时间序列预测的一个小例子
查看>>
用 LSTM 来做一个分类小问题
查看>>
详解 LSTM
查看>>
按时间轴简述九大卷积神经网络
查看>>
详解循环神经网络(Recurrent Neural Network)
查看>>
为什么要用交叉验证
查看>>
用学习曲线 learning curve 来判别过拟合问题
查看>>
用验证曲线 validation curve 选择超参数
查看>>
用 Grid Search 对 SVM 进行调参
查看>>
用 Pipeline 将训练集参数重复应用到测试集
查看>>
PCA 的数学原理和可视化效果
查看>>
机器学习中常用评估指标汇总
查看>>
什么是 ROC AUC
查看>>
Bagging 简述
查看>>
详解 Stacking 的 python 实现
查看>>