1. 手机APP数据----写在前面

继续练习pyspider的使用,最近搜索了一些这个框架的一些使用技巧,发现文档竟然挺难理解的,不过使用起来暂时没有障碍,估摸着,要在写个5篇左右关于这个框架的教程。今天教程中增加了图片的处理,你可以重点学习一下。

2. 手机APP数据----页面分析

咱要爬取的网站是 http://www.liqucn.com/rj/new/ 这个网站我看了一下,有大概20000页,每页数据是9个,数据量大概在180000左右,可以抓取下来,后面做数据分析使用,也可以练习优化数据库。

网站基本没有反爬措施,上去爬就可以,略微控制一下并发,毕竟不要给别人服务器太大的压力。

页面经过分析之后,可以看到它是基于URL进行的分页,这就简单了,我们先通过首页获取总页码,然后批量生成所有页码即可

http://www.liqucn.com/rj/new/?page=1
http://www.liqucn.com/rj/new/?page=2
http://www.liqucn.com/rj/new/?page=3
http://www.liqucn.com/rj/new/?page=4
复制代码

获取总页码的代码

class Handler(BaseHandler):crawl_config = {}    @every(minutes=24 * 60)def on_start(self):self.crawl('http://www.liqucn.com/rj/new/?page=1', callback=self.index_page)    @config(age=10 * 24 * 60 * 60)def index_page(self, response):# 获取最后一页的页码totle = int(response.doc(".current").text())for page in range(1,totle+1):self.crawl('http://www.liqucn.com/rj/new/?page={}'.format(page), callback=self.detail_page)复制代码

然后copy一段官方中文翻译,过来,时刻提醒自己

代码简单分析:def on_start(self) 方法是入口代码。当在web控制台点击run按钮时会执行此方法。self.crawl(url, callback=self.index_page)这个方法是调用API生成一个新的爬取任务,这个任务被添加到待抓取队列。
def index_page(self, response) 这个方法获取一个Response对象。 response.doc是pyquery对象的一个扩展方法。pyquery是一个类似于jQuery的对象选择器。def detail_page(self, response)返回一个结果集对象。这个结果默认会被添加到resultdb数据库(如果启动时没有指定数据库默认调用sqlite数据库)。你也可以重写on_result(self,result)方法来指定保存位置。更多知识:
@every(minutes=24*60, seconds=0) 这个设置是告诉scheduler(调度器)on_start方法每天执行一次。
@config(age=10 * 24 * 60 * 60) 这个设置告诉scheduler(调度器)这个request(请求)过期时间是10天,10天内再遇到这个请求直接忽略。这个参数也可以在self.crawl(url, age=10*24*60*60) 和 crawl_config中设置。
@config(priority=2) 这个是优先级设置。数字越大越先执行。
复制代码

分页数据已经添加到待爬取队列中去了,下面开始分析爬取到的数据,这个在detail_page函数实现

    @config(priority=2)def detail_page(self, response):docs = response.doc(".tip_blist li").items()dicts = []for item in docs:title = item(".tip_list>span>a").text()pubdate = item(".tip_list>i:eq(0)").text()info = item(".tip_list>i:eq(1)").text()# 手机类型category = info.split(":")[1]size = info.split("/")if len(size) == 2:size = size[1]else:size = "0MB"app_type = item("p").text()mobile_type = item("h3>a").text()# 保存数据# 建立图片下载渠道img_url = item(".tip_list>a>img").attr("src")# 获取文件名字filename = img_url[img_url.rindex("/")+1:]# 添加软件logo图片下载地址self.crawl(img_url,callback=self.save_img,save={"filename":filename},validate_cert=False)dicts.append({"title":title,"pubdate":pubdate,"category":category,"size":size,"app_type":app_type,"mobile_type":mobile_type})return dicts
复制代码

数据已经集中返回,我们重写on_result来保存数据到mongodb中,在编写以前,先把链接mongodb的相关内容编写完毕

import osimport pymongo
import pandas as pd
import numpy as np
import time
import jsonDATABASE_IP = '127.0.0.1'
DATABASE_PORT = 27017
DATABASE_NAME = 'sun'
client = pymongo.MongoClient(DATABASE_IP,DATABASE_PORT)
db = client.sun
db.authenticate("dba", "dba")
collection = db.liqu  # 准备插入数据复制代码

数据存储

    def on_result(self,result):if result:self.save_to_mongo(result)            def save_to_mongo(self,result):df = pd.DataFrame(result)#print(df)content = json.loads(df.T.to_json()).values()if collection.insert_many(content):print('存储到 mongondb 成功')
复制代码

获取到的数据,如下表所示。到此为止,咱已经完成大部分的工作了,最后把图片下载完善一下,就收工啦!

3. 手机APP数据----图片存储

图片下载,其实就是保存网络图片到一个地址即可

    def save_img(self,response):content = response.contentfile_name = response.save["filename"]#创建文件夹(如果不存在)if not os.path.exists(DIR_PATH):                         os.makedirs(DIR_PATH) file_path = DIR_PATH + "/" + file_namewith open(file_path,"wb" ) as f:f.write(content)
复制代码

到此为止,任务完成,保存之后,调整爬虫的抓取速度,点击run,数据跑起来~~~~

Python爬虫入门教程 29-100 手机APP数据抓取 pyspider相关推荐

  1. Python爬虫入门教程石家庄链家租房数据抓取

    1. 写在前面 这篇博客爬取了链家网的租房信息,爬取到的数据在后面的博客中可以作为一些数据分析的素材. 我们需要爬取的网址为:https://sjz.lianjia.com/zufang/ 2. 分析 ...

  2. Python爬虫入门教程 31-100 36氪(36kr)数据抓取 scrapy

    1. 36氪(36kr)数据----写在前面 今天抓取一个新闻媒体,36kr的文章内容,也是为后面的数据分析做相应的准备的,预计在12月底,爬虫大概写到50篇案例的时刻,将会迎来一个新的内容,系统的数 ...

  3. Python爬虫入门教程 22-100 CSDN学院课程数据抓取

    1. CSDN学院课程数据-写在前面 今天又要抓取一个网站了,选择恐惧症使得我不知道该拿谁下手,找来找去,算了,还是抓取CSDN学院吧,CSDN学院的网站为 https://edu.csdn.net/ ...

  4. python爬虫之app数据抓取_Python爬虫入门教程 29-100 手机APP数据抓取 pyspider

    1. 手机APP数据----写在前面 继续练习pyspider的使用,最近搜索了一些这个框架的一些使用技巧,发现文档竟然挺难理解的,不过使用起来暂时没有障碍,估摸着,要在写个5篇左右关于这个框架的教程 ...

  5. Python爬虫入门教程 3-100 美空网数据爬取 1

    1.美空网数据-简介 从今天开始,我们尝试用2篇博客的内容量,搞定一个网站叫做"美空网"网址为:http://www.moko.cc/, 这个网站我分析了一下,我们要爬取的图片在 ...

  6. Python爬虫入门教程 3-100 美空网数据爬取

    1.美空网数据-简介 从今天开始,我们尝试用2篇博客的内容量,搞定一个网站叫做"美空网"网址为:http://www.moko.cc/, 这个网站我分析了一下,我们要爬取的图片在 ...

  7. python数据抓取课程_Python爬虫入门教程 22-100 CSDN学院课程数据抓取

    1. CSDN学院课程数据-写在前面 今天又要抓取一个网站了,选择恐惧症使得我不知道该拿谁下手,找来找去,算了,还是抓取CSDN学院吧,CSDN学院的网站为 https://edu.csdn.net/ ...

  8. Python爬虫实战:手机APP数据抓取分析!谁说不能爬取app数据的?

    大多数手机APP里面返回的是json格式数据,或者一堆加密过的数据 .这里以超级课程表APP为例,使用python抓取超级课程表里用户发的话题.主要是练习python爬取app的一些方式和技巧. 1. ...

  9. 爬虫教程( 3 ) --- 手机 APP 数据抓取

    1. Fiddler 设置 这是使用 fiddler 进行手机 app 的抓包,也可以使用 Charles,burpSuite 等... 电脑安装 Fiddler, 手机 和 安装 fiddler 的 ...

  10. Python爬虫入门教程 14-100 All IT eBooks多线程爬取

    All IT eBooks多线程爬取-写在前面 对一个爬虫爱好者来说,或多或少都有这么一点点的收集癖 ~ 发现好的图片,发现好的书籍,发现各种能存放在电脑上的东西,都喜欢把它批量的爬取下来. 然后放着 ...

最新文章

  1. Spring Cloud Alibaba 统一门户:基于网关的统一用户认证方案
  2. Sql — CTE公用表表达式和With用法总结
  3. Styled Label
  4. Pool多进程的加速
  5. 《用友ERP-U8(8.72版)标准财务模拟实训》——导读
  6. 微服务架构设计基础之领域驱动设计
  7. 不花钱的pdf编辑器_真香!免费pdf处理工具,等你来拿。工作又轻松了一步
  8. Oracle 备份与恢复学习笔记(14)
  9. HDU2553 N皇后问题【DFS+回溯法】
  10. brave mysql_MYSQL常用命令
  11. 【EXCEL】 EXCEL VBA SQL UPDATE:操作必须使用一个可更新的查询
  12. 维度诅咒_维度的诅咒减去行话的诅咒
  13. 全球最最可爱的的10种著名小型犬
  14. 终极dos批处理循环命令详解
  15. Lambda表达式和Stream流
  16. 2月编程语言排行榜谁还没有看?
  17. 《Linux命令行与shell脚本编程大全》(第三版)读书笔记
  18. java常用二进制数据转换工具
  19. YzmCMS-新增短信接口
  20. iMindMap如何新建导图

热门文章

  1. Atitit mysql redis mongodb 性能指标 目录 1.1. 二、 性能比较 1 1.2. 性能极高- Redis能读的速度是110000次/s,写的速度是81000次/s 2 1
  2. Atitit 编程语言的分类 v2 目录 1.1. 基于代数划分 第一代。。。第三代。。4gl。。5gl自然语言 1 1.2. 按照编程范式分类 . 命令式语言 .函数式语言...逻辑式语言
  3. atitit. java跟php的比较..为什么大企业喜欢java 而不是php
  4. Atitit.故障排除系列---php 程序网站数据库错误排除流程
  5. paip.erlang环境搭建和脚本式escript运行halo world 在windows下attilax总结
  6. paip.提升用户体验----gcc c++ 编译速度提升by预编译头技术 .doc
  7. Rust : rust-bindgen中ffi中类型转换
  8. Julia: wsl ubuntu下安装、vscode及配置profile错误补正
  9. 阿里云智能基础产品事业部招聘高性能计算云产品研发与优化专家/高级专家
  10. 号外!德国惊现大罢工--要求每周上班28小时