一、为什么学习爬虫?
处于大数据时代:
企业产生的数据:
大型的公司有大量的用户,每天都会产生大量的数据,
大公司会对数据进行统计和归类,中小型公司也开始收集和整理数据
百度指数、新浪指数、BAT腾讯浏览指数
数据平台:
通过各行各业的数据汇总,会花费大量的人力物力取收集数据
数据堂、贵阳数据平台
政府/机构:
是由地方政府机关单位逐级的上报,最终由国家汇总
中华人民共和国国家统计局数据
数据管理咨询公司:
通过大量的人力整理各行各业的数据,会和其他公司合作和专家合作呈现大量的数据
麦肯锡 埃森哲 艾瑞咨询
爬虫:
如果以上的数据平台不能够满足我们的数据需求的时候,或者说数据的价格非常昂贵,这时我们就可以通过爬虫去获取数据
什么是爬虫?
爬虫:网络爬虫机器人,从互联网自动抓取数据的程序
理论上:通过浏览器看到的数据,我们都能爬到爬虫的作用:
- 搜索引擎
- 商品比价(惠惠购物助手)
- 知乎数据分析平台(知乎专栏、数据冰山)
- 如何写一个爬虫?
网页的三大特征:
- 每一个网页都有一个唯一的URL(统一资源定位符),来进行定位
- 网页都是通过HTML(超文本)文本展示的
- 所有的网页都是通过HTTP(超文本传输协议)或HTTPS协议来传输的
爬虫的流程:
- 分析网站,得到目标URL
- 根据URL,发起请求,获取页面的HTML源码
- 从页面源码中提取数据:
a、提取到目标数据,做数据的筛选和持久化存储
b、从页面中提取到新的URL地址,继续执行第二步操作
- 爬虫结束:所有的目标URL都提取完毕,并且得到数据了,再也没有其他请求任务了,这时候就看意味着爬虫结束了
爬虫需要掌握的基本知识:
四个阶段(印象笔记)
并不是只有Python写爬虫:
- PHP
用来写后端,对异步和多任务处理不是太好,爬虫是一个工具性的程序,对效率要求比较高
- Java
是Python的竞争对手,Java语言生态系统比较完善,对各模块的支持也比较好,但是Java这门语言是比较笨重的,重构和迭代的成本比较高
- C/C++
同样可以写爬虫,语言比较晦涩,学习的门槛比较高,是一门偏底层的语言,代码成型比较慢
- python
语法简单简洁,第三方的模块比较丰富,关于爬虫的网络请求模块(URL、requests)和网络解析模块(lxml、BeautifulSoup、pyQuery)也比较多,并且有从高效稳定的scrapy网络爬虫框架,以及scrapy_redis分布式爬虫框架,python也是一门胶水语言,对于其他语言的调用也比较方便
爬虫的分类:
- 通用爬虫:
- 是搜索引擎的重要组成部分
- 目的:
尽可能的将所有的互联网上的网页下载到本地,经过预处理(去噪、分词、去广告等等),最终将数据存储到本地,做一个镜像备份,形成一个检索系统
- 通用爬虫抓取网页的流程:
1、选取一部分的URL作为种子URL,将这些URL放入到带爬去的任务队列里面
2、从带爬取的任务队列中取出URL,发起请求,将获取到的网页源码存储到本地,并将已经爬取过的URL放入已爬取的队列中
3、从已爬取URL的响应结果中,分析提取其他的URL地址,继续添加到待爬取队列中,之后就是不断的循环,知道所有的URL都提取完毕
通用爬虫中的种子URL如何获取
1、通过网站提交自己的网站地址(https://ziyuan.baidu.com/linksubmit/url)
2、搜索引擎会和DNS服务商(DNS服务:将我们的域转换为对应IP的一种技术)合作,拿到最新的网站地址
3、 网站中包含的其他外链
通用爬虫的整体流程:
数据的获取 -> 预处理(分词,去噪,去广告……)-> 存储 -> 提供检索接口|排名(网站排名)
网站排名:
1、根据用户的访问量,网站的流量越多,越靠前
2、竞价排名:谁出价高,谁就排在前面
通用爬虫的缺点:
1、必须遵守robot协议
就是一个规范,告诉搜索引擎,哪些目录下的资源允许爬取,哪些目录下的资源不允许爬取(https://www.taobao.com/robots.txt)
"User-agent":该项值用来表示是哪家的搜索引擎
"allow":允许被爬取的URL
"disllow":不允许被爬取的URL
2、搜索引擎返回的都是网页,并且返回的90%的都是无用的数据
3、不能够根据不同的用户的需求或者检索结果返回不同的结果
4、通用爬虫对于媒体的文件不能够获取
- 聚焦爬虫
聚焦补充是面向主题的爬虫,再爬取数据的过程中会对数据进行筛选,往往只会爬虫与需求相关的数据
网友评论