• 从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=[""]        
    			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

  • 相关阅读:
    Spring 注解详解01
    java 排序算法
    Java 文件拼接器
    oracle join
    Oracle 去重
    Java 笔试面试
    Oracle 笔试题02
    jvm性能查看常用命令
    关于对JMM(java内存模型)的个人理解
    RSA前端加密后端解密避免出现明文密码
  • 原文地址:https://www.cnblogs.com/learn-to-rock/p/5294100.html
Copyright © 2020-2023  润新知