第057讲: 论一只爬虫的自我修养5:正则表达式(1) | 学习记录(小甲鱼零基础入门学习Python)

(标答出处: 鱼C论坛) 《零基础入门学习Python》 本节知识点: 我们发现下载一个网页是很容易的,但是要在网页中查找到你需要的内容,那就是困难的,你发现字符串查找并没有你想象的那么简单,并不是说直接使用 find 方法找到匹配字符串的位置就可以了。 我们来举个例子,学习了前面几节课你应该已经尝试过写一个脚本来自动获取最新的代理 ip 地址,但是呢,你肯定会遇到困难,我现在来重现一下大家会遇到的困难。 大家肯定会先踩点,在 https://www.xicidaili.com/wt 网点审查
分类: 其他 发布时间: 03-24 22:34 阅读次数: 0

第058讲: 论一只爬虫的自我修养6:正则表达式(2) | 学习记录(小甲鱼零基础入门学习Python)

(标答出处: 鱼C论坛) 《零基础入门学习Python》 本节知识点: 上一节课我们通过一个例子(匹配 ip 地址)让大家初步了解到正则表达式的魔力,也让大家充分了解到学习正则表达式是一个相对比较困难的事情。所以这一节课我们将继续学习 正则表达式的语法。 我们依稀还记得在Python中,正则表达式是以字符串的形式来描述的,正则表达式的强大之处在于特殊符号的应用,我们上节课举了例子,例如 点号(.),在正则表达式中表示匹配除了 换行符之外的任何字符,它就是一个特殊的字符。正是这些特殊符号,使得一
分类: 其他 发布时间: 03-24 22:33 阅读次数: 0

第059讲: 论一只爬虫的自我修养7:正则表达式(3) | 学习记录(小甲鱼零基础入门学习Python)

(标答出处: 鱼C论坛) 《零基础入门学习Python》 本节知识点: 今天我们先接着上节课的内容,把 Python3 正则表达式特殊符号及用法(详细列表)这个表格讲完: 上节课我们介绍了正则表达式的特殊字符中的 元字符,正则表达式的特殊字符除了 元字符之外呢,还有 一种就是通过反斜杠加上一个普通字符组成的特殊符号。我们接下来谈谈它们的含义。 \序号,这个我们上节课已经讲过了,序号就是数字: ①引用序号对应的子组所匹配的字符串,此时序号的范围是 1~99,子组的序号是从 1 开始计算。 ②如果
分类: 其他 发布时间: 03-24 22:33 阅读次数: 0

爬女神吧前5个链接的图片

闲着无聊,又想着巩固一下之前的知识,所以就写了这个程序,明天将其改正一下,改为使用正则表达式爬。 使用find爬图 import urllib.request import time import os import re def open_url(url) : req = urllib.request.Request(url) req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWe
分类: 其他 发布时间: 03-24 22:33 阅读次数: 0

第060讲: 论一只爬虫的自我修养8:正则表达式(4) | 学习记录(小甲鱼零基础入门学习Python)

(标答出处: 鱼C论坛) 《零基础入门学习Python》 本节知识点: 有了前面几节课的准备,我们这一次终于可以真刀真枪的干一场大的了,但是呢,在进行实战之前,我们还要讲讲正则表达式的实用方法和扩展语法,然后再来实战,大家多把持一会啊。 我们先来翻一下文档: 首先,我们要举的例子是讲得最多的 search() 方法,search() 方法 既有模块级别的,就是直接调用 re.search() 来实现,另外,编译后的正则表达式模式对象也同样拥有 search() 方法,我问问大家,它们之间有区别
分类: 其他 发布时间: 03-24 22:33 阅读次数: 0

第061讲: 论一只爬虫的自我修养9:异常处理 | 学习记录(小甲鱼零基础入门学习Python)

本节知识点: 高级语言的一个有些特性就是它可以从容不迫的处理每一个遇到的错误,不至于说遇到一个小错误就导致整个程序崩溃了,大部分高级语言处理错误的方法都是通过检测异常、处理异常来实现的,Python也是一样。 用程序用代码进行互联网访问的时候,会出现异常是再正常不过的了,例如之前实现了一个代理程序,通过十几个、几十个代理 ip 来实现爬虫访问,如果说其中一个代理 ip 突然不响应了,那就会报错,这种错误的触发率是极高的,全部 ip 你都可以使用那才是有鬼呢。但是,出现一个代理 ip 不能用并不
分类: 其他 发布时间: 03-24 22:32 阅读次数: 0

第062讲: 论一只爬虫的自我修养10:安装Scrapy | 学习记录(小甲鱼零基础入门学习Python)

这节课我们来谈谈 Scrapy 说到Python爬虫,大牛们都会不约而同地提起Scrapy。因为Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 Scrapy最初是为了页面抓取(更确切来说, 网络抓取)所设计的,也可以应用在获取API所返回的数据(例如Amazon Associates Web Services)或者通用的网络爬虫。 这节课主要讲解如何安装 Scrapy 使用的电脑系统:Windows 10 6
分类: 其他 发布时间: 03-24 22:32 阅读次数: 0

后端系统开发之gflags使用规范

任何好用的工具如果使用不当都会带来不好的后果,gflags也是一样。我遇到过一些gflags的“坑”,还从领导和同事那里获得一些好的想法,整理成7条gflags使用规范。有意识的遵循这些规范,对项目的开发维护和自身的技术成长都将有很大的益处。 规范1:bool类型的gflags默认值设置成false,防止误启用新功能。 新的功能上线一定要经过代码审查、测试和验证流程,默认为true的gflags风险太大。 规范2:应定时清理旧的gflags。 随着时间的流逝,代码里的gflags会越来越多,当
分类: 其他 发布时间: 03-24 22:32 阅读次数: 0

后端系统开发之面试和工作中的线程池

线程池是一种很经典的技术,在后端系统中很常见。线程池的常规做法是提前创建好一组工作线程,然后将任务分发给这些工作线程来处理,这样就避免了频繁的线程创建和销毁,同时也能很好的控制线程数量。线程池本质上是一种池化技术,利用空间来换取时间。线程池技术已经存在很多年,在面试的时候被问到的概率很高,在工作中也非常有用。 首先来看面试中的线程池,通常面试官会提问线程池的目的和原理,如果面试时间充足的话,恭喜你可能要进入紧张刺激的“白纸编程”(又叫“白板面试”,在一张A4纸上手写代码)阶段了。 线程池在设计
分类: 其他 发布时间: 03-24 22:31 阅读次数: 0

后端系统开发之面试和工作中的map

map是C++ STL中的关联容器,存储的是键值对(Key-Value),可以通过key快速索引到value。map容器中的数据是自动排序的,其排序方式是严格的弱排序(stick weak ordering),即在判断Key1和Key2的大小时,使用“<”而不是“<=”。map 使用二叉搜索树实现,STL map的底层实现是红黑树。 map有几个值得注意的地方:map的赋值运算是深拷贝,即调用map_a = map_b后,map_a中的元素拥有独立的内存空间。map[]运算比较有意思,当元素不
分类: 其他 发布时间: 03-24 22:31 阅读次数: 0

后端系统开发之紧急业务开发

最近经历了冰火两重天,上周还可以不紧不慢的开发功能和学习技术,本周突然就被卷入到一个紧急业务的开发之中,要求在这周五开发完成一个全新的后端业务,具体包括制定上下游服务接口、设计后端系统业务流程、开发代码和测试通过,以便在周末和测试同学一起进行紧急测试,这是背景。 这个项目的挑战在于业务十分紧急,留给产品、开发和测试的时间都非常紧张,有多个模块之间需要联调,因此经验丰富的大佬们很快定下3个原则: 1.先定接口。前后端,上下游之间有了接口就能并行开发,于是前端接口、后端接口很快定就落定。 2.删减
分类: 其他 发布时间: 03-24 22:31 阅读次数: 0

后端系统开发之protobuf使用技巧和经验

Google protobuf是非常出色的开源工具,在项目中可以用它来作为服务间数据交互的接口,例如rpc服务、数据文件传输等。protobuf为proto文件中定义的对象提供了标准的序列化和反序列化方法,可以很方便的对pb对象进行各种解析和转换。以下是我总结的protobuf使用技巧和经验,分享给大家。 技巧1:使用optional而不是required字段。 protobuf的可选字段optional是一个很巧妙的设计,optional字段是可选的,一个optional字段存在与否都不影响
分类: 其他 发布时间: 03-24 22:31 阅读次数: 0

后端系统开发之工作和面试中的单例

单例是什么?单例是一种特殊的类,用于确保只有一个对象,同时提供一种全局访问这个对象的方法。最近在工作中体验了一把5分钟将一个类改造成单例,感觉还是蛮不错的,所以我决定写一篇文章,跟大家交流技术和经验。 单例的原理是利用C++中的静态成员变量和静态成员函数,同时禁用构造函数的方法,达到只有一个对象实例的目的。具体来说,设计一个单例的要点如下: (1)类的静态成员变量是该类的指针。 (2)类的静态成员函数负责返回唯一的实例,当(1)中的指针不为空时就直接返回,否则为该指针new一个对象。 (3)类
分类: 其他 发布时间: 03-24 22:30 阅读次数: 0

后端系统开发之异常情况处理

智者千虑,必有一失。异常情况总是存在的,我们考虑不到全部场景。美剧《越狱》中精心策划一切的男主也做不到,例如男主意外烫伤导致纹身地图被毁。面对异常我们通常有两种选择,要么让它core掉,要么继续处理。 程序core掉的方法可以通过glog的FATAL级别日志,或者调用abort函数等方式终止程序。core掉的好处是很明显的,它能将严重的错误及时暴露出来,以便及早处理。后端系统通常都设计有容错冗余机制,一个进程core掉,其服务功能会自动由同组的其他进程来承担(failover),因此没有必要让
分类: 其他 发布时间: 03-24 22:30 阅读次数: 0

后端系统开发之懒人思维

最近在研究程序运行方式的技术细节,看了一个让程序以daemon方式运行的函数,内部调用了fork、open、dup2等函数,约有20行代码,看完csdn一篇博客后发现,其实这个deamon实现并不严谨,而且可以直接调用unistd.h头文件中的daemon函数,于是忍不住感慨,勤奋的程序员会重复造轮子啊。 开发的时候还是得有"懒人思维",尽量避免重复造轮子,优先考虑使用系统调用、各种公共库函数、第三方工具。人的精力是有限的,节约下来的时间和精力可以花在其他地方,比如为公司干更多的活。《计算广告
分类: 其他 发布时间: 03-24 22:29 阅读次数: 0

后端系统开发之JSON技巧

最近在做系统模块重构时遇到一个小问题:如何将一个带格式的JSON字符串转换成不带格式的、“拉平”的JSON字符串?在解决这个小问题时花费了不少时间,请教了好几个同事。因此感觉很有必要写文纪念一下,让后人少走一些弯路,同时也对JSON使用经验做个总结。 学习任何技术本质上都是在学习它的历史,JSON是如何产生的,最初用于解决什么问题? JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式,它采用完全独立于编程语言的文本格式来存储和表示数据
分类: 其他 发布时间: 03-24 22:29 阅读次数: 0

后端系统开发之白名单机制

后端系统中经常会听到“某某白名单”的名字,为什么要有白名单呢?使用白名单机制有什么好处? 一首脍炙人口的儿歌可以帮我们领悟答案。 “小白兔乖乖,把门儿开开。快点开开,我要进来。 不开不开就不开,妈妈没回来,我就不开门。” 小白兔的妈妈在能开门的白名单里。显然,白名单机制是一种简单易行的系统自我保护机制,没有白名单的“开门系统”存在严重的安全隐患。 在大型后端系统中,白名单机制是必不可少的,主要用在以下几个方面: 黑名单的对立面。这是白名单最明显的应用场景,例如微信朋友圈禁止抖音、快手等平台的短
分类: 其他 发布时间: 03-24 22:29 阅读次数: 0

有哪些值得一读的理财启蒙书

我读过的第一本理财启蒙书是《富爸爸,穷爸爸》,作者是一名拥有传奇人生的美国人罗伯特清崎,书中介绍的理财知识非常震撼:作者有两个爸爸,富爸爸是一个没有读过大学的当地巨富,穷爸爸是一个拥有博士学历的大学教授,作者告诉人们:智商和财商完全是两码事,提高财商需要主动学习会计、投资、市场、法律这4方面的知识。富人偏爱房地产投资,其要领是坚持低价买入,例如购买企业破产被银行拍卖的房子,买入价格决定了收益高低。 这本薄薄的有趣的书适合所有的人阅读。如果你是一个孩子的父亲或母亲,想要给孩子好的物质生活保障,提
分类: 其他 发布时间: 03-24 22:29 阅读次数: 0

后端系统开发之解决历史bug

背景:系统里上游模块A会下发一个参数exp给下游服务B,由于这个参数exp长期未使用,一直无人关注,最近有同事设计的方案需要用到参数exp,却发现exp未生效。(历史BUG能一直存在的前提:无人关注和使用) 第一次排查:观察A的请求日志,发现A在请求下游服务B之前有参数exp,因此怀疑是服务B出了问题。查看B的代码,果然有一处非常明显的BUG,原来exp被其他参数覆盖了!(怀疑+验证是排查问题的常用手段) 解决方案:修改代码,如果exp有值则不要覆盖。感慨:找到真相以后修改真容易啊!(显而易见
分类: 其他 发布时间: 03-24 22:28 阅读次数: 0

后端系统开发之工作和面试中的gdb

gdb是C/C++程序员必备的专业技能,工作中gdb最常用的场景有两个,一个是分析core文件,另一个是调试程序。 分析core文件的方法如下: 1、gdb 程序名 core文件名 2、bt或where命令查看堆栈信息。 3、进入某个栈:f N,f是frame的缩写,N是栈号,如0、1、2、3... 进入到某个栈后,才能通过p命令查看这个栈的临时变量,否则只能查看全局变量。 例如a.out程序core产生了core文件core-a.out-12345,gdb方法如下: gdb a.out co
分类: 其他 发布时间: 03-24 22:28 阅读次数: 0