Scrapy见面第五天
这算是我第一次使用框架吧,说来羞愧。
此前用Request带上cookie实现、(略微)完好了QQ空间的爬虫(传送门),接下来想实现分布式去爬。
事实上仅仅要能实现待爬QQ队列的共享,分布式的主要问题也就攻克了。可是认为这样实现的爬虫项目有点“不正规”,所以想用Scrapy框架和Redis数据库来整顿现有爬虫。
无奈公司里也没什么人指点。全凭一人摸爬滚打,过程有点痛苦。但自信仅仅要敢啃。还是能够拿下的。不成问题。
然后就动手了。
(忽略安装过程,预计是曾经用其它模块的时候已经吐血吐够了,环境都配好了,居然直接用 pip install scrapy 就成功了)
第一步、当然是百度。看看传说中的“正规军”是什么样子的。高速了解了一下Scrapy工作机制,以及大家在使用scrapy的时候关注的点很多其它在哪里。然而看的都是似懂非懂,。然而并不重要,我仅仅须要和它碰个面即可。
第二步、搜GitHub。找代码。搜了十几个demo,高速看了一下scrapy的代码结构。
第三步、从各种平台搜索和Scrapy有关的东西。特别是大家对它的看法。主要途径:新浪微博、知乎、推酷、Google。第四步、调试、执行从GitHub上download下来的demo,大约了解scrapy详细的执行机制。
第五步、是时候静下心来啃Scrapy的官方文档了,受益良多。第六步、糗事百科作靶子,模仿demo实战练习。再功能延生。
第七步、即现在。第五天。
事实上遇到的问题还是挺多的,基本的原因是对Scrapy了解不够深入。
想要入门Scrapyeasy,可是想要单枪匹马高速入门,就非常须要看重怎么走了。
我是想着先实现简单的Scrapy爬虫。再用Redis实现分布式。在此之后再进行功能拓展,比如Cookie登录,比如爬虫数据的添加,比如异常处理、性能优化等等。整体的思路是先纵向深入,再横向逐个拓展。
计划虽是这样,但终归还是没忍住花了一天时间动手实现了一下QQ空间和新浪微博的Scrapy爬虫。自增苦恼。只是有所收获。
首先是QQ空间。我之前是用Request的session带上Cookie去打开js的请求,返回来的是js文件,里面包括我所须要的信息。
直接请求js文件的优点是数据量小。数据流通和数据处理的花销会小非常多(反正我的小本本一个小时能抓17万条说说)。
而现在。我用Scrapy带上Cookie却返回403(已带表头),我试着打开空间主页的URL。返回的是HTML文件,这非常正常,没有JS文件。但为什么打开JS的请求却报错403了呢?这个问题暂先放着。事实上空间更蛋疼的问题还没解决呢——Cookie。普通的登录(比如知乎)是发送个表单即可了,但QQ空间的表单。年轻的我没有找到(预计要一点点调试看它的加密算法了,之前的爬虫我是用phantomjs模拟浏览器获取到的)。百度和Google也没有搜到结果。甚至爬QQ空间人就非常少。大伙对它没兴趣?
QQ空间爬不成,我试一下微博。
非常明显大伙对微博的兴趣就高非常多了,已经有加密算法和构造表单的方法了。并且我在查看Cookie的时候看到新浪的Cookie有效期是六天左右(未检验)(QQ空间的Cookie有效期在几十分钟到十几个钟不等)。假设是这种话我们就算手动输入Cookie那也没什么呀。
只是微博另一个问题。JS载入。
网上的说法是构造下载中间件。详细还有待解决。
只是此时看到scrapy的那张架构图(例如以下)就第二种感觉了呀。最终对各个部分有一点认识了!只是假设用Redis实现分布式的话Pipeline和Scheduler之间是不是应该要有个数据流通呀?
感觉当前的难点很多其它的还是在右半边。获取数据。
接下来。构造中间件。
继续勘探。尽快熟悉Scrapy与分布式!
转载请注明出处,谢谢!
(原文链接:http://blog.csdn.net/bone_ace/article/details/50811004)
Scrapy见面第五天的更多相关文章
- Learning Scrapy笔记(五)- Scrapy登录网站
摘要:介绍了使用Scrapy登录简单网站的流程,不涉及验证码破解 简单登录 很多时候,你都会发现你需要爬取数据的网站都有一个登录机制,大多数情况下,都要求你输入正确的用户名和密码.现在就模拟这种情况, ...
- python3下scrapy爬虫(第五卷:初步抓取网页内容之scrapy全面应用)
现在爬取http://category.dangdang.com/pg1-cid4008149.html网址上的商品价格,名称,评价数量 先准备下下数据:商品名,商品链接,评价数量 第一步:在item ...
- Scrapy 5+1 ——五大坑附送一个小技巧
笔者最近对scrapy的学习可谓如火如荼,虽然但是,即使是一整天地学习下来也会有中间两三个小时的"无效学习",不是笔者开小差,而是掉进了深坑出不来. 在此,给各位分享一下作为一名S ...
- Learning Scrapy笔记(六)- Scrapy处理JSON API和AJAX页面
摘要:介绍了使用Scrapy处理JSON API和AJAX页面的方法 有时候,你会发现你要爬取的页面并不存在HTML源码,譬如,在浏览器打开http://localhost:9312/static/, ...
- scrapy 日志处理
Scrapy生成的调试信息非常有用,但是通常太啰嗦,你可以在Scrapy项目中的setting.py中设置日志显示等级: LOG_LEVEL = 'ERROR' 日志级别 Scrapy日志有五种等级, ...
- 使用Scrapy自带的ImagesPipeline下载图片,并对其进行分类。
ImagesPipeline是scrapy自带的类,用来处理图片(爬取时将图片下载到本地)用的. 优势: 将下载图片转换成通用的JPG和RGB格式 避免重复下载 缩略图生成 图片大小过滤 异步下载 . ...
- Spider_Man_6 の Scrapy(未完待续)
一:自我介绍 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所 ...
- Scrapy 组件的具体用法
一.Spider 用法 在 Scrapy 中,要抓取网站的链接配置.抓取逻辑.解析逻辑都是在 Spider 里完成的.Spider 的一些基础属性和基础方法: name:爬虫名字,Spider的名字定 ...
- Spider-scrapy日志处理
Scrapy生成的调试信息非常有用,但是通常太啰嗦,你可以在Scrapy项目中的setting.py中设置日志显示等级: LOG_LEVEL = 'ERROR' 日志级别 Scrapy日志有五种等级, ...
随机推荐
- The Eclipse runtime options
Version 3.6 - Last revised August 5, 2009 The Eclipse platform is highly configurable. Configuration ...
- JLink Support for the Nuvoton NUC1xx devices
http://forum.segger.com/index.php?page=Thread&threadID=1441 Friday, April 19th 2013, 7:25pm Hi M ...
- TCP通信粘包问题分析和解决(全)(转)
TCP通信粘包问题分析和解决(全) 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送 ...
- arcgis Listview
private ListView listView;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCrea ...
- js数组的使用
1.创建: var arr=Array(); 2.遍历: for(var arg in arr){ alert(arr[arg]); } 3.追加 arr1.concat(arr2) 4.元素删除 d ...
- 为11gR2 Grid Infrastructure增加新的public网络
在某些环境下,运行11.2版本的RAC数据库的服务器上,连接了多个public网络,那么就会有如下的需求: 给其他的,或者说是新的public网络增加新的VIP地址. 在新的public网络上增加SC ...
- Unity3d地图制作之模型高光
由于颇受暗黑破坏神美工的影响,最近都在研究怎么制作场景地图之类的. 那么今日讲的模型高光虽然和地图无关,但是也涉及到一些美工的知识,尤其是shader. 按照国际惯例,先贴一张图饱饱眼福. 大家可以看 ...
- 描述 Machine.Config 和 Web.Config(转载)
NET Framework 提供的配置管理包括范围广泛的设置,允许管理员管理 Web 应用程序及其环境.这些设置存储在 XML 配置文件中,其中一些控制计算机范围的设置,另一些控制应用程序特定的配置. ...
- 惠普HP compaq康柏系列 CQ40笔记本电脑拆机除尘
工具:两用螺丝刀(一字口的拆CPU,十字口的拆其它所有螺丝) 散热硅胶和CPU上的散热贴 正面照(A面) 反面照(D面) 第一步:拆掉电池,不要忘记了红圈这里的两颗螺丝.共6颗小螺丝. 第二步: ...
- JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别以及接口里default方法
使用大写字母A,B,C,D......X,Y,Z定义的,就都是泛型,把T换成A也一样,这里T只是名字上的意义而已 ? 表示不确定的java类型 T (type) 表示具体的一个java类型 K V ( ...