这是自己写的第一个使用Pyspider完成数据抓取,小有收获,最近这几天一直都在折腾这个Pyspider,算是有点入门吧。能感觉出国人写的框架,有点熟悉的味道,觉得使用习惯有点接近吧,个人感觉,不喜勿喷。有问题还是得多看官方文档,对于刚刚入门的同学来说,官方文档能帮你解决很多问题。有问题时先去官方文档上找,找不到再去Google,这样应该会好一点。
下面是小米众筹产品的实例,亲测没问题,可以直接拷贝到http://demo.pyspider.org/新建一个项目进行测试。
使用Python3.X的同学可能需要修改一下代码,由于我之前搭建的环境是2.7的,后面有时间了再来进行迁移,我个人还是比较倾向于使用3.X版本的,毕竟3.X是趋势吧。官方的测试服务器的Python版本也是2.7的。好了,闲话说了很多,下面直接上代码:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2017-07-14 10:36:36
# Project: xiaomifrom pyspider.libs.base_handler import *
import urllib
import time
import jsonclass Handler(BaseHandler):#配置通用的请求属性crawl_config = {'headers' : {'Connection':'keep-alive','Accept-Encoding':'gzip, deflate, br','Accept-Language':'zh-CN,zh;q=0.8','content-type':'application/x-www-form-urlencoded','Referer':'//home.mi.com/crowdfundinglist?id=78&title=%E4%BC%97%E7%AD%B9','User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'}}@every(minutes=24 * 60)def on_start(self):#获取所有的产品详细产品地址param = 'data=%7B%22HomeList%22%3A%7B%22model%22%3A%22Homepage%22%2C%22action%22%3A%22BuildHome%22%2C%22parameters%22%3A%7B%22id%22%3A12%7D%7D%7D'self.crawl('https://home.mi.com/app/shopv3/pipe',method="GET",params=param,callback=self.index_page)@config(age=60 * 60) def index_page(self, response):#获取单个产品的详细信息for each in response.json['result']['HomeList']['data']:gid = each['gid']detailparm = "{\"detail\":{\"model\":\"Shopv2\",\"action\":\"getDetail\",\"parameters\":{\"gid\":\"%s\"}},\"comment\":{\"model\":\"Comment\",\"action\":\"getList\",\"parameters\":{\"goods_id\":\"%s\",\"orderby\":\"1\",\"pageindex\":\"0\",\"pagesize\":3}},\"activity\":{\"model\":\"Activity\",\"action\":\"getAct\",\"parameters\":{\"gid\":\"%s\"}}}" % (gid,gid,gid)detailreq = urllib.quote(detailparm)detailreq = "data=" + detailreqdetailurl = "https://home.mi.com/app/shop/pipe?gid=%s" % gid #print detailurlself.crawl(detailurl,method='POST',data=detailreq ,callback=self.detail_page)@config(priority=2)def detail_page(self, response):#转换成Json格式的字符串resultjsonstr = json.dumps(response.json)result = json.loads(resultjsonstr)['result']['detail']['data']['good']#将返回的结果保存到文件resultfile = open("/tmp/xiaomi/%s.txt" % result['gid'].encode('utf-8'),'w')resultfile.write(resultjsonstr)resultfile.close()return {"编号": result['gid'].encode('utf-8'),"名称": result['name'].encode('utf-8'),"简介": result['summary'].encode('utf-8'),"支持人数":result['saled'].encode('utf-8'),"产品单价":result['price_min'].encode('utf-8'),"开始时间":time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(float(result['ctime'].encode('utf-8')))),"当前时间":time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(float(result['ctime'].encode('utf-8'))))}

Pyspider实例之抓取小米众筹产品相关推荐

  1. Python爬取小米众筹数据

    Python爬取小米众筹数据 #爬取小米众筹 import pymongo import requests import timeclient = pymongo.MongoClient('local ...

  2. 小米众筹产品数据抓取(Python)

    刚学习Python不久,这应该是学Python以来的第一个实战,总体来说感觉还行,应为之前用Java写过一个,现在用Python写,单论这个简单的功能,Python确实要比Java轻便很多.当然肯定是 ...

  3. 应用多线程抓取小米应用商店的例子

    多线程需要用到threading模块, 通过这种方法可以创建线程: from threading import Thread t_list = [] # 创建多个线程,括号里面3表示3个线程 for ...

  4. python数据分析实例:python抓取课工厂网站数据和分析

    在线教育网站学习,是很多人利于闲余时间进行充电的一种选择.本篇文章利用python抓取在线教育网站课工场课程页面的数据,进行简要分析. 通过使用requests库对课工场课程列表页进行抓取. 通过Be ...

  5. Python学习笔记 第二部分 - 正则表达式 与 爬虫小实例(抓取豆瓣电影中评分大于等于8分的影片)...

    一.正则表达式 python正则常用的函数和方法 compile(pattern,flags=0)        对正则表达式pattern进行编译,flags是可选标识符,并返回一个regex对象 ...

  6. 第一个爬虫实例-简单抓取网页内容

    通过以上各种各样的坑,也就是完成以下2个软件的安装,和另外若干包的安装后,终于可以爬虫一个实例. 新手关于python2.7.11 与 IDE pycharm的安装于使用 python下安装easy_ ...

  7. 使用CC2531 USB Dongle 抓取小米Zigbee智能硬件数据包

    1 准备工作 硬件①: CC2531 USB Dongle 硬件②: 智能家庭礼装板 (单独购买需要现在网关绑定各种节点) 软件①:TiWsPc 软件②:SmartRF_Packet_Sniffer ...

  8. 用QXDM抓取小米6短信包,手机收到短信,但QXDM找不到lte nas emm plain ota incoming message。求问大神指点

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一 ...

  9. 数据从业者必读:抓取了一千亿个网页后我才明白,爬虫一点都不简单

    编者按:互联网上有浩瀚的数据资源,要想抓取这些数据就离不开爬虫.鉴于网上免费开源的爬虫框架多如牛毛,很多人认为爬虫定是非常简单的事情.但是如果你要定期上规模地准确抓取各种大型网站的数据却是一项艰巨的挑 ...

最新文章

  1. LLVM官方文档翻译---- LLVM原子指令与并发指引
  2. SEO中的DIV CSS样式的命名规则
  3. linq lambda 分组后排序
  4. .Net装箱拆箱编程实例
  5. python类的构造方法名称_搞懂Python的类和对象名称空间
  6. vue从入门到精通之进阶篇(一)vue-router:导航守卫
  7. java xml 递归_Java递归遍历XML所有元素
  8. CF468B Two Sets
  9. len在python_len在python
  10. 关于RESTful一些注意事项,接口开发规范
  11. java hashcode返回值_Java HashMap返回值未根据我对equals和hashcode的理解进行确认
  12. 【BZOJ3050】Seating,线段树
  13. uwsgi基础——参数
  14. [转载]手机编程与AIDE
  15. java字符串长度解答
  16. 常用的锂电池充电IC芯片
  17. c语言按一个按钮弹出窗口,实现点击按钮,弹出输入框的内容
  18. python第三方库pdf_Python使用到第三方库PyMuPDF图片与pdf相互转换
  19. Verilog进阶思想和编程练习题库
  20. 指针及其应用4——结构体指针

热门文章

  1. 物质是由物质组成的吗?
  2. MFC中CString.Format的详细用法和进制转换
  3. 第五局 阿卡丽教学局 上半场数据分析
  4. IE浏览器兼容9/10/11版本(针对老项目而言)
  5. Java HotSpot 性能引擎架构
  6. vue element 搜索
  7. Word 2007 中如何在论文正文处设置页码,以及删除空白页。
  8. photoshop中图层叠加算法
  9. [单纯形+对偶] BZOJ3118: Orz the MST
  10. 机器人也有高考?来看看你的分数