Discuz验证码识别(准备篇)-写给程序员的TensorFlow教程

蛰伏了快两个月了,终于迎来了新系列的第一篇文章。斟酌来斟酌去,决定将系列名字定为-《写给程序员的TensorFlow教程》也算是给这个系统文章定个基调。

太多的TensorFlow入门教程上来就是列了一系列国外的文献,视频。或者直接扔一堆代码,实在难以称之为入门。我们希望针对想学习TensorFlow的程序员来写一系列教程,聊一聊如何在基本掌握python的情况下,能够快速的使用TensorFlow这个工具解决实际问题。

首先,这个系列文章是之前的系列-《反爬与反反爬的奇技淫巧》的番外篇,

之所以是反爬系列的番外篇,因为我们主要是讨论如果使用TensorFlow解决爬虫中常见的问题,包括验证码,图片电话号码识别这类问题(这个系列主要是图像识别)。不过虽然跟反爬相关,但是这个系列依然可以独立来看,不做爬虫的朋友也不会受影响。

作为系列文章第一篇,先说说这个系列的定位,我们希望能给广大想转型机器学习(准确说是Tensorflow实现的神经网络)的程序员带来一些不一样的内容,我们不讲公式,只调方法,不聊文献,只说代码。不求最好,只求有用。正如下面这个自带bgm的表情:

那么我认为对于想要转型的程序员来说,做到以下四点就算基本转型成功了:

1.了解一定的机器学习原理(类似写web,我们要知道http的包结构,知道tcp的三次握手即可)

2.大方向上知道遇到什么问题该用什么机器学习算法来解决(成熟的大类就几个,很容易掌握)

3.熟悉主流算法的实现方案和用法,最好自己有一套对主流方案的封装(做到这一点其实已经很好了)

4.掌握整个从测试环境到生产环境的完整流程(通俗点就是会做能上线的产品,这一点很重要却最容易被忽略)

好了,扯了这么多题外话,我们正式开始:

一、准备部分

在我们动手写代码之前还是要有一些准备工作:

首先我们要对整个问题和解决方案有一个宏观的认知,另外为了方便,本文所有的提到机器学习的地方都可以等价为神经网络实现的监督学习这个领域,关于其他机器学习的领域不在本系列的讨论范围以内。(如果没入门的朋友可以忽略这句话)

1.知识的准备

先说说问题,我们今天要从一个最简单的验证码识别问题入手,我们看下我们的敌人:

就是这货,看着不复杂,没有太多杂点杂线。不过我们说他最简单,绝对不是说的这些,而是这个验证码我们是有生成代码的(Discuz是开源的)。这就意味着我们有无穷多的标注好的验证码图片(就是自带识别结果的图片)。这个对于机器学习来说简直就是无敌了。

聊完问题,我们再整体聊一聊Tensorflow和机器学习的解题思路。我们上学的时候,无论遇到什么问题总有一个解题思路,否则绝对是一头雾水。所谓隔行如隔山,很多时候是因为我们不了解那个行业解决一个常规问题的解题思路,那么机器学习的解题思路是什么呢?

当我们拿到一个问题决定用机器学习的方法解决他,我们要做以下几步:

神箭手汽车之家车型实时报价查询API——如何查询汽车之家的车系和车型ID

在调用神箭手的 汽车之家车型实时报价查询API 的时候,需要传入要查询的汽车之家车型和车系ID,本文将具体讲解如何查询:

  • 1、找到汽车之家某个车系的报价页面
  • 比如:https://car.autohome.com.cn/price/series-4171.html#pvareaid=2042206。那么该车的车系id就是这个网址中的4171

  • 2、在该页面找到要查询的车型,点击询价
  • 打开的网址是这样的:https://www.autohome.com.cn/spec/29172/price.html?ordertype=1#pvareaid=101059,那么车型id就是这个网址中的29172


  • 3、将这两个id和要查询的城市名作为参数调用api,就能拿到实时报价了:

如何上墙神箭手+交换友链

一、上墙神箭手的官网后,会在官网首页的”他们正在使用”模块显示,可用于展示企业风采和交换友链。

如何申请:

  1. 必须是注册神箭手账号并正在使用的企业用户
  2. 请将企业名称、官网链接(需同时符合和申请交换友链)、神箭手账号名、展示用的logo图片一并发给我们。我们的联系方式包括:http://www.shenjian.io/index.php?r=home/contact
  3. 收到您的申请后,我们会尽快审核并回复您


二、交换友链,包括上墙的官网链接和官网底部的友链

如何申请:

  1. 符合百度权重2以上的网站,可以和神箭手相互添加网站链接
  2. 在贵站添加神箭手链接
  3. 您可以根据下方提示,在您的网站中插入神箭手的文字链接、图片链接代码:
    • 文字链接代码:

      <a href='http://www.shenjian.io' target='_blank'>神箭手云</a>
    • 图片链接代码:

      <a href='http://www.shenjian.io' target='_blank'><img src='http://www.shenjian.io/assets/image/home/logo_home_solo.png' alt='神箭手云'/></a>

  4. 将贵站链接发给我们,我们的联系方式包括:http://www.shenjian.io/index.php?r=home/contact
  5. 收到您的申请后,我们会尽快审核并回复您

如何获取微信公众号二维码?

搜狗上搜公众号,可以看到二维码,不过查看链接可以知道,这是个临时链接,会过期,就算把图片保存下来,一段时间之后,这个二维码还是会过期。

之前直接把微信号拼接在一段url后面,就可以得到一个不过期的二维码:

http://open.weixin.qq.com/qr/code/?username=cctvnewscenter

不过最近微信改版之后,这个链接已经失效了。

那么现在还有什么办法呢?

一番研究之后,发现下面两种办法:

如何在神箭手上快速开发爬虫——第五课 如何设置自定义输入【58同城二手房采集】

  1. 本课完整的爬虫代码可以在神箭手示例代码中查看
  2. 如何在神箭手上运行代码,请查看文档
  3. 更详细的爬虫开发教程,请查看文档


大家好,我是神箭手的游牧老师~

今天继续给大家带来 如何在神箭手上快速开发爬虫 系列教程的第五课:如何设置爬虫的自定义输入。

从这一课开始,我们要进入进阶学习了,对于基础知识还不熟悉的童鞋,请先从第一课开始学起啊:第一课点这里

在交付爬虫使用的时候,我们通常需要能够让使用者按照自己的需求来爬取,比如只爬某些分类的文章或者只爬某个城市的数据等。那这种变量就不能直接在代码里写死了,而需要有一个界面可以让使用者设置,然后在代码中根据使用者设置的具体值来爬取某些网页。

对于这种使用场景,神箭手提供了最简单灵活的解决方案:自定义输入。开发者只需要通过注释标注某些变量,使用的时候就可以通过神箭手的爬虫设置界面输入变量值,然后在代码中根据具体值来处理了。so easy~