爬虫技术栈点

Posted python-368

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫技术栈点相关的知识,希望对你有一定的参考价值。

爬虫相关

爬虫的概念

爬虫的工作原理

HTTP

  • HTTP工作原理
网络爬虫爬取过程可以理解为,模拟浏览器操作的过程。
浏览器的主要功能是向服务器发送请求,在浏览器窗口中展示你选择的网络资源,HTTP是一套计算机通过网络进行通信的规则。
  • 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.不能理解人类语义上的检索。
这样就诞生了聚焦爬虫

聚焦爬虫

聚焦爬虫:爬虫程序员写的针对某种内容的爬虫。
面向主题爬虫,面向需求爬虫:会针对某种特定的内容去爬取信息,而且会保证信息和需求进可能相关。

以上是关于爬虫技术栈点的主要内容,如果未能解决你的问题,请参考以下文章

scrapy按顺序启动多个爬虫代码片段(python3)

scrapy主动退出爬虫的代码片段(python3)

python爬虫学习笔记-M3U8流视频数据爬虫

常用技术汇总

NIH周三讲座视频爬虫

Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段