当前位置:主页 > 查看内容

一文学会爬虫技巧

发布时间:2021-08-12 00:00| 位朋友查看

简介:前言 作为冷数据启动和丰富数据的重要工具,爬虫在业务发展中承担着重要的作用,我们业务在发展过程中积累了不少爬虫使用的经验,在此分享给大家,希望能对之后的业务发展提供一些技术选型方向上的思路,以更好地促进业务发展 我们将会从以下几点来分享我们的……

前言

作为冷数据启动和丰富数据的重要工具,爬虫在业务发展中承担着重要的作用,我们业务在发展过程中积累了不少爬虫使用的经验,在此分享给大家,希望能对之后的业务发展提供一些技术选型方向上的思路,以更好地促进业务发展

我们将会从以下几点来分享我们的经验

  • 爬虫的应用场景
  • 爬虫的技术选型
  • 实战详解:复杂场景下的爬虫解决方案
  • 爬虫管理平台

爬虫的应用场景

生产上,爬虫主要应用在以下几种场景

  1. 搜索引擎,Google,百度这种搜索引擎公司每天启动着无数的爬虫去抓取网页信息,才有了我们使用搜索引擎查询资料的便捷,全面,高效(关于搜索引擎工作原理,在这篇文章作了详细的讲解,建议大家看看)
  2. 冷数据启动时丰富数据的主要工具,新业务开始时,由于刚起步,所以没有多少数据,此时就需要爬取其他平台的数据来填充我们的业务数据,比如说如果我们想做一个类似大众点评这样的平台,一开始没有商户等信息,就需要去爬取大众,美团等商家的信息来填充数据
  3. 数据服务或聚合的公司,比如天眼查,企查查,西瓜数据等等
  4. 提供横向数据比较,聚合服务,比如说电商中经常需要有一种比价系统,从各大电商平台,如拼多多,淘宝,京东等抓取同一个商品的价格信息,以给用户提供最实惠的商品价格,这样就需要从各大电商平台爬取信息。
  5. 黑产,灰产,风控等,比如我们要向某些资金方申请授信,在资金方这边首先要部署一道风控,来看你的个人信息是否满足授信条件,这些个人信息通常是某些公司利用爬虫技术在各个渠道爬取而来的,当然了这类场景还是要慎用,不然正应了那句话「爬虫用的好,监控进得早」

爬虫的技术选型

接下来我们就由浅入深地为大家介绍爬虫常用的几种技术方案

简单的爬虫说起爬虫,大家可能会觉得技术比较高深,会立刻联想到使用像 Scrapy 这样的爬虫框架,这类框架确实很强大,那么是不是一写爬虫就要用框架呢?非也!要视情况而定,如果我们要爬取的接口返回的只是很简单,固定的结构化数据(如JSON),用 Scrapy 这类框架的话有时无异于杀鸡用牛刀,不太经济!

举个简单的例子,业务中有这么一个需求:需要抓取育学园中准妈妈从「孕4周以下」~「孕36个月以上」每个阶段的数据

对于这种请求,bash 中的 curl 足堪大任!

首先我们用 charles 等抓包工具抓取此页面接口数据,如下

通过观察,我们发现请求的数据中只有 month 的值(代表孕几周)不一样,所以我们可以按以下思路来爬取所有的数据:

1、 找出所有「孕4周以下」~「孕36个月以上」对应的 month 的值,构建一个 month 数组 2、 构建一个以 month 值为变量的 curl 请求,在 charles 中 curl 请求我们可以通过如下方式来获取

3、 依次遍历步骤 1 中的 month,每遍历一次,就用步骤 2 中的 curl 和 month 变量构建一个请求并执行,将每次的请求结果保存到一个文件中(对应每个孕期的 month 数据),这样之后就可以对此文件中的数据进行解析分析。

示例代码如下,为了方便演示,中间 curl 代码作了不少简化,大家明白原理就好

  1. #!/bin/bash 
  2.  
  3. ## 获取所有孕周对应的 month,这里为方便演示,只取了两个值 
  4. month=(21 24) 
  5. ## 遍历所有 month,组装成 curl 请求 
  6. for month in ${month[@]}; 
  7. do 
  8.     curl -H 'Host: yxyapi2.drcuiyutao.com'  
  9.     -H 'clientversion: 7.14.1'  
  10.         ... 
  11.     -H 'birthday: 2018-08-07 00:00:00'   
  12.     --data "body=month%22%3A$month"  ## month作为变量构建 curl 请求 
  13.     --compressed 'http://yxyapi2.drcuiyutao.com/yxy-api-gateway/api/json/tools/getBabyChange' > $var.log ## 将 curl 请求结果输出到文件中以便后续分析 
  14. done 

前期我们业务用 PHP 的居多,不少爬虫请求都是在 PHP 中处理的,在 PHP 中我们也可以通过调用 libcurl 来模拟 bash 中的 curl 请求,比如业务中有一个需要抓取每个城市的天气状况的需求,就可以用 PHP 调用 curl,一行代码搞定!

看了两个例子,是否觉得爬虫不过如此,没错,业务中很多这种简单的爬虫实现可以应付绝大多数场景的需求!

脑洞大开的爬虫解决思路

按以上介绍的爬虫思路可以解决日常多数的爬虫需求,但有时候我们需要一些脑洞大开的思路,简单列举两个

1、 去年运营同学给了一个天猫精选的有关奶粉的 url 的链接

  1. https://m.tmall.com/mblist/de_9n40_AVYPod5SU93irPS-Q.html,他们希望能提取此文章的信息,同时找到天猫精选中所有提到奶粉关键字的文章并提取其内容, 这就需要用到一些搜索引擎的高级技巧了, 我们注意到,天猫精选的 url 是以以下形式构成的 
  1. https://m.tmall.com/mblist/de_ + 每篇文章独一无二的签名 

利用搜索引擎技巧我们可以轻松搞定运营的这个需求

对照图片,步骤如下:

  1. 首先我们用在百度框输入高级查询语句「奶粉 site:m.tmall.com inurl:mblist/de_」,点击搜索,就会显示出此页中所有天猫精选中包含奶粉的文章 title
  2. 注意地址栏中浏览器已经生成了搜索的完整 url,拿到这个 url 后,我们就可以去请求此 url,此时会得到上图中包含有 3, 4 这两块的 html 文件
  3. 拿到步骤 2 中获取的 html 文件后,在区域 3 每一个标题其实对应着一个 url(以 ..... )的形式存在,根据正则表达式就可以获取每个标题对应的 url,再请求这些 url 即可获取对应的文章信息。
  4. 同理,拿到步骤 2 中获取的 html 文件后,我们可以获取区域 4 每一页对应的 url,再依次请求这些 url,然后重复步骤 2,即可获取每一页天猫精选中包含有奶粉的文章

通过这种方式我们也巧妙地实现了运营的需求,这种爬虫获取的数据是个 html 文件,不是 JSON 这些结构化数据,我们需要从 html 中提取出相应的 url 信息(存在 标签里),可以用正则,也可以用 xpath 来提取。

比如 html 中有如下 div 元素

  1. <div id="test1">大家好!</div> 
可以用以下的 xpath 来提取
本文转载自网络,原文链接:https://mp.weixin.qq.com/s/Bd-wz_RiRpYv8ufIbQTZDg
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:Sentinel中的冷启动限流算法 下一篇:没有了

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐