学编程,来源栈;先学习,再交钱
当前系列: Web开发基础 修改


爬虫

前两年火得一塌糊涂,但实际上根本就不是什么新技术。

最早的时候被称之为spider(蜘蛛),或者robot(机器人)

其实就是一段能够通过HTTP协议自动读取互联网上众多网页内容的小程序。

#体会#:浏览器也是程序,用户点击某链接可以触发HTTP请求,当然也可以写程序自动发起HTTP请求……

不仅仅是python

实际上几乎所有主流语言都可以用来写爬虫。

之所以现在爬虫和python深度绑定,只有一个原因:简单

  1. python语言本身比较简单,尤其是对英语母语人士
  2. python封装了简单好用的爬虫类库

搜索引擎

比如Google和百度(还有Bing,推荐使用),除了前途的HTML页面,展示搜索框和搜索结果,

实质上主要由两部分组成:

  • spider:获取互联网上各种数据
  • 数据库:存放获取到的海量数据
@想一想@:这是不是就是今天的“爬虫”和“大数据”?

从SEO到反爬虫

早期的互联网,因为搜索引擎的巨大影响力,网站巴不得被搜索引擎收录,甚至还诞生了一个崭新的行业:

SEO(Search Engineer Optimization),搜索引擎优化,目的是让网站更好的被搜索引擎收录,并且在搜索结果中取得更好的排名。

但是,慢慢地人们开始认识到数据的价值,就不太愿意爬虫爬取自己网站的数据,所以诞生了:

robots协议

网站管理员只要在网站域名的根目录下放一个robots.txt 文本文件,里面可以指定不同的网络爬虫能访问的页面和禁止访问的页面。

但这就像个君子协定,只能靠搜索引擎/爬虫自觉遵守。

在早期,只有Google、百度和Bing这些大公司的时候,还是管用的。

但慢慢地,爬虫技术泛滥,谁都可以爬的时候……

反爬虫机制

网站不得不采用技术手段来防止爬虫爬取有关信息。常用的措施包括:

  1. 只有注册用户才能访问(或为匿名用户自动注册)
  2. 记录用户访问页面的次数或频率
  3. 对异常情况予以处理,包括:
    • capthca图片/拼图/动画验证
    • 对该用户限时禁止访问

一旦完整采取了反爬虫技术,你还继续采用技术手段进行爬取,就属于非法行为。情节严重的,可构成犯罪:

  • 非法侵入计算机信息系统罪
  • 非法获取计算机信息系统数据罪

如果你爬取的是公民个人信息的话,还会触犯“侵犯公民个人信息罪”(无论网站是否采用反爬虫技术手段)

PS:坊间戏称,python是面向监狱编程。


SEO简介(选)

这是一个已经过气的技术……,因为:

  • 大众已经越来越不依赖于搜索引擎获取信息,而是通过各种APP
  • 短平快的黑帽SEO技术已经越来越没有用
  • 头部排名的网站/页已经形成了马太效应
  • ……

但还是有必要了解一些基本的SEO原理:

链接权重

简单来说,当出现多个搜索结果的时候,搜索引擎如何判断哪一个网页的质量更高(排在搜索结果的前面)呢?

就看这个页面是不是被更多、更好的其他页面引用(链接)——这就被称之为权重

就像一个论文如果被更多论文引用,说明它的质量更高一样。

但是,论文有评审,网页内容没有评审呀!尤其是Web2.0时代,谁都可以发博客/文章,里面都可以带链接……

于是“黑帽SEO”技术出现了:利用机器人在所有论坛,铺天盖地的发垃圾信息,附上要推广要SEO的网站链接!

反击手段

早期比较优雅,按Google说明,在a标签中添加nofollow属性,就可以表明该链接不具有加权属性,即:不代表这是我的推荐。

但后来大家更加简单粗暴:所有外部(非本站)链接,一律转到一个动态生成的跳转页面

演示:“一起帮·程序员客栈”筹办思路

忽略JavaScript

在很长一段时间内,所有的搜索引擎都会自动忽略JavaScript内容,既不会收录,也不会运行。

首先,spider的目的是获取有用信息,Javascript是程序代码,首先就不是spider的目标

其次,如果spider运行JavaScript,会造成一些无法控制的结果,甚至被恶意攻击。最简单的,就是做一个死循环,让spider一直在里面转不出来。

最后,通过JavaScript获取的内容,如何用链接的形式呈现呢?

但现在大量的前后端分离技术的使用,对搜索引擎提出了巨大的挑战!现目前可以肯定的是,一些简单的JavaScript代码及其结果,Google已经可以收录。但保险起见,前后端分离的项目,还是建议做一个“服务端渲染”的工作。

静态URL

无论是为了SEO,还是为了“用户友好”(好看),都应该更好的组织url,让其

  • 更有层次感
  • 少用url参数

对比:



不好
所有文章
/Article

yezi发布的所有文章
/Article/yezi
/Article/ByAuthor?name=yezi
yezi发布的分类id为1的所有文章
/Article/yezi/category-1
/Article/ByCategory?id=1
yezi发布的、分类id为1、自身id为186的文章
/Article/yezi/category-1/186
/Article/Single?id=186

作业

SEO 开发技术
觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 Web开发基础 中继续学习:

我们的 特色

  • 先学习,后付费
  • 线上/线下,自由组合

更多了解

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧