说明:本文章内容学习自“三 节 课”平台的《人人都能学会的数据爬虫课》。
产品和运营工作中,经常需要做出大量的决策,在很多时候决策的做出是需要靠数据进行支撑的,数据能够让我们避免自己的主观判断。
如何获取到未经行业机构处理过的数据,拿到热乎的一手资料呢?爬虫,能实现大部分(80%)的网站数据的抓取。
一、爬虫的应用场景
1、爬虫(网络爬虫/spider/数据抓取):自动抓取万维网的程序或脚本。
2、常见应用场景和功能
(1)市场营销
a、搜索引擎优化(Search Engine Optimization):获取本品和竞品排名,优化搜索引擎方案。
b、市场研究(Market Research):市场容量的研究和市场行业趋势的变化。
c、潜在客户/线索(Lead Generation):对知乎等各种话题关注者,微博粉丝进行定向推送。
(2)竞品分析
a、舆情分析(Reviews and Sentiments):社交媒体/购物网站里评论里收集反馈与舆情分析。
b、竞品社交媒体发布及其粉丝(Content Approach and Followers):竞品最近发布了什么内容,转化粉丝。
c、价格对照(Price Comparison):根据CPI(居民消费价格指数)价格动态波动。
d、变化检测(Change Detection):竞品促销,价格变化,品类扩充。
(3)职业发展与个人生活
a、求职招聘(Job Hunting and Recruiting):求职者定向求职,Hr定向挖人。
b、产品和服务(Products and Services):比较价格和口碑。
c、财务规划(Financial Planning):证券专家的评论。
d、买/租/卖(Looking to Buy/Rent/Sell)。
二、常见抓取工具
1、excel。(简单的table布局适用)
2、第三方工具:火车头,八爪鱼。
3、web Scraper。
4、Python Scraper。
三、Excel抓取简单的数据
操作步骤说明
1、打开可抓取的网页,F12检查元素,NetWork项,选择Filter,刷新重新加载页面,得到对应的xml文件,右键 open in new tab就可以看到相应网站内所有要抓取的信息。
2、打开Excel,选择数据标签页,点击自网站,输入要抓取的信息网址,黄色标记点绿,加载完后点击导入即可。
Excel作为抓取工具的总结:
1、用excel的学习成本较低,上手快;
2、可以用excel的一些工具对数据进行操作,比如上图中的全部刷新(实时获取网站数据),以及分列,合并计算等小工具的使用;
3、局限性较大,只能对一些老的以table布局的网站起作用。
四、爬虫插件 web Scraper
能翻墙的请直接在谷歌应用商店,搜索webscraper,添加扩展程序,自动安装好后就可以直接使用了。不能翻墙的请自行百度。
1、页面可视范围内基本元素的抓取
新建站点地图create new sitemap(import sitemap 需要用到JSON格式的特殊代码),选择multiple,再点击select,点选页面要选中的元素,点选两个之后,插件就可以自动识别到所有要点选的同类元素。(从代码的角度设想该插件的原理应该是,批量获取页面中同种级别元素内的text文本内容)
建好选择器之后,我们就可以预览各种效果,然后可以开始抓取了:点击Scrape,直接Start Scraping,抓取完毕之后会有成功的提示,此时我们可以把抓取好的数据,选择是否导出(点击Export Date As CSV)。
此方法只能下载一个页面初始加载时的数据量。这个不难想象,因为页面的数据是由鼠标滚轮滚动时访问数据库进行页面加载的,元素的内容都是页面事件触发后生成的,所以获取不到。
开个脑洞:如果能写个脚本,让程序自动触发鼠标的滚动事件,那是不是就能获取到更多呢?
2、分页的所有元素抓取
元素分页的规律性,对要抓取的网页page进行限定。
对新建的站点地图进行编辑,Edit Metadata,对照url上呈现的翻页规则,将Start URL里对应的翻页规则进行改变。规则是:[想抓取的初始页码值-想抓取得结束页码值:页码差值]。
比如豆瓣这个网页的翻页规律是start参数依次加25,等差数列,差值为25,所以可以写成:
https://movie.douban.com/top250?start=[0-500:25]&filter=
一般规律为page,一页一页加法,所以写成 page=[1-23]
建好之后,遵照 1、的方法,新建selector,最后进行scrape就可以了。
3、多元素抓取---进阶
(1)、一个页面如何抓取多个元素呢?
(2)、现今流行的滚动或交互式动态加载(不规则分页)模式下又该如何抓取元素内容呢?
(3)、快捷键快速选中某个元素;
(4)、用链接采集二级三级页面;
(5)、抓取图片和表单的方法;
概念总结:以上各种方法其实根据的原理都是页面元素,模拟浏览器事件,对浏览器加载出来的页面中的元素内容或者资源进行提取。
4、详细进阶方式(80%)
(1)一个页面抓取多个元素(一般是相关联的元素)
同之前的例子,先新建一个站点地图。
为此站点新建一个选择器,type为element,Multiple多选,选中所有大标签,done selecting后可预览一下选中的项
选中大层级元素保存好外层选择器后,点击选择器,进入子选择器页面,再次add selector,添加子层选择器。
选中子层级元素添加了多个子层选择器后,可以预览一下效果是否如你所愿。
多个选择器可以先预览效果 抓取得到的元素结果集预览最后,就可以用之前的招数,开始进行scrape抓取,生成csv了。
(2)不规律分页的抓取
初始步骤同上,新建站点地图,再新建选择器,如下图,选择好要抓取的元素,选择好需要浏览器自动执行点击事件的元素“加载更多”,点击类型选择click more,告诉浏览器要一直加载完成方能结束,click element uniqueness 告诉浏览器,当点击选择器变成什么样子了就不需要再继续进行了,一般有 unique text(文本变化),html + text(网址或文本变化),html (网页变化),css selecor(选择器的样式变化)。
新建一个Multiple属性的Element click类型,selector指向大元素
新建一个click selector,指向加载更多元素 在上面的基础上,新建一个子选择器,选择公司名所在的元素 子选择器按一般的规则来,text类型,非multiple,selector选中标题文本结束上述步骤后抓取就可以了。抓取的速度有时会很慢,需要耐心等待。
抓取的结果示意图,可保存成csv(3)快捷键抓取
点击selector选择元素后,点击Enable Key开启键盘操作,鼠标悬停,等采集字段变绿后按键盘:S=选中;P=父类;C=子类。
可通过键盘的S,P,C进行鼠标悬停选取(4)用链接采集二级三级页面
按Element方法圈好要抓取的元素大类。
element类型的抓取抓取子元素招股说明书名称。type为text类型
在element类型大类中,抓取说明书名称子类再抓取一个子类,招股说明书发布的日期。type为text类型
在element类型大类下抓取日期子类接下来抓取列表的三级页面链接,注意新建的选择器type为link类型。
在Element大类下,抓取页面的链接子类要抓取的类的层级结构如下:
downfile为大类选择器名称,此图中展示的是大类下的三个要抓取的子类以上就绪之后,我们还需要在三级页面中设置一个link选择器。
打开三级页面(选择一个招股说明书点击打开新页面),在上一次设置的link选择器的子级,新建一个选择器,type为link,链接到对应的下载按钮即可。
明细页面新建一个link类型的选择器,选择页面的下载按钮 层级关系以上都设置完成后,即可点击进行抓取。
抓取的过程中,插件会自动将页面的二级三级页面依次打开,并进行抓取,抓取完成后生成的是一个带有下载链接的数据包。此时我们可以通过迅雷或者QQ旋风批量下载功能,对需要的文件进行下载。
下载的CSV数据文件Q:link类型和Element Click等类型有什么区别?
A:以上两种类型都能进行采集二级或者三级页面数据,但,新链接为A标签时,Type都可以用Link,采集URL时,必须要用link类型。非A标签必须要把type设为Element click等类型才可以采集二三级页面。
(5)抓取图片和表单
a.抓取图片
一般抓取图片的链接再用工具进行批量比较合适,type有为image的项。
b.抓取表单Table
抓取table的头和数据子类至此,数据爬虫基本方法介绍完毕。
五、常见反爬虫方法。
(1)反爬虫常见手段和应对方法:
a文件头 user-agent检查:访问设备返回数据进行检查;
b动态加载(Ajax Javascript等):实时更新;
c用户行为(cookies+请求时间间隔):频率太高则临时黑名单;
d人机交互验证:图形验证码等;
反爬应对方法:
web scraper用浏览器避免user-agent检查,将cookies传输过去所以不会被检查,是浏览器所以可以实现ajax javascript等方法,设置了时间间隔所以不会被查封。
(2)反爬中的奇葩
web scraper对于有些情况是无法抓取的。
比如
a美团网网页端的团购价格,是使用的雪碧图(小图片集合到大图中,根据定位来显示价格),页面中无法抓取到对应的元素,所以无法抓取到团购价格。但是手机端可以抓取。
b去哪儿网机票价格是用的元素位移,手机端用字体替换。
网页端方式:1240 = 1 6 1 0 + 2 4(抓取下来用excel进行替换,或者脚本进行替换抓取等方法)
手机端方式:用ttf字体文件,将0123456789顺序替换为0153246987。
c将结果解析为图片。
对于这些奇葩网站的反爬技术,需要有高超的应对方法。
但是暂时还没有攻略。
平台给的作业。http://pm25.in/rank
作业进阶
麦淘
http://m.maitao.com/classify/null?ids=1
IT桔子
网友评论