从scrapy使用经历说开来
关于scrapy这个Python框架,萌萌的官网这么介绍:
An open source and collaborative framework for extracting the data you need from websites.
In a fast, simple, yet extensible way.
没错,scrapy是合作开发的开源爬虫框架,快而简,可扩展。
想要用好scrapy前提要有一定的python基础和数据库知识,当然一开始我也是白手起家,简单看了几天文档,做了一个demo,然后就开工了。
对于成长中的小码哥来说边做边学是常态。
项目开始,是对于需求和问题的分析,首先你的找到路子才好,这个点上前人的经验可以用来参考,但是一定要慎重,这是整个项目的设计阶段,虽说有些东西后期还可以修正,不过,不是前期多花功夫,后期可以避免大量的时间浪费是无数先驱换来的教训。
不过该踩的坑还是要亲自踩一踩才能有所成长,就像你的初恋一样。
不可避免,我也同样遇到了很多意料之外的问题,实践百度出真知。
项目笔记一:
寻找新闻抓取来源:
1.想省时间,找到了网站的滚动新闻界面,似乎新闻在这里聚集的结构比较清晰明了,嘻嘻就从这里下手吧。
分析一下来源,发现新闻数目来的不够多,修改参数后发现网站有返回上限。
2.F12找api的线索,哈哈果然找到了,修改参数后返回来的数据量充足满意,还是结构清晰好用的json格式。
link: http://roll.news.sina.com.cn/interface/rollnews_ch_out_interface.php?col=89&spec=&type=&ch=01&k=&offset_page=0&offset_num=0&num=1
格式如下:
var jsonData = { serverSeconds : 1458315582, last_time : 1458315350, path : [{title : "全部", id : "89", cType : "col"}], count : 19464, offset_page : 0, offset_num : 0, list : [ {channel : {title : "科技",id : "96",cType : "col",url : ""},title : "大众点评回应刷信誉:零容忍 但法律不完善",url : "http://tech.sina.com.cn/i/2016-03-18/doc-ifxqnskh0974535.shtml",type : '1',pic : '',time : 1458315350}] };
注:后来的一些经验,现在再看新浪还是很有好地提供了一个jsonp的返回方法,效果就是其他网站和开发者可以更方便地跨域访问了。
嗯,好了处理下格式就能利用现成的标准库函数进行处理了。import json
项目笔记二:
书接上回,
说到json处理,有一些问题需要注意:
1.标准的json格式
2.编码——这是一个所有文字处理阶段必须有清晰了解的问题
def sina_api_process(res):
"""
处理api 的response 返回的json,包括1.json数据说明 2.会引起错误的特殊字符
"""
try:
data=res.decode("gbk").encode("utf-8")
value=data[14:-1]
value=value.replace("'s "," s ")
keylist=["serverSeconds","last_time","path","title","cType","count","offset_page","offset_num","list","channel","url","type","pic"]
#关键字+ 空格作为识别键值关键字的格式
for i in keylist:
value=value.replace(i+" ","\""+i+"\"")
value=value.replace("time :","\"time\":")
value=value.replace("id :","\"id\":")
#去除会引起错误的 特殊字符
badwords=["\b"]
for i in badwords:
value=value.replace(i,"")
value=value.replace("'", "\"")
return value
except Exception as ex :
logging.error(str(ex))
然后就是对处理后的json装载进python内建的json处理函数中
js=json.loads(JSON,strict=False) #strict=False 使得不严格按照json格式的数据也能得到处理,当然这是略显粗鲁的方法
就可以对对象进行类似于嵌套列表的迭代和处理了~~
有些晚了,到此为止,至今为止并无太多技术含量
23:22:33 2016-03-31
从scrapy使用经历说开来的更多相关文章
- 哀悼我的第一次"创业"经历
下周考完最后一科,大学四年时光基本上算是落下帷幕,剩下的就只是整整毕业设计了.如果按照正常的节奏,这个学期应该能够搞完毕业设计的2/3,但无奈还在广州的一家公司里面实习,没有多少时间弄,得拖到3月了. ...
- 【转】Duplicate Elimination in Scrapy
本文转载自:http://blog.pluskid.org/?p=381 之前介绍 Scrapy 的时候提过 Spider Trap ,实际上,就算是正常的网络拓扑,也是很复杂的相互链接,虽然我当时给 ...
- Learning Scrapy 中文版翻译 第一章
第一章:scrapy介绍 欢迎来到scrapy之旅.通过这本书,我们将帮助你从只会一点或者零基础的Scrapy初学者达到熟练使用这个强大的框架在互联网或者其他资源抓取海量的数据.在这一章节,我们将给你 ...
- 安装scrapy框架的常见问题及其解决方法
下面小编讲一下自己在windows10安装及配置Scrapy中遇到的一些坑及其解决的方法,现在总结如下,希望对大家有所帮助. 常见问题一:pip版本需要升级 如果你的pip版本比较老,可能在安装的过程 ...
- 彻底搞懂Scrapy的中间件(三)
在前面两篇文章介绍了下载器中间件的使用,这篇文章将会介绍爬虫中间件(Spider Middleware)的使用. 爬虫中间件 爬虫中间件的用法与下载器中间件非常相似,只是它们的作用对象不同.下载器中间 ...
- python爬虫scrapy项目详解(关注、持续更新)
python爬虫scrapy项目(一) 爬取目标:腾讯招聘网站(起始url:https://hr.tencent.com/position.php?keywords=&tid=0&st ...
- scrapy系列(三)——基础spider源码解析
前面两章介绍了scrapy的安装和项目的新建,那么这一章就讲讲spider吧. scrapy有个命令是runspider, 这个命令的作用就是将一个spider当做一个python文件去执行,而不用创 ...
- python 全栈开发,Day137(爬虫系列之第4章-scrapy框架)
一.scrapy框架简介 1. 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前S ...
- Python Scrapy安装
直接安装scrapy 各种报错,后来各种百度终于解决了,如下是亲身的经历. pip install scrapy 这样直接会报错. 第一步: 先安装wheel pip install wheel 第二 ...
随机推荐
- [转载] Linux启动过程详解-《别怕Linux编程》之八
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket.为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. = ...
- <代码整洁之道>、<java与模式>、<head first设计模式>读书笔记集合
一.前言 几个月前的看书笔记 ...
- 如何在TFS中恢复系统默认查询”已指派给我”的设置(TFS 2013)
故事是这样开始的,一天开发人员求助说,在浏览器中修改了系统默认的工作项查询"已指派给我"的后,发现这个查询每次都提示超时,并且没有办法恢复到初始的设置状态,因为出现超时提示以后,查 ...
- Java 三大特性——封装、继承、多态
一.封装 封装,实际就是把属于同一类事物的共性(包括属性与方法)归到一个类中,以方便使用. 概念:在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节 ...
- vue组件的配置属性
vue组件的声明语法: Vue.component('component-name',{ template:'<p>段落{{prop1}} {{prop2}}</p>', da ...
- JS中NULL和Undefined的区别
NULL是表示一个”无“的对象,转换成数值为0:undefined是一个“无”的原始值,转为数值为NaN: 当声明的变量还未被初始化时,变量的默认值为undefined: null用来表示尚未存在的对 ...
- memcache分布式 [一致性hash算法] 的php实现
最近在看一些分布式方面的文章,所以就用php实现一致性hash来练练手,以前一般用的是最原始的hash取模做分布式,当生产过程中添加或删除一台memcache都会造成数据的全部失效,一致性hash就是 ...
- js Dialog 去掉右上角的X关闭功能
用到 dialog弹出框时,不想要右上角的X 关闭功能,只是做个提示信息显示,下面是具体的去掉方法,大家可以参考下 再用到 dialog弹出框时,不想要右上角的X 关闭功能,只是做个提示信息显示. 在 ...
- 十大经典排序算法总结——JavaScrip版
首先,对于评述算法优劣术语的说明: 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面:即排序后2个相等键值的顺序和排序之前它们的顺序相同 不稳定:如果a原本在b的前面,而a=b,排序之后a ...
- spring注解scheduled实现定时任务
只想说,spring注解scheduled实现定时任务使用真的非常简单. 一.配置spring.xml文件 1.在beans加入xmlns:task="http://www.springfr ...