• 5 个用 Python 编写非阻塞 web 爬虫的方法

    Posted by : lon.y@qq.com on 2018年5月21日

    大家在读爬虫系列的帖子时常常问我怎样写出不阻塞的爬虫,这很难,但可行。通过实现一些小策略可以让你的网页爬虫活得更久。那么今天我就将和大家讨论这方面的话题。 用户代理 你需要关心的第一件事是设置用户代理。 用户代理是用户访问的工具,并告知服务器用户正在使用哪个网络浏览器访问网站。 如果未设置用户代理,许多网站不会让你查看内容。 如果你正在使用rquests库,可以执行如下操作: headers = { 'user-agent': 'Mozilla/5.0 (

    阅读全文...

  • 分布式之消息队列复习精讲

    Posted by : lon.y@qq.com on 2018年5月21日

    引言 为什么写这篇文章? 博主有两位朋友分别是小A和小B: 小A,工作于传统软件行业(某社保局的软件外包公司),每天工作内容就是和产品聊聊需求,改改业务逻辑。再不然就是和运营聊聊天,写几个SQL,生成下报表。又或者接到客服的通知,某某功能故障了,改改数据,然后下班部署上线。每天过的都是这种生活,技术零成长。 小B,工作于某国企,虽然能接触到一些中间件技术。然而,他只会订阅/发布消息。通俗点说,就是调调API。对为什么使用这些中间件啊?如何保证高可用啊?没有

    阅读全文...

  • 终于有人把云计算、大数据和人工智能讲明白了

    Posted by : lon.y@qq.com on 2018年5月20日

    我今天要讲这三个话题,一个是云计算,一个大数据,一个人工智能,我为什么要讲这三个东西呢?因为这三个东西现在非常非常的火,它们之间好像互相有关系,一般谈云计算的时候也会提到大数据,谈人工智能的时候也会提大数据,谈人工智能的时候也会提云计算。所以说感觉他们又相辅相成不可分割,如果是非技术的人员来讲可能比较难理解说这三个之间的相互关系,所以有必要解释一下。 一、云计算最初是实现资源管理的灵活性 我们首先来说云计算,云计算最初的目标是对资源的管理,管理的主要是计算

    阅读全文...

  • 分布式之延时任务方案解析

    Posted by : lon.y@qq.com on 2018年5月20日

    引言 在开发中,往往会遇到一些关于延时任务的需求。例如 生成订单30分钟未支付,则自动取消 生成订单60秒后,给用户发短信 对上述的任务,我们给一个专业的名字来形容,那就是延时任务。那么这里就会产生一个问题,这个延时任务和定时任务的区别究竟在哪里呢?一共有如下几点区别 定时任务有明确的触发时间,延时任务没有 定时任务有执行周期,而延时任务在某事件触发后一段时间内执行,没有执行周期 定时任务一般执行的是批处理操作是多个任务,而延时任务一般是单个任务 下面,我

    阅读全文...

  • 分布式之缓存击穿

    Posted by : lon.y@qq.com on 2018年5月20日

    什么是缓存击穿 在谈论缓存击穿之前,我们先来回忆下从缓存中加载数据的逻辑,如下图所示 因此,如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查询,这样缓存就失去了意义。如果在大流量下数据库可能挂掉。这就是缓存击穿。 场景如下图所示: 我们正常人在登录首页的时候,都是根据userID来命中数据,然而黑客的目的是破坏你的系统,黑客可以随机生成一堆userID,然后将这些请求怼到你的服务器上,这些请求在缓存中不存在,就会穿过缓存,直接

    阅读全文...

  • 爬取豆瓣短评之《后来的我们》

    Posted by : lon.y@qq.com on 2018年5月18日

    《后来的我们》上映了,或许大家有点小期待吧。毕竟,影片的主题曲《我们》,早就虐哭了不少人。电影能否跟歌曲一样深入人心?怀着这样的一种心情,下面就来看一下它的影评如何吧。 1.抓数据 通过试探知道:豆瓣影评设置权限,没有登陆的话,只能够看到前面的几十条短评,并且登录的时候需要输入验证码。所以考虑使用selenium来获取数据。 登录时需要的验证码,通过保存图片,然后手动输入 所以构造两个方法 # 登录 def login(url,username,passw

    阅读全文...

  • WebAssembly 对比 JavaScript 及其使用场景

    Posted by : lon.y@qq.com on 2018年5月18日

    WebAssembly 对比 JavaScript 及其使用场景 这是 JavaScript 工作原理的第六章。 现在,我们将会剖析 WebAssembly 的工作原理,而最重要的是它和 JavaScript 在性能方面的比对:加载时间,执行速度,垃圾回收,内存使用,平台 API 访问,调试,多线程以及可移植性。 我们构建网页程序的方式正面临着改革-这只是个开始而我们对于网络应用的思考方式正在发生改变。 首先,认识下 WebAssembly 吧 WebAs

    阅读全文...

  • 分布式之数据库和缓存双写一致性方案解析

    Posted by : lon.y@qq.com on 2018年5月18日

    引言 为什么写这篇文章? 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。 但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议。目前没有一篇全面的博客,对这几种方案进行解析。于是博主战战兢兢,顶着被大家喷的风险,写了这篇文章。 文章结构 本文由以下三个部分组成 1、讲解缓存更新策略 2、对每种策略进行缺点分析

    阅读全文...

  • 如何在 Linux 中使用 find

    Posted by : lon.y@qq.com on 2018年5月18日

    在最近的一篇文章中,Lewis Cowles 介绍了 find 命令。 find 是日常工具箱中功能更强大、更灵活的命令行工具之一,因此值得花费更多的时间。 最简单的,find 跟上路径寻找一些东西。例如: find / 它将找到(并打印出)系统中的每个文件。而且由于一切都是文件,你会得到很多需要整理的输出。这可能不能帮助你找到你要找的东西。你可以改变路径参数来缩小范围,但它不会比使用 ls 命令更有帮助。所以你需要考虑你想要找的东西。 也许你想在主目录中

    阅读全文...

  • 手把手教你写网络爬虫(7):URL去重

    Posted by : lon.y@qq.com on 2018年5月15日

    本期我们来聊聊URL去重那些事儿。以前我们曾使用Python的字典来保存抓取过的URL,目的是将重复抓取的URL去除,避免多次抓取同一网页。爬虫会将待抓取的URL放在todo队列中,从抓取到的网页中提取到新的URL,在它们被放入队列之前,首先要确定这些新的URL是否被抓取过,如果之前已经抓取过了,就不再放入队列。 有别于单机系统,在分布式系统中,这些URL应该存放在公共缓存中,才能让多个爬虫实例共享,我们继续使用Redis缓存这些数据。URL既可以存储在R

    阅读全文...