大话网络爬虫

爬虫的简单介绍

首先呢,今天要介绍的爬虫不同于我们日常生活中见到的昆虫,而是在网络世界中从网站中抓取数据的网络爬虫。我们日常百度搜索引擎中可以查询到诸如知乎,微博等网站的信息都要归功于爬虫,二者一个提供内容,一个提供流量,相得益彰。

比如说tophub这个网站,他上面集成了知乎,微信,b站,豆瓣等网站的热榜,网站建造的初衷是为了告别各大网站的智能推荐,他只是提供了一个平台,涉及到详情都会跳转到各网站的原始网页,不抓取正文内容。

robots.txt

各行都有各行的规矩,提到爬虫就不得不说一下robots.txt这个文件,他是一个网站和爬虫间的协议,声明了对应的爬虫被允许的权限,我们在爬取之前最好也能够查阅下文件,看看自己要爬取的内容是否是被允许的。

下面给大家介绍下几个字段含义:

User-agent  标识允许的机器人种类,*泛指所有
Disallow  标识不被允许的访问路径
Allow 标识被允许的访问路径

下面为大家列举常见网站的爬虫名称:

百度蜘蛛:Baiduspider
谷歌蜘蛛:Googlebot
360蜘蛛:360Spider
有道蜘蛛:YoudaoBot,YodaoBot
MSN蜘蛛:msnbot
必应蜘蛛:bingbot
字节跳动:ByteSpider

下面列举几个网站的robots.txt文件,便于理解:

// https://www.taobao.com/robots.txt
User-agent: Baiduspider
Disallow: /

User-agent: baiduspider
Disallow: /

通过查看淘宝的文件,可以发现淘宝唯独禁用了百度的搜索引擎蜘蛛,在这个流量为王的时代,如果百度可以搜到淘宝的店铺,久而久之,百度就可以把商品的流量引向其他电商平台,这对淘宝无疑是一项损失,淘宝不禁用其他个人账户的原因也很明显,因为他需要其他个人或者网站对他的商品进行推广。

https://www.toutiao.com/robots.txt
User-agent: *
Disallow: /
Allow: /complain/
Allow: /media_partners/
Allow: /about/
Allow: /user_agreement/
Allow: /$

User-agent: ByteSpider
Allow: /

User-agent: ToutiaoSpider
Allow: /

可见,他对于ByteSpiderToutiaoSpider是放行的(自己人),而对于其他引擎,则是规定了可以访问的几个路径,特别说明 Allow: /$表示,可以抓取以/结尾的路径,我不是很理解这样写的含义,知道的小伙伴希望能够留言告诉我。

本次会以爬取知乎为例进行介绍,由于知乎的robots文件过长,这里就不列举了。值得注意的是,他还单独添加了一个对Bytespider的“禁令”,这个听名字就像是字节跳动的爬虫,实际上也是哈,这里面还有一些历史渊源。19年6月份开始字节的小爬虫就开始从各大网站疯狂爬取内容,当年经常把一些小网站直接爬瘫痪掉,所以很多网站对他也是敬而远之。有没有突然发现多涉猎一些还是挺有意思的,无意间会发现一些“陈年往事”。

爬取知乎热榜

我们爬取的网站有些是需要登录的,这类网站的爬取一般是比较复杂的,入门阶段我们可以选择一些暴露在公网的链接,例如同样是知乎热榜http://zhihu.com/hot是需要登录的,而http://zhihu.com/billboard则无需登录,由于我们不涉及商用或者谋取利益,所以本次行为并不违反法律,本次实现使用的是JavaScript

准备:

  • node环境
  • axios // 网络访问
  • cheerio // 解析返回的html文字

Let’s go!

var fs = require("fs")
var cheerio = require("cheerio")
var axios = require("axios")

axios.get("http://zhihu.com/billboard").then(rst => {
	var $ = cheerio.load(rst.data)
	var divs = $(".Card a")
	var hotArray = []
	for (var i = 0; i < divs.length; i++) {
		var div = divs.eq(i)
		var hotNew = {
			title: div.find(".HotList-itemTitle").eq(0).text().trim(),
			metrics: div.find(".HotList-itemMetrics").eq(0).text().trim(),
			pic: div.find("img").eq(0).attr('src').trim()
		}
		hotArray.push(hotNew)
	}
	console.log(hotArray.length)
})

单看代码还是比较容易理解的,billboard接口返回的是一个页面,如下图所示:

通过f12可以看到热榜的html源代码,在class="Card"div下有若干个以下代码结构:

<a class="HotList-item" data-za-detail-view-path-module="FeedItem" data-za-extra-module="{&quot;attached_info_bytes&quot;:&quot;CjcIABADGgg2NzAwMDA3NiCtzqGHBjAPOK8EQAVyCTQ3MTI0MjgwNHgAqgEJYmlsbGJvYXJk0gEA&quot;}">
   <div class="HotList-itemPre">
    <div class="HotList-itemIndex">06</div>
    <div class="HotList-itemLabel" style="color: rgb(241, 64, 60);"></div>
   </div>
   <div class="HotList-itemBody">
    <div class="HotList-itemTitle">
     滴滴全家桶被下架事件,给中国互联网行业带来哪些影响和警示?
    </div>
    <div class="HotList-itemExcerpt"></div>
    <div class="HotList-itemMetrics">455 万热度</div>
   </div>
   <div class="HotList-itemImgContainer">
    <span></span>
    <img src="https://pic3.zhimg.com/80/v2-7f0a525ce7ceccb86a1d0229dce2ab50_720w.png" alt="滴滴全家桶被下架事件,给中国互联网行业带来哪些影响和警示?" />
   </div></a> 

然后通过for循环来解析每一个热点条目的标题,热度以及图片链接。根据解析的对象数组,在前端页面中将热点根据自己的需求进行展示。

结尾

以上就是爬虫的原理以及简单实现,简单梳理下实现“爬虫”的三个步骤

  • 抓包,获取请求的url以及相关参数,可以通过浏览器network,或者更高级的抓包工具fidderwireshark等完成
  • 爬取,根据抓取的url模拟发送请求
  • 解析,可以使用html解析工具,复杂的可以通过xpath、正则来解析返回的内容

这里啰嗦一句,大家的用户名密码,千万不要在不可信的第三方的网站输入,比如一些信用卡助手,可以帮你接收多个信用卡的信息。提醒还款,但是一旦获取到你的用户名密码,就可以通过爬虫模拟请求获取你信用卡的很多私密信息,更有甚者,可以使用“套壳”操作模仿用户发送验证码,然后诱导你把验证码发给他们。他们窥探到你的信息,可能远比你知道的多。

最后,欢迎大家pick我的视频,多提宝贵意见!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值