爬虫相关
爬虫的概念
爬虫的工作原理
HTTP
网络爬虫爬取过程可以理解为,模拟浏览器操作的过程。
浏览器的主要功能是向服务器发送请求,在浏览器窗口中展示你选择的网络资源,HTTP是一套计算机通过网络进行通信的规则。
HTTP通信由两部分组成:客服端请求消息与服务端响应消息
1.当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为两种"GET"和"POST"。
2.当我们在浏览器输入URL https://www.baidu.com的时候,浏览器发送一个Request请求去获取https://www.baidu.com的html文件,服务器把Response文件发送给浏览器。
3.浏览器分析Response中的HTML,发现其中引用了很多其他文件,比如Image文件,CSS文件,JS文件,浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
4.当所有文件都下载成功后,网页会根据HTML语法解构,完整的显示出来了。URL:统一资源定位符,是用与完整地internet上网页和其他资源的地址的一种标识方法。
基本合适如下;
1.scheme:协议(如:http,https,ftp)
2.bost:服务器的IP地址或域名
3.port:雾浮起的端口(如果是走协议默认端口,缺省端口80)
4.path:访问资源的路径
5.query-string:参数,发送给http服务器的数据
6.anchor;锚(跳转到网页的指定锚点位置)
爬虫知识站
1.Python的基本语法知识(已经搞定)
2.如何爬取HTML页面:
HTTP请求的处理,urllib,urllib2,requests
处理后的请求可以模拟浏览器发送请求,获取服务器响应的文件
3.解析服务器响应的内容
re,xpath,BeautifulSoup4(bs4),jsonpath,pyquery等
使用某种描述性一样的来给我们需要提取的数据定义一个匹配规则,
符合这个规则的数据就会被匹配。
4.如何采集动态HTML,验证码的处理
通过动态页面采集:Selenium + PhantomJS(无界面):模拟真实浏览器加载js,ajax等非静态页面数据。
Tesseract:机器学习库,机器图像识别系统,可以处理 简单的验证码,复杂的验证码可以通过手动输入/专门的打码平台去处理。
5.Scrapy框架:(Scrapy,Pyspider)
高定制性高性能(异步网络框架twisted),所以数据下载速度非常快,提供了数据存储数据下载还有提取规则等组件,规则就是xpath。
6.分布式策略:(中小型公司用不到这么大的,人员成本机器成本是否大与经济成本)
scrapy-redis,在Scrpay的基础上添加了一套以以Redis数据库为核心的一套组件。
让Scrapy框架支持分布式的功能,主要在Redis里面做请求指纹去重(如果爬整站,需要用分布式,不同的线程爬虫要爬取不同的页面,做到批量分布式去重),请求分配,数据临时存储。
7.爬虫————反爬虫————反反爬虫之间的斗争:
(爬虫最后最难的不是复杂页面的获取,晦涩数据的采集,难的是跟网站后台人员斗智斗勇)
最早反爬用的是User-Agent,(一秒钟多少点击),用代理,验证码,(不是所有都是12306的),动态数据加载,加密数据(数据加密有马脚,核心密钥会存在js脚本里面),很多到代理这一块就可以了。
数据价值,是否值得去费劲做反爬虫。
1.机器成本 + 人力成本 > 数据价值,就不反了,一般做到封IP就结束了。
2.面子战争.....
爬虫和反爬虫之间的斗争,很多时候是爬虫获胜!
为什么?只要是真实用户可以浏览的网页数据,爬虫就一定能爬下来。
根据使用场景对爬虫分类
通用爬虫
1.通用爬虫:搜索引擎用的爬虫系统。
1.1目标:就是尽可能的把网上的所有页面下载下来,放到本地服务器里面形成备份
再对这些页面做相关处理(提取关键字,去掉广告),最后提供一个用户检索接口。(百度快照就是拿其他网页的数据,提取关键字,在自己数据库里面做备份)
#提供网页用户接口,但是通用引擎爬虫,最大的缺陷就是不能把图片,视频拿出来。
2.抓取流程:
a.首先选取一部分已有的URL,把这些URL放到待爬取队列。
b.从队列里取出这些URL,然后解析DNS得到主机IP,一个域名一定会对应一个ip地址,一个ip地址不一定有域名。然后取这个IP对应的服务器里下载HTML页面,保存到搜索引擎的本地服务器里。
最后把这个爬取过的URL放入已爬取队列。
c.分析这些网页内容,找到网页里其他的URL链接,继续执行第二步,直到爬取条件结束。
顺便带一下:
浏览器打开百度百度后台发生了什么?要求从协议层的角度来说,不是tcp,ip是http协议角度来说:
http,https,ftp这三个都是建立在TCP,IP协议基础上的,讲到前三个协议默认TCP,IP协议是成功的。
如果在百度上回车敲一个电影,首先他会把电影地址发送到DNS服务商做解析,DNS就是把域名解析成IP的一种技术。
#如果你在cmd命令太直接数据"ping www.baidu.com"他会给出ping地址"182.61.200.7",把这个ping放到浏览器上它也能到百度首页,每台机器的ping值不同,这样就不经过DNS服务商做解析了。
3.搜索引擎是如何获取一个新网站的URL(三种方式):
1.主动向搜索引擎提交这个网址。去(zhanzhnag.baidu.com/linksumit/url)提交,后台审核之后再去添加。
2.在其他网站设置网站的外链,如(网站上的友情外链)
3.搜索引擎会和DNS服务商进行合作,可以快速收录新的网站。(因为新网站一定会有人去提交)
4.通用爬虫并不是万物皆可爬,它也需要遵守一定的规则:
Robots协议:协议会指明通用爬虫可以爬取页面的权限。
Robots.txt只是一个建议,并不是所有爬虫都遵守,一般只有大型的搜索引擎爬虫才会遵守,
个人写的爬虫就不管它了,防君子不防小人。如果被其他网站发现,可以会告侵权。
5.通用爬虫的工作流程:爬取网页 存储数据 内容处理 提供检索/排名服务
6.搜素引擎排名:
1.PageRank值:根据网站的流量(点击量/浏览量/人其)统计,流量越高排名越靠前,网站也越值钱。
2.竞价排名:谁给钱多,谁排名就越高。(可能查询,也可能不查询)
7.通用爬虫的缺点:
1.只能提供文本相关的内容(HTML,WORD,PDF)等等,但是不能提供更多媒体文件(音乐,图片,视频)和二进制文件(程序啊,脚本啊)
2.提供的结果千篇一律,不能针对不同领域的人提供不同的搜索结果。
3.不能理解人类语义上的检索。
这样就诞生了聚焦爬虫
聚焦爬虫
聚焦爬虫:爬虫程序员写的针对某种内容的爬虫。
面向主题爬虫,面向需求爬虫:会针对某种特定的内容去爬取信息,而且会保证信息和需求进可能相关。