Scrapy爬虫抓取Beike网数据,Grafana分析数据

项目托管Github

先看一组图,结合Grafana分析武汉房价数据

武汉月均价走势图,可以看到房价高点在2018年,然后2019开始回落。(意味着什么?)

从曲线密集度可以看到成交还是比较频繁的。贝壳网武汉二手房成交数据共有56543条(截止2020-6-21),爬虫获取了共计56153条数据(缺少部分为前期部分维度筛选不全导致以及新成交的部分房源没有及时计入)。及时爬取的话需要发布到服务器,定时爬取指定页数。

此种图叫HeatMap图,可以分析一个区间内多层次的信息。从颜色可以看出成交频次,白色方块是最热,可以得知成交频次最高的时间段。(意味着什么?)


全国一线城市北京和深圳,过去10年月均价曲线图一路上涨

项目涉及scrapy的知识点:

1.爬虫模拟浏览器行为

2.多任务同时进行

3.ip动态获取,入库及使用

4.基本的xpath使用及setting.py中各参数含义(参考scrapy官网)

5.Mysql数据库批量增删读写

互联网是信息的海洋。每次开始一个新的知识框架的学习时,你会发现百度上到处都有这个关键字的信息,怎么办?在多年自学的经验积累上谈谈自己的经验,也是一次回顾总结。
任何IT方面的技术点都会有官方文档,它最详尽最权威,比如Android,Python,涛思时序数据库,高德地图,基于Python的scrapy框架等等。以scrapy官方文档和Android官方文档为例:

目录清晰,知识点也基本都能搜索,但同样,官方文档也是汪洋大海,如何快速上手呢?如果有官方demo,当然是跟着官方demo(示例代码)学习一遍。如果没有,此时百度相关demo就是最好的方法了。
问题来了,百度来的都是碎片化怎么办。那就得从知名的IT社区和博客找,然后博文中说的不清楚的地方(比如原理,参数设置)就借助官方文档来查看释义。毕竟官方文档最权威,一般而言也最详尽。

下面看下是如何”拼凑“我的爬虫demo。

基本的Demo有了之后就需要开始深入解决问题了,首当其冲的就是由于爬取太快导致的ip暂时性无法访问(还好贝壳网的反爬虫机制没有一上来就给你上黑名单),如何和反爬虫斗智斗勇。我罗列一下自己循序渐进解决这个问题的过程。

1.爬虫模拟浏览器行为

middlewares.py中获取setting.py中的USER_AGENT_LIST
    def process_request(self, request, spider):# Called for each request that goes through the downloader# middleware.# Must either:# - return None: continue processing this request# - or return a Response object# - or return a Request object# - or raise IgnoreRequest: process_exception() methods of#   installed downloader middleware will be calleduser_agent = random.choice(USER_AGENT_LIST)if user_agent:request.headers.setdefault('User-Agent', user_agent)# logging.info(f"User-Agent:{user_agent}")return None

2.多任务同时进行

模拟浏览器访问,可以一定程度解决IP封锁问题,但是我需要同时爬取多个城市的数据,一个爬虫进程已经不够了,自然想到如何实现多任务爬取。参考代码commands/crawlall.py:
from scrapy.commands import ScrapyCommandclass Command(ScrapyCommand):requires_project = Truedef syntax(self):return '[options]'def short_desc(self):return 'Runs all of the spiders'def run(self, args, opts):spider_list = self.crawler_process.spiders.list()for name in spider_list:self.crawler_process.crawl(name, **opts.__dict__)self.crawler_process.start()

同时在setting.py中设置

# many task run on the same time
COMMANDS_MODULE = 'mingyan.commands'

3.ip动态获取,入库及使用

然而解决ip封锁的根本方式是使用动态ip,一开始是通过爬取网上免费的ip池,结果发现有效的ip少之又少,要么时效太短,要么根本无法使用。在mingyan/tools/crawl_xici_ip.py中的get_random_ip_from_mysql()方法是读取存入数据库中的免费共享ip,get_ip_from_xun()方法是自费购买的讯代理ip。花钱的肯定比免费的好用,使用哪家代理知乎上有推介。
使用动态代理ip的话,必须开启中间件MingyanSpiderMiddleware,和MingyanDownloaderMiddleware中间件一样都在middlewares.py文件中,后面的数字是优先级。
# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None,'mingyan.middlewares.MingyanDownloaderMiddleware': 543,'mingyan.middlewares.MingyanSpiderMiddleware': 543,
}

在process_request中拦截ip:

class MingyanSpiderMiddleware:@classmethoddef from_crawler(cls, crawler):# This method is used by Scrapy to create your spiders.s = cls()crawler.signals.connect(s.spider_opened,      signal=signals.spider_opened)return sdef process_request(self, request, spider):# ip = random.choice(self.ip)get_ip = GetIP()# ip = get_ip.get_random_ip_from_mysql()ip = get_ip.get_ip_from_xun()logging.info("this is request ip:" + str(ip))auth = get_ip.get_auth()# encoded_user_pass = base64.encodestring(auth)request.headers['Proxy-Authorization'] = authrequest.meta['proxy'] = ip

关于”中间件Middleware“概念,是理解Scrapy原理的重要一环,详情去官网Spider Middleware了解吧。

4.基本的xpath使用及setting.py中各参数含义(参考scrapy官网)

待续

5.Mysql数据库批量增删读写

待续
-----------------------------------------------------

项目部署阿里云服务器,定时执行爬虫如何,分析并展示数据相关

1.grafana;

2.Linux相关:dnf和yum区分,进程查看,任务执行时间查看,端口占用等等

3.如何部署centos

4.如何定时执行爬虫(crontab)

5.如何后台执行python爬虫(nohup)

以上五点又相当于新知识点了,此时继续重复上面学习方式。(遇到问题如何利用百度和Google?)(举例)

待续

哪些知识点、难点、踩坑罗列下。

  • 如何查看shell执行情况;
  • 后台nohup命令执行中dev/null重定向是什么意思;
  • 待续

谈谈如何快速掌握一般性的IT知识点相关推荐

  1. vue中集合取第一个_快速学习Vue框架(知识点集合)

    学习Vue的小伙伴速度看过来,快速学习Vue框架知识点集合贴来啦.建议收藏,尤其基础并不是很扎实的同学,本篇集合贴就是你日后工作的参考手册. 基础知识: ·vue的生命周期:beforeCreate/ ...

  2. java发送get请求_如何快速掌握Java技术 Tomcat知识点有哪些

    如何快速掌握Java技术?Tomcat知识点概述有哪些?每一个对JavaWeb有所了解的人,都知道Tomcat是干什么用的!对,它是一个Servlet和JSP容器.然而,即使看过.使用过Tomcat, ...

  3. 历经两个月的秋招,结束了,谈谈春秋招中一些重要的知识点吧(本科+后台+腾讯)

    历经两个月的秋招总算是结束了,从七月份开始复习秋招相关知识,到八月多开始笔试.面试,到九月下旬的秋招结束,在笔试面试的这两个月里,还是挺累的.这篇文章就说说秋招这段时间的收获以及给对于明年要参加秋招的 ...

  4. Kubernetes学习总结(17)—— Kubernetes 快速入门需要掌握的知识点总结

    一.Docker Docker 是基于操作系统的沙盒技术,使得用户更简单和完整的去打包自己的应用.docker 底层是基于 Linux 的操作系统级别的虚拟化技术 LXC 实现:LXC 是通过 CGr ...

  5. 用我的亲身经历来谈谈如何快速学习编程

    老实说,学习编程的确不是件容易的事,需要你有一定文化基础.足够的逻辑思维和持续学习能力.因此,你如果是个不爱思考,无法静下心来打持久战的人,那还是洗洗睡吧.如果以上条件你都具备了,那么恭喜你,你可以考 ...

  6. android获取屏幕ppi,快速掌握Android屏幕的知识点

    一.首先来介绍下关于PX.PT.PPI.DPI.DP的知识 术语 说明 PX (pixel),像素,屏幕上显示数据的最基本的点 PT (point), 点1pt=1/72英寸 PPI (pixel p ...

  7. Java虚拟机知识点快速复习手册(上)

    前言 本文快速回顾了常考的的知识点,用作面试复习,事半功倍. 上篇主要内容为:虚拟机数据区域,垃圾回收 下篇主要内容为:类加载机制 面试知识点复习手册 全复习手册文章导航 Csdn全复习手册文章导航: ...

  8. 计算机网络基础知识点快速复习手册

    前言 本文快速回顾了计算机网络书本中常考的的知识点,用作面试复习,事半功倍. 主要内容有:计算机网络体系结构,TCP与UDP,UDP/TCP实现DEMO代码 面试知识点复习手册 全复习手册文章导航 全 ...

  9. Java并发知识点快速复习手册(下)

    前言 本文快速回顾了常考的的知识点,用作面试复习,事半功倍. 面试知识点复习手册 已发布知识点复习手册 Java基础知识点面试手册 快速梳理23种常用的设计模式 Redis基础知识点面试手册 Java ...

最新文章

  1. 动软代码生成V2.74模版简介
  2. python定义一个圆_Python-矩形和圆形
  3. Hibernate Synchronizer3——一个和hibernate Tool类似的小插件之使用方法
  4. php7垃圾回收机制l_PHP7 垃圾回收机制(GC)解析
  5. SpokenEnglish01_ When's it due?
  6. 目录代码php_php获取某个目录大小的代码
  7. Android中Parcelable与Serializable接口用法
  8. NAS远程共享存储NFS
  9. winform使用字体图标
  10. eclipse运行代码后变为红色和绿色
  11. 谷歌浏览器下面的任务栏不见了
  12. 帝国cms html广告,帝国cms加入JS广告代码不显示的解决办法
  13. Unity内置Shader解读3——Decal
  14. 下列有关预防计算机病毒的做法或想法,Windows7试题
  15. 对tensorflow.constant()的理解
  16. ResNet、ResNeXt网络详解及复现
  17. alibab仓库 idea_有一说一,这些 IDEA 插件你可能真没用过
  18. 全国计算机等级考试二级 MySQL 数据库程序设计考试大纲(2022年版)
  19. 机器人genghis_家用机器人的未来
  20. 知到网课艺术中国真题题库分享(含答案)

热门文章

  1. React源码解毒 - 检测开发者是否错误的使用了props属性
  2. macbook更新windows11
  3. 2020 杭电多校5 1007、1008、1011
  4. 【交易架构day4】京东到家交易系统的演进之路
  5. HDFS集群管理与运维+distcp工具的使用
  6. 【svn】svn的Replacing来历及解决办法
  7. 用c语言switch写运费的,超级新手,用switch写了个计算器程序,求指导
  8. 在vue3中使用markdown编辑器
  9. 【转】DICOM医学图像处理:浅析SWF、MWL、SPS、MPPS
  10. SpringMVC使用websocke