呓语 | 杨英明的个人博客

专注于c++、Python,欢迎交流

By

[顶] 如何写一个简单的分布式知乎爬虫?

很早就有采集知乎用户数据的想法,要实现这个想法,需要写一个网络爬虫(Web Spider)。因为在学习 python,正好 python 写爬虫也是极好的选择,所以写了一个基于 python 的网络爬虫。

几个月前写了爬虫的初版,后来因为一些原因,暂时搁置了下来。最近重新拾起这个想法,首先优化了代码的结构,然后在学弟的提醒下,从多线程改成了多进程,一台机器上运行一个爬虫程序,会启动几百个子进程加速抓取。

但是一台机器的性能是有极限的,所以后来我使用 mongodb 和 redis 搭建了一个主从结构的分布式爬取系统,来进一步加快抓取的速度。

然后我就去好几个服务器厂商申请免费的试用,比如百度云、腾讯云、Ucloud…… 加上自己的笔记本,断断续续抓取了一个多周,才采集到300万知乎用户数据。中间还跑坏了运行网站的云主机,还好 自动备份 起作用了,数据没有丢失,但那又是另外一个故事了……

废话不多说,下面我介绍一下如何写一个简单的分布式知乎爬虫。

By

[顶] 大数据报告:知乎百万用户分析

最近用 python 爬虫抓取了知乎用户个人信息(公开信息),去重之后有300+万用户信息(公开信息),为了得到这些数据,还不小心跑崩了一台服务器…… 当然主要是配置太低。

手头有了数据也不能闲着,于是就有了这篇分析报告,这篇报告做了一些浅显的数据分析,主要目的是练练手,大家看个热闹,高手勿笑。

数据量:3,289,329 人。

数据采集工具:分布式 python 爬虫

分析工具:ElasticSearch + Kibana

分析角度包括:地理位置、男女比例、各类排名、所在高校、活跃程度等。

By

利用 DPlayer+OSS 在博文中优雅的嵌入视频(基于Django博客)

最近逛博客的时候看到他们在博文中嵌入了视频,播放器无边框、设计简洁、甚至还有弹幕功能,十分好看优雅。分享几个博主的页面:

其实在这之前我还使用过bilibili自带的播放脚本,在视频页面点击分享可以找到,复制到博文中就可以出现一个播放器,点击就可以播放视频,但是这个播放器带B站的广告,还有很多零零碎碎的东西,总之不够简洁。

查看这几个博主的页面才发现他们用的是一款web播放器————DPlayer,是前端大佬 DIYGod 的开源项目。

项目地址:MoePlayer/DPlayer

文档地址:中文文档

看到 DPlayer 简洁的界面和弹幕功能后我简直如获至宝,这就是我心中的理想web播放器呀!

By

使用 TensorFlow 搭建神经网络预测泰坦尼克号乘客生存率(Kaggle => Titanic: Machine Learning from Disaster)

By

ElasticSearch + Kibana 安装配置(CentOS)

部署环境:CentOS 7 64bit

使用组件:ElasticSearch 5.4、Kibana 5.4

实例描述:在一台服务器上搭建 ElasticSearch + Kibana,并使内网可访问,假设服务器地址为 172.16.4.44 。搭建好之后,同一内网中的机器都可以访问这个地址进入 Kibana 查看 ElasticSearch 中的数据。

组件下载:ElasticSearch 5.4Kibana 5.4 均采用原生版本

注意:ElasticSearch 需要 java8 以上环境,这里假设你已经安装好。

By

解决 VPS 经 SS 访问 Google Schoolar 受限的问题(补充)

本文主要解决通过 ss 访问 谷歌学术,报如下错误的问题:

提示信息为:

We're sorry... but your computer or network may be sending automated queries. To protect our users, we can't process your request right now.

网上找到一篇文章可以基本解决这个问题:解决VPS经SS访问Google Schoolar受限,但是我在尝试的过程中发现有些坑还是花费了不少时间,下面针对这些坑对上文进行补充性的建议。

By

使用 Frp 进行内网穿透(在外网用 ssh 登录校园网中的服务器)

最近想在外网用 ssh 登录内网(校园网)的服务器,以便在外网也能跑跑实验什么的,于是研究了一下常用的内网穿透工具,下面分享下我的心得。

首先介绍一下 内网穿透解决的痛点,比如导师在你们实验室买了一台高配服务器,装配有高端显卡,可以用来跑深度学习模型,你在实验室玩的很开心。但是到了暑假你不得不离开实验室,回到家里的外网没法访问处于实验室内网的服务器,vpn也没法用!这怎么办呢,这个时候可以用内网穿透工具来解决这个问题啦!

部署的思路 是把内网穿透工具的客户端部署在内网服务器中,然后在有独立域名的 VPS 中部署内网穿透工具的服务端,然后你在外网的随便一台机器上用 ssh 登录你的 VPS 的 IP 和配置好的端口,便可以登录内网的服务器啦!

其实 原理 就是把 VPS 当做一个“桥”,和内网的操作全部通过互联网和这个“桥”连通,这样便打穿了内网和外网的界限。

By

Django 自定义装饰器进行登录访问限制

我们在设计网站用户系统的时候,往往需要进行登录访问限制,比如说用户还没有登录的时候,有些网页是不能访问的。

最简单粗暴的办法是,在每个页面的函数最开始加一个 登录验证函数,检查当前用户登录状态:如果已经登陆过,那么继续往下执行;如果用户还没登录,对不起,出门左转到登录页。

在 python 中有个优雅的解决办法——使用 装饰器。Django 中有提供使用装饰器进行登录访问限制的方法,详情可见 django实现用户登陆访问限制@login_required,如果对自己实现这套机制感兴趣的童靴,可以继续往下看。

By

如何配置 Sublime Text 3 的 Python 编程环境

用 IDLE 写 python 习惯了,还是发现它有些简陋,于是准备转向 Sublime 的怀抱。(我比较喜欢轻量级的 IDE)

为了方便用 Sublime 写 python 代码,我搜集了网上的一些资料,选出了常用 Python 编程的3个插件,整理出一篇轻量级的配置教程。

By

记录一次服务器重新部署的经历(网站、gogs和一些脚本)

前段时间由于手贱在服务器上跑爬虫,开了100个进程,内存和cpu双双达到极限值,第二天起来一看,性能曲线赛高,使用 putty 和网页版 ssh 登录服务器,被拒之门外。于是重启服务器,然后发现启动报错,找阿里云售后工程师,说部分关键文件丢失,这种情况无法正常启动,建议恢复快照…… 无奈,依次尝试恢复快照,结果发现只有一月份的快照是正常的…… 这意味着我没法把系统直接恢复到最近的正常状态,一些服务和程序需要我重新搭建一遍。

心情崩溃…… 好在网站有 自动备份,阿里云也可以 从快照创建磁盘 ,这说明数据没有丢失,不幸中的万幸,然后只要花时间把服务和程序重新搭建起来就可以恢复之前的状态了。

By

readfree.me 自动签到脚本获取免费积分

这又是一个 python 脚本,这次的目标是 readfree.me ,一个比较正规的 kindle 电子书资源站。这个网站做了限制,电子书需要积分才能下载,积分有两种获取方式:1.充会员 2.每天领免费积分。本着能免费就不掏腰包的革命原则,我自然而然的把目光瞄到了每天的免费积分上……

脚本目的:每天自动登录 readfree.me 进行签到 ---> 领取积分

By

python 实现校园网自动登录

我所在的学校校园网登录是web式的,即随便打开一个网页就会自动跳转到登录页面,然后输入用户名密码,点登录,便可以上网了。

但这种登录方式有个缺点:登录状态不会一直保持下去。即过一段时间就会掉线,然后你需要重新登陆才行。这个时间大概是一天。

这就蛋疼了,想让实验室的电脑随时保持联网状态怎么办呢?(有时候我需要远程我的电脑)

这个时候可以用python脚本解决这个问题!

By

Pandas 默认时间格式转换为 Unix 时间戳

Pandas读取csv文件时,时间会自动显示为‘YYYY-MM-DD HH:MM:SS’的格式,那么如果想要将这个时间转换为 Unix时间戳 呢?

先科普一下,什么是 Unix时间戳 呢?

Unix时间戳 是一种时间表示方式,是一个整型值,代表从格林威治时间1970年01月01日00时00分00秒起至现在经过的总秒数。

举个栗子:

Unix时间戳 表示形式为 1492751843 这样的整型
把它转换为 北京时间为 2017/4/21 13:17:23

实际上,Pandas中时间用 pandas.datetime() 转换为 pandas.tslib.Timestamp(时间戳) 格式之后,已经变成了整型存储,即 Unix时间戳形式 。

如果我们需要这个时间戳的整型格式,可以用 time[0].value 这个属性把它提取出来。

By

基于Django、WeRoBot的微信公众平台开发(二) - 后续

这里是 基于Django、WeRoBot的微信公众平台开发(二) 的后续,主要记录其它功能的开发。

By

基于Django、WeRoBot的微信公众平台开发(二)

上一节,我在一个Django项目中集成了 基于WeRoBot的微信公众号后台,成功与服务器完成了对接,并且可以对用户的任意消息做出响应(回复一个“hello”),简单来说,就是搭建起了一个开发框架。

这一节中,我将继续用 WeRoBot 在这个开发框架上扩展一些功能,让公众号的交互丰富起来,思来想去,我挑了三个相对简单的功能进行实现:简单的聊天功能,天气查询,讲笑话

下面是实现这三个功能的过程和心得记录,分享给大家。

By

基于Django、WeRoBot的微信公众平台开发(一)

* 该教程基于第三方微信公众号开发框架 WeRoBot
* 该教程在已有Django项目上开发,即在已有网站项目中嵌入一个微信公众平台服务
* 你需要有一个VPS/云服务器

今天突发奇想,打算申请一个微信公众账号玩玩,以便同步博客上的一些文章。

由于在学python,于是打算用Python来开发微信公众号的后台。

为了方便开发,我在github上寻找微信公众号开发的框架,最后锁定了 WeRoBot

下面我将用WeRoBot在一个Django网站项目中开发微信公众号的后台。

废话不多说了,我们开始吧!

By

修改博客系统的第三方库

博客系统的运行环境由Django、markdownx、markdown-deux、markdown2等第三方库组成。

在写博客系统的过程中,为了实现自己的意图,我修改了一些第三方库的源代码。

为了以后方便部署,在这里记录一下我修改的地方。

By

搭建网站自动备份机制(crontab+mysqldump+tar+oss)

个人网站在云服务器上部署好了之后,为了防止数据丢失,我们往往需要定期的备份网站的数据。

每次手动去备份太麻烦,我们可以使用 Linux+Python 搭建一个 网站自动备份机制 来自动化、定时的去完成备份工作。

简单来说这个机制可以 定时备份网站数据,并自动将备份文件上传到云上

By

【翻译】Django1.8 中文文档

原文链接:Django documentation

关于Django你需要知道的一些事情。

By

【IJCAI-17 口碑商家客流量预测】使用Pandas计算商家平均客流量

这段时间参加了天池的 IJCAI-17 口碑商家客流量预测 大数据竞赛,初次参加此类竞赛,也是第一次使用pandas,折腾了许久,记录下自己的心得。代码很粗糙,仅作个人记录用。参考价值不大,大神勿喷。

下面出现的代码已经提交检验通过,第一次提交混上了排行榜,400+左右的位置,第二次修改了一下混到了200+的位置,真是没有想到这么水的算法也能上排行榜……