有数据意识的中小型企业,也开始积累自己的数据;
通常这样的公司有很庞大的数据采集团队,一般会通过市场调研,问卷调查、固定的样本检测、和各行各业的公司进行合作、专家对话(数据积累了很多年了,最后得出的结果)等方式获得数据。
爬虫:就是抓取网页数据的程序;
* 1、每个网页都有自己唯一的URL(统一资源定位符)来进行定位;
* 2、网页都使用HTML(超文本标记语言)来描述页面信息;
* 3、网页都使用HTTP/HTTPS(超文本传输协议)协议来传输HTML数据。
* 1、首先确定需要爬取的网页URL地址;
* 2、通过HTTP/HTTPS协议来获取对应的HTML页面;
* 3、提取HTML页面里有用的数据:
- a、如果是需要的数据,就保存起来。
- b、如果是页面里的其他URL,那就继续执行第二步。
可以做爬虫的语言有很多,如PHP、Java、C/C++、Python等等...
PHP 虽然是世界上最好的语言,但是它天生不是干这个的,而且对多线程、异步支持不够好,并发处理能力很弱;
爬虫是工具性程序,对速度和效率要求比较高;
Java 的网络爬虫生态圈也很完善,是python爬虫最大的对手。但是Java语言本身很笨重,代码量很大。
重构成本比较高,任何修改都会导致代码的大量变动,爬虫经常需要修改部分采集代码。
C/C++ 运行效率和性能几乎最强,但是学习成本很高,代码成型比较慢;
能用C/C++做爬虫,只能说是能力的表现,但是不是正确的选择。
Python 语法优美、代码简洁、开发效率高、支持的模块多,相关的HTTP请求模块和HTML解析模块非常丰富;
还有强大的爬虫Scrapy,以及成熟高效的scrapy-redis分布式策略。
而且,调用其它语言的接口也非常方便(胶水语言).
HTTP请求的处理:urllib,urllib2,requests
处理后的请求可以模拟浏览器发送请求,获取服务器响应的文件;
re、xpath、BeautifulSoup4(bs4)、jsonpath、pyquery等。
使用某种描述性语言来给我们需要提取的数据定义一个匹配规则,
符合这个规则的数据就会被匹配;
通用的动态页面采集:Selenium + PhantomJS(无界面浏览器):模拟真实浏览器加载js、ajax等非静态数据;
Tesseract:谷歌维护机器学习库,机器图像识别系统,可以处理简单的验证码;复杂的验证码可以通过手动输入或者使用第三方打码平台;
高定制性,高性能(使用了异步网络框架 twisted ),所以数据下载速度非常快,并且支持高并发;
提供了数据存储、数据下载、提取规则等组件。
scrapy-redis:在Scrapy的基础上添加了一套以redis 数据库为核心的组件;
让Scrapy框架支持分布式的功能,主要在Redis里做请求指纹去重、请求分配、数据临时存储。
其实爬虫做到最后,最头疼的不是复杂的页面,也不是晦涩的数据,而是网站另一端的维护人员;
反爬虫方式迭代:
User-Agent、代理、验证码、动态数据加载、加密数据。
反爬虫一般就到“代理”阶段就截止了:数据价值,是否值得去费劲做反爬虫。
1、机器成本 + 人力成本 > 数据价值,就不反了,一般做到封IP就结束了;
2、面子的战争:
爬虫和反爬虫之间的斗争,最后一定是爬虫获胜!
为什么?只要是真实用户可以浏览的网页数据,爬虫就一定能搞定。
-1 目标:就是尽可能把互联网上的所有网页下载下来,放到本地服务器里形成备份;再对这些网页做相关处理(提取关键字、去掉广告、),最后提供一个用户检索接口。
-2 抓取流程:
a) 首先选取一部分已有的URL,把这些URL放到待爬取队列;
b) 从队列里取出这些URL,然后解析DNS得到主机IP,然后去这个IP对应的服务器里下载HTML页面,保存到搜索引擎的本地服务器;之后把这个爬过的url放入已爬取队列;
c) 分析这些网页内容,找出网页里其他的URL链接,继续执行第二步,直到爬取条件结束;
-3 搜索引擎是如何获取一个新网站的URL:
1.主动向搜索引擎提交网址;zhanzhang.baidu.com/linksubmit/url,
2.在其他网站里设置网站的外链;
3.搜索引擎会和DNS服务商进行合作,可以快速收录新的网站;
DNS: 就是把域名解析成IP的一种技术;
-4 通用爬虫并不是万物皆可爬的,它也需要遵守规则:
Robots协议:协议会指明通用爬虫可以爬取网页的权限;
Robots.txt 只是一个建议,并不是所有爬虫都遵守,一般只有大型的搜索引擎爬虫才会遵守;
https://www.taobao.com/robots.txt
https://www.qq.com/robots.txt
咱们个人写的爬虫,就不管robots协议了。
-5 通用爬虫工作流程:爬取网页...存储数据...内容处理...提供检索/排名服务
-6 搜索引擎排名:
1.PageRank值:根据的网站的流量(点击量/浏览量/人气)统计,流量越高,网站也之前,排名越靠前。
2.竞价排名:谁给钱多,谁排名就高。
-7 通用爬虫的缺点:
1.只能提供和文本相关的内容(HTML,Word,1.PDF)等等,但是不能提供多媒体(音乐、图片、视频)和二进制文件(程序、脚本)等;
2.提供的结果千篇一律,不能针对不同背景领域的人提供不同的搜索结果;
3.不能理解人类语义上的检索。
为了解决通用爬虫的问题,聚焦爬虫出现了:
面向主题爬虫,面向需求爬虫,会针对某种特定的内容去爬取信息,而且会保证信息和需求尽可能相关;