目标:对不懂技术的同学分享爬虫,帮助其提高在工作的效率
Slogan
无须编程、不敲代码的爬虫技术
1.png
本次分享目标与价值
-
目标对象
- 不懂技术、不了解代码的产品同学
-
产品同学可能的收获
- 了解什么是爬虫和爬虫的使用场景;
- 了解web scraper的基本信息和使用场景;
- 能够上手使用web scraper,并提高工作生活中在数据获取过程中的效率;
分享内容
1. 什么是爬虫?
公式:爬虫(网络爬虫、spider、数据抓取) = 自动抓取万维网的程序或者脚本
爬虫抓取的范围:无法实现不能登录就下载论文、CSDN附件,仅能采集人眼能看到的所有页面元素。
所以说,爬虫就是代替人工规律性地采集和保存几千/万个页面上的一手数据。或者再通俗一点是让程序帮忙统计网页上的数据。
2. 数据抓取的常规场景(产品 - 竞品分析)
2.png3. Web Scraper
-
引入语:提到爬取网络上的数据爬虫,很多人第一反应我想应该是用代码编码的方式去爬取网络站点的数据,但是编码的门槛太高使得我们很多非技术专业的同学在数据抓取上不得不人工复制粘贴或者淘宝自费请人获取自己需要的数据。我们今天要介绍的Web Scraper是一个免费、易用工具,它作为浏览器的插件,几乎能够抓取所有的web 站点数据。
-
官网标语: Our goal is to make web data extraction esay and accessible for everyone.
-
应用场景:
- 统计公众号所有标题、时间
- 抓取知乎某个问题的所有回答阅读、点赞
3. 准备工作
-
浏览器安装:安装Chrome浏览器或者QQ浏览器
-
Web Scraper插件安装:Chrome扩展插件和QQ浏览器或者插件
-
百度网盘:链接:https://pan.baidu.com/s/1dV8xDGeG1GLvUimPLaFuKA 密码:yb3q
-
打开控制台:鼠标右键 -> 检查 或者 F12
WechatIMG608.jpeg
-
开始爬取第一个爬虫
-
爬取目标:用Web Scraper抓取 一个知识工作者陈伟华 在知乎上发布的文章标题
-
创建一个新站点:Dev Tool -> Create new sitemap -> import Sitemap -> 粘贴下面的代码 -> rename Sitemap (Optional)
WechatIMG609.jpeg
{"_id":"chenweihua","startUrl":["https://www.zhihu.com/people/chen-wei-hua-72/answers"],"selectors":[{"id":"title","type":"SelectorText","parentSelectors":["_root"],"selector":"[itemprop='zhihu:question'] a","multiple":true,"regex":"","delay":0}]}
-
开始爬取数据:Sitemap {sitemap name} -> Scrape -> Start scraping
WechatIMG610.jpeg
- 导出数据:Sitemap {sitemap name} -> Export data to CSV
-
自己设置参数抓取第二个爬虫 —— 以第一个爬虫为例
①创建一个新站点Create new sitemap
输入站点名(自定义)和网址(输入目标网址),点击Create sitemap确认按钮
WechatIMG615.jpeg
WechatIMG616.jpeg
②增加选择器,点击Add new selector
WechatIMG617.jpeg
- Type选择
- Selector选择:点击Selector 的 select按钮直接用鼠标选网页上的元素,绿色代表可采集的数据,点击后为红色锁定状态
- Multiple按钮:代表本页中需要抓取多个元素
-
Delay:填写500
WechatIMG618.jpeg
③开始爬取数据 Scrap
WechatIMG619.jpeg① 反爬虫当中的常见手段和应对方法
- 文件头user-agent检查:如果同一个user-agent请求过于频繁,会将其访问拒绝掉
- 动态加载(例如:Ajax):根据用户的操作去请求数据
- 用户行为(cookie+请求时间间隔):cookie秘钥失效之后,会需要重新登录
- 人机交互验证(例:图形验证码)
②如何确定要抓取的东西能够使用web scraper进行抓取
-
必须提供一个网址
-
在浏览器栏中访问这个页面,能够用眼睛看到
-
进阶用法
① 一页内抓取多字段(元素集)
操作方法:按照刚才第二个爬虫的方式,添加多个selector选择器
案例:58同城抓取房源信息https://bj.58.com/chuzu/?PGTID=0d100000-0000-17a9-c92b-9c6997da4d78&ClickID=2
{"_id":"tongchegn58","startUrl":["5858"],"selectors":[{"id":"house","type":"SelectorElement","parentSelectors":["_root"],"selector":"li.house-cell","multiple":true,"delay":0},{"id":"title","type":"SelectorText","parentSelectors":["house"],"selector":"a.strongbox","multiple":false,"regex":"","delay":0},{"id":"price","type":"SelectorText","parentSelectors":["house"],"selector":"div.money","multiple":false,"regex":"","delay":0},{"id":"address","type":"SelectorText","parentSelectors":["house"],"selector":"p.infor","multiple":true,"regex":"","delay":0}]}
②多页抓取
案例:抓取布棉老师知乎上的回答
第一页:https://www.zhihu.com/people/bumian/answers
第二页: https://www.zhihu.com/people/bumian/answers?page=2
第三页: https://www.zhihu.com/people/bumian/answers?page=3
第四页:https://www.zhihu.com/people/bumian/answers?page=4
....
第十三页:https://www.zhihu.com/people/bumian/answers?page=13
推导结论:第N页url:https://www.zhihu.com/people/bumian/answers?page=n
所以,我们只需要将Start URL修改为:https://www.zhihu.com/people/bumian/answers?page=[1-13]
[1-13]表示从第一页到十三页的每一页
[1-13:2],表示从第一页到第十三页,间隔为2的奇数页数据
③“不规律”分页
a. 下拉动态加载 - 下拉选择器
案例: 李笑来微博
ElementType: 下拉选择器(Element scroll down)
{"_id":"lixiaolai","startUrl":["https://weibo.com/bylixiaolai?refer_flag=1001030101_&ssl_rnd=1509760362.444&is_hot=1"],"selectors":[{"id":"item","type":"SelectorElementScroll","parentSelectors":["_root"],"selector":"div[nick-name]","multiple":true,"delay":0},{"id":"text","type":"SelectorText","parentSelectors":["item"],"selector":"_parent_","multiple":true,"regex":"","delay":0}]}
b. 点击“加载更多” -
案例:从IT橘子获取在线教育相关公司信息
ElementType:Element click
{"_id":"itjuzi001","startUrl":["https://www.itjuzi.com/search?data=%E5%9C%A8%E7%BA%BF%E6%95%99%E8%82%B2"],"selectors":[{"id":"company","type":"SelectorElementClick","parentSelectors":["_root"],"selector":".list-normal a","multiple":true,"delay":"100","clickElementSelector":".more span","clickType":"clickMore","discardInitialElements":"do-not-discard","clickElementUniquenessType":"uniqueCSSSelector"},{"id":"title","type":"SelectorText","parentSelectors":["company"],"selector":"h4","multiple":false,"regex":"","delay":0},{"id":"desc","type":"SelectorText","parentSelectors":["company"],"selector":"p","multiple":false,"regex":"","delay":0}]}
WechatIMG620.jpeg
提示:这个按钮会在⻚页⾯面最下⽅方,需要往下滑动⿏鼠标,才能看到按钮。点击选中后,⻚面会加载⼀一部分,这是正常现象。可以点击 “Select” 右侧的 “Element preview”,会看到 “加载更更多” 的按钮是被选中的
④采集二级、三级页面数据
案例:从IT橘子获取在线教育公司的详细信息
重点:如果想要抓取哪个页面,就先用Link(Element Type)选择器抓取它的url;然后在url指向的页面增加Link(Element Type)的子选择器,用来抓取新页面需要的信息
{"_id":"itjuzi002","startUrl":["https://www.itjuzi.com/search?data=%E5%9C%A8%E7%BA%BF%E6%95%99%E8%82%B2"],"selectors":[{"id":"company","type":"SelectorLink","parentSelectors":["_root"],"selector":".list-normal a","multiple":true,"delay":0},{"id":"compantName","type":"SelectorText","parentSelectors":["company"],"selector":"h1","multiple":false,"regex":"","delay":0},{"id":"homeId","type":"SelectorText","parentSelectors":["company"],"selector":"a.link-d","multiple":false,"regex":"","delay":0},{"id":"slogan","type":"SelectorText","parentSelectors":["company"],"selector":"h2.slogan","multiple":false,"regex":"","delay":0},{"id":"desc","type":"SelectorText","parentSelectors":["company"],"selector":"div.summary","multiple":false,"regex":"","delay":0}]}
网友评论