CRM第六天:客户拜访管理,权限配置,验证码实现
目录 1.CRM客户关系管理系统:客户拜访记录 1.1需求概述 1.2准备工作 1.2.1创建表 1.2.2创建实体和映射 1.2.3创建相关类,并交给Spring管理 1.3客户拜访记录列表显示 1.3.1修改left.jsp的提交路径 1.3.2编写action 1.3.3编写service 1.3.4编写显示页面 1.4客户拜访记录列表显示 1...
目录 1.CRM客户关系管理系统:客户拜访记录 1.1需求概述 1.2准备工作 1.2.1创建表 1.2.2创建实体和映射 1.2.3创建相关类,并交给Spring管理 1.3客户拜访记录列表显示 1.3.1修改left.jsp的提交路径 1.3.2编写action 1.3.3编写service 1.3.4编写显示页面 1.4客户拜访记录列表显示 1...
最近工作遇到了一个问题。对我们公司的开发小组来说,整个小组的人员都在一个 Repository 下面协作,这个 Repository 里面的文件夹非常多,而我只负责其中的一个功能的开发,我开发的功能所在的文件夹是可以独立维护的,它不依赖于 Repository 里面的其他的任何一个文件夹。 现在我新招到了一位实习生,会跟我一同做这个功能。但很尴尬的是,原则上来说...
我们先以一个最简单的实例来了解模拟登录后页面的抓取过程,其原理在于模拟登录后 Cookies 的维护。 1. 本节目标 本节将讲解以 GitHub 为例来实现模拟登录的过程,同时爬取登录后才可以访问的页面信息,如好友动态、个人信息等内容。 我们应该都听说过 GitHub,如果在我们在 Github 上关注了某些人,在登录之后就会看到他们最近的动态信息,比如他们最...
10.2 Cookies 池的搭建 很多时候,在爬取没有登录的情况下,我们也可以访问一部分页面或请求一些接口,因为毕竟网站本身需要做 SEO,不会对所有页面都设置登录限制。 但是,不登录直接爬取会有一些弊端,弊端主要有以下两点。 设置了登录限制的页面无法爬取。如某论坛设置了登录才可查看资源,某博客设置了登录才可查看全文等,这些页面都需要登录账号才可以查看和爬取...
11.3 mitmdump 爬取 “得到” App 电子书信息 “得到” App 是罗辑思维出品的一款碎片时间学习的 App,其官方网站为 https://www.igetget.com,App 内有很多学习资源。不过 “得到” App 没有对应的网页版,所以信息必须要通过 App 才可以获取。这次我们通过抓取其 App 来练习 mitmdump 的用法。 1....
在开始了解 X-Forward-For 之前,我们先来假设一个场景。你是一名爬虫工程师,现在要爬取目标网站 xxx.com 上面的内容。在编码的时候,你发现单位时间内请求频率过高时会被限制,猜测应该是目标网站针对 IP 地址做了限制。现在你有两种选择: 单机,用 IP 代理解决频率高被限制的问题。 多机,用分布式爬虫解决单机 IP 被限制的问题。 由于目标...
12.2 pyspider 的基本使用 本节用一个实例来讲解 pyspider 的基本用法。 1. 本节目标 我们要爬取的目标是去哪儿网的旅游攻略,链接为 http://travel.qunar.com/travelbook/list.htm,我们要将所有攻略的作者、标题、出发日期、人均费用、攻略正文等保存下来,存储到 MongoDB 中。 2. 准备工作 请确...
12.1 pyspider 框架介绍 pyspider 是由国人 binux 编写的强大的网络爬虫系统,其 GitHub 地址为 https://github.com/binux/pyspider,官方文档地址为 http://docs.pyspider.org/。 pyspider 带有强大的 WebUI、脚本编辑器、任务监控器、项目管理器以及结果处理器,它...
12.3 pyspider 用法详解 前面我们了解了 pyspider 的基本用法,我们通过非常少的代码和便捷的可视化操作就完成了一个爬虫的编写,本节我们来总结一下它的详细用法。 1. 命令行 上面的实例通过如下命令启动 pyspider: 1 pyspider all 命令行还有很多可配制参数,完整的命令行结构如下所示: 1 p...
13.2 Scrapy 入门 接下来介绍一个简单的项目,完成一遍 Scrapy 抓取流程。通过这个过程,我们可以对 Scrapy 的基本用法和原理有大体了解。 1. 本节目标 本节要完成的任务如下。 创建一个 Scrapy 项目。 创建一个 Spider 来抓取站点和处理数据。 通过命令行将抓取的内容导出。 将抓取的内容保存到 MongoDB 数据库。 2....
13.1 Scrapy 框架介绍 Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求。我们只需要定制开发几个模块就可以轻松实现一个爬虫。 1. 架构介绍 首先我们来看下 Scrapy 框架的架构,如图 13-1 所示: 图 13-1 Scrapy 架...
13.3 Selector 的用法 我们之前介绍了利用 Beautiful Soup、pyquery 以及正则表达式来提取网页数据,这确实非常方便。而 Scrapy 还提供了自己的数据提取方法,即 Selector(选择器)。Selector 是基于 lxml 来构建的,支持 XPath 选择器、CSS 选择器以及正则表达式,功能全面,解析速度和准确度非常高。 ...
13.4 Spider 的用法 在 Scrapy 中,要抓取网站的链接配置、抓取逻辑、解析逻辑里其实都是在 Spider 中配置的。在前一节实例中,我们发现抓取逻辑也是在 Spider 中完成的。本节我们就来专门了解一下 Spider 的基本用法。 1. Spider 运行流程 在实现 Scrapy 爬虫项目时,最核心的类便是 Spider 类了,它定义了如何爬...
前言 本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块。系卤煮自己总结的一些经验和教训。本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来。很难做到详尽充实,如果有好的建议或者不对的地方,还望不吝赐教斧正。 一、接口的流畅性 好的接口是流畅易懂的,他主要体现如下几个方面: 1. 简单 操作某个元素的 css 属...
本节主要内容有: 通过 requests 库模拟表单提交 通过 pandas 库提取网页表格 上周五,大师兄发给我一个网址,哭哭啼啼地求我:“去!把这个网页上所有年所有县所有作物的数据全爬下来,存到 Access 里!” 我看他可怜,勉为其难地挥挥手说:“好嘞,马上就开始!” 目标分析 大师兄给我的网址是这个:https://www.ctic.org/crm...
正则表达式 30 分钟入门教程(https://deerchao.net/tutorials/regex/regex.htm) 本教程目标:30 分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。 正则表达式 必知必会(https://www.zybuluo.com/Yano/note/475174) Zjmai...
人生一共就是由几个 10 年组成的,每个 10 年都有不同的经历,不同的心境,每个 10 年追求的东西都不一样。 鱼与熊掌不可兼得,在追求的过程中你总要有取舍,该取什么?该舍什么? 10 岁时 应该不再计较家里给的零花钱多少,不和别人家的孩子比较穿名牌服装;少不更事,和人家比吃穿,还情有可原,年纪到了整数就该懂事了。 20 岁时 不再计较自己的家庭出身,不再计较...
上一节我们实现了极验验证码的识别,但是除了极验其实还有另一种常见的且应用广泛的验证码,比较有代表性的就是点触验证码。 可能你对这个名字比较陌生,但是肯定见过类似的验证码,比如 12306,这就是一种典型的点触验证码,如图 8-18 所示: 图 8-18 12306 验证码 我们需要直接点击图中符合要求的图,如果所有答案均正确才会验证成功,如果有一个答案错误,验...
本节我们来介绍一下新浪微博宫格验证码的识别,此验证码是一种新型交互式验证码,每个宫格之间会有一条指示连线,指示了我们应该的滑动轨迹,我们需要按照滑动轨迹依次从起始宫格一直滑动到终止宫格才可以完成验证,如图 8-24 所示: 图 8-24 验证码示例 鼠标滑动后的轨迹会以黄色的连线来标识,如图 8-25 所示: 图 8-25 滑动过程 我们可以访问新浪微博移动...
我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么的美好,然而一杯茶的功夫可能就会出现错误,比如 403 Forbidden,这时候打开网页一看,可能会看到 “您的 IP 访问频率太高” 这样的提示,或者跳出一个验证码让我们输入,输入之后才可能解封,但是输入之后过一会儿就又这样了。 出现这样的现象的原因是网站采取了一些反...
今天刚发现了一个我觉得不错的工具,介绍给大家,不是打广告哈,是真心推荐。 在推荐之前,问大家一个问题: 大家平常遇到不错的网站或文章,会用什么方式收藏?Chrome 书签? 现在你们 Chrome 书签里面啥样子?乱不乱? 如果我让你们快速从书签里面找出一个曾经收藏过网站,你要花多久? 如果你在手机上用其他的浏览器,比如 Safari、微博上看到了一个不错的网...
在很多情况下,我们会有把 Python 对象进行序列化或反序列化的需求,比如开发 REST API,比如一些面向对象化的数据加载和保存,都会应用到这个功能。 比如这里看一个最基本的例子,这里给到一个 User 的 Class 定义,再给到一个 data 数据,像这样: 123456789101112 class User(object): def _...
在运行一个项目的时候,我们经常会遇到设置不同环境的需求,如设置是开发环境、测试环境还是生产环境,或者在某些设置里面可能还需要设置一些变量开关,如设置调试开关、日志开关、功能开关等等。 这些变量其实就是在项目运行时我们给项目设置的一些参数。这些参数一般情况来说,可以有两种设置方法,一种是通过命令行参数,一种是通过环境变量。二者的适用范围不同,在不同的场景下我们可以...
当今大数据的时代,网络爬虫已经成为了获取数据的一个重要手段。 但要学习好爬虫并没有那么简单。首先知识点和方向实在是太多了,它关系到了计算机网络、编程基础、前端开发、后端开发、App 开发与逆向、网络安全、数据库、运维、机器学习、数据分析等各个方向的内容,它像一张大网一样把现在一些主流的技术栈都连接在了一起。正因为涵盖的方向多,因此学习的东西也非常零散和杂乱,很多...
一门语言好用、方便的程度在很多时候会取决于这门语言相关的库够不够丰富,Python 之所以火爆除了其本身的语法和特性之外,还在一定程度上取决于其有太多太多库的支持,不论是官方维护的还是第三方开发的。就比如说做机器学习为什么很多人都用 Python,一个非常大的因素就是 TensorFlow 和 PyTorch 对 Python 的支持。当然在这里并不是说 Pyt...
我们知道在国内使用 Docker,无论是 Pull、Build 还是 Push 镜像都十分慢,因为毕竟很多源都是国外的源,下载和上传慢是必然的现象。 最近我在写的项目都是用 Docker 运行起来的,在测试的时候,我可能需要先 Build 一下然后跑起来测试下逻辑有没有问题。 在我自己本地机器上构建就有这么几个问题,一个问题当然就是速度慢,我用的肯定是国内的上网...
写程序时,异常处理是在所难免的,但你有没有考虑过怎样让异常处理机制变得扩展性更好,让写法更优雅呢? 实例引入 比如写 Python 的时候,举个最简单的算术运算和文件写入的例子,代码如下: 1234 def process(num1, num2, file): result = num1 / num2 with open(file, 'w', enc...
13.5 Downloader Middleware 的用法 Downloader Middleware 即下载中间件,它是处于 Scrapy 的 Request 和 Response 之间的处理模块。我们首先来看看它的架构,如图 13-1 所示。 Scheduler 从队列中拿出一个 Request 发送给 Downloader 执行下载,这个过程会经过 Do...
13.7 Item Pipeline 的用法 Item Pipeline 是项目管道。在前面我们已经了解了 Item Pipeline 的基本用法,本节我们再作详细了解它的用法。 首先我们看看 Item Pipeline 在 Scrapy 中的架构,如图 13-1 所示。 图中的最左侧即为 Item Pipeline,它的调用发生在 Spider 产生 Item...
13.6 Spider Middleware 的用法 Spider Middleware 是介入到 Scrapy 的 Spider 处理机制的钩子框架。我们首先来看看它的架构,如图 13-1 所示。 当 Downloader 生成 Response 之后,Response 会被发送给 Spider,在发送给 Spider 之前,Response 会首先经过 Sp...