如何编写一个高效的长尾关键词爬虫程序?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2009个文字,预计阅读时间需要9分钟。
1. 学习前准备【必看】近年来,因数据采集引发的争议越来越多,有的被罚款,有的被处罚款,个人爬虫笔记提醒大家:爬虫有风险,采集需谨慎,编写代码不能违法。
1.学习前置近年来由于抓取数据而引起的纠纷越来越多,有的锒铛入狱,有的被处罚金,本人爬虫笔记学习提醒大家:爬虫有风险,采集需谨慎,写代码不能违法,写代码背后也有法律风险
1.1爬虫注意点 1.1.1遵守Robots协议Robots协议,也称为爬虫协议、机器人协议等,全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉爬虫哪些页面可以抓取,哪些页面不能抓取
如何查看网站的rebots协议?
(1)打开浏览器,在地址栏中输入网站域名/robots.txt即可,以查询百度的robots协议为例;Disallow后边的目录是禁止所有搜索引擎搜索的
(2)或者借助相关网站进行查看,如站长工具等,浏览器打开s.tool.chinaz.com/robots,输入网站地址,点击查询即可
1.1.2.不过度采集数据过度数据采集会对目标站点产生非常大的压力,可导致目标站点服务器瘫痪、不能访问等,相当于网络攻击。学习过程中抓取数据不可贪多,满足学习需求即可,损害他人权益的事不能做
1.1.3.不要采集隐私数据有选择的采集数据,别人不让看的数据不要爬,私人数据不要爬,如手机号、身份证号、住址、个人财产等不要抓取,受法律保护的特定类型的数据或信息不能抓取
1.1.4.网站有声明”禁止爬虫采集或转载商业化”当采集的站点有声明,禁止爬虫采集或转载商业化,请绕行,不让爬的数据不要爬
1.1.5.不得将抓取数据用于商业化使用恶意利用爬虫技术抓取数据,进行不正当竞争,甚至牟取不法利益,会触犯法律,数据采集不得伤害他人利益
1.2.爬虫与爬虫工程师爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本,是搜索引擎的重要组成;爬虫可以用于以下场景:搜索引擎、数据分析、人工智能、薅羊毛、抢车票等
目前市面主流的爬虫产品有:神箭手、八爪鱼、造数、后羿采集器等
爬虫工程师简单点理解就是数据的搬运工
爬虫工程师技术储备
- python编程基础
- linux系统管理基础
- www.baidu.com/对应的IP地址,如果能获取到则直接使用hosts文件的解析结果;host文件在本地的C:\Windows\System32\drivers\etc目录下
3)如果Host文件中找不到,就会使用DNS协议来获取IP。在DNS协议中,PC会向你本地DNS求助,请求DNS服务器之后,得到百度的IP
4)接下来浏览器会请求获得的Ip地址对应的Web服务器,Web服务器接收到客户的请求并响应处理,将客户请求的内容返回给客户端浏览器
5)如果服务器正常则给你回个“OK”,状态码为200并将你要的数据传给你。你收到服务器的回复,是HTML形式的文本。浏览器必须能够理解文本的内容,并快速的渲染到屏幕上,渲染出来后,你就能看到百度的首页了
2.3.2.微观解析1)域名解析:同宏观解析,通过本地host文件查找;找不到,PC请求本地DNS帮忙;最后得到域名的IP
2)建立连接:
TCP三次握手:双向连接确认过程
- step-1 监听:首先client客户端和server服务端都处于LISTEN监听状态
- step-2 第一次握手(客户端):
- 客户端告诉服务端我要访问你,完成第一次握手;
- 详解为:客户端会发送一个TCP的SYN,并且标志位为1的这样一个数据包;同时指明客户端要连接服务器的端口;发送完毕后,客户端进入SYN_SYNSEND的状态;并完成第一次握手
- step-3第二次握手(服务端):
- 服务端告诉客户端我收到了你的SYN数据包,你的内容为SYN=1,并且返回一个ACK=1的数据包,和客户端的SYN=1一并打包发给客户端;
- 同时服务端由LISTEN状态变成SYN_RCVD状态;完成第二次握手
- step-4客户端发送ACK给服务端:
- 客户端再次访问服务端,并发送ACK=1确认数据包,跟服务端确认是否一致
- 发送完毕后客户端进入ESTABLISHED状态
- step-5第三次握手(服务端):
- 服务端收到客户端发过来的ACK=1数据包,确认无误后,同样进入ESTABLISHED状态;
- 完成第三次握手
3)发送HTTP请求:同宏观解析,客户端发送get或post请求;服务器正常给你返回200,OK,以及返回你要的html文本;客户端对服务端给的heml文本进行解析、渲染、展示
4)断开连接:
TCP四次挥手:双向断开确认
- step-1第一次挥手(客户端):
- 客户端告诉服务端请求我已经发送完毕了,我想要跟你断开连接了,没有数据可以发送了,但是呢服务端你还能向我发送数据,我还能接收数据;
- 详解为:客户端会发送一个TCP的FIN,并且标志位为1的这样一个数据包;告诉服务端我已经没有数据可以发送了,但是我还能接收数据;发送完毕后,客户端进入FIN_WAIT_1的状态;并完成第一次挥手
- step-2第二次挥手(服务端):
- 服务端确认了客户端的FIN数据包,并回一个ACK=1的数据包,表明我接收到了客户端关闭连接的请求,但是我这边还没有准备好关闭整个连接;
- 同时服务端由进入CLOSE_WAIT状态;完成第二次握手
- step-3客户端接收ACK等待服务端关闭连接:
- 客户端接收到服务端发过来的ACK=1数据包,客户端状态变更为FIN_WAIT_2状态;并等待服务端关闭连接
- step-4第三次挥手(服务端):
- 服务端向客户端发送一个FIN=1的数据包,表明我可以关闭连接了,响应数据已经都发完了。
- 服务端状态变更为LAST_ACK;等待客户端发送ACK确认包
- step-5 第四次挥手(客户端):
- 客户端收到服务端可以关闭的FIN数据包后,发送ACK=1包给服务端;告诉服务端,我这边没有问题,你关闭连接吧
- 客户端状态变更为TIME_WAIT;
- step-6 服务端关闭连接 :
- 服务端接收到客户端发送的ACK=1确认包后,关闭连接;服务端状态变更为CLOSED
本文共计2009个文字,预计阅读时间需要9分钟。
1. 学习前准备【必看】近年来,因数据采集引发的争议越来越多,有的被罚款,有的被处罚款,个人爬虫笔记提醒大家:爬虫有风险,采集需谨慎,编写代码不能违法。
1.学习前置近年来由于抓取数据而引起的纠纷越来越多,有的锒铛入狱,有的被处罚金,本人爬虫笔记学习提醒大家:爬虫有风险,采集需谨慎,写代码不能违法,写代码背后也有法律风险
1.1爬虫注意点 1.1.1遵守Robots协议Robots协议,也称为爬虫协议、机器人协议等,全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉爬虫哪些页面可以抓取,哪些页面不能抓取
如何查看网站的rebots协议?
(1)打开浏览器,在地址栏中输入网站域名/robots.txt即可,以查询百度的robots协议为例;Disallow后边的目录是禁止所有搜索引擎搜索的
(2)或者借助相关网站进行查看,如站长工具等,浏览器打开s.tool.chinaz.com/robots,输入网站地址,点击查询即可
1.1.2.不过度采集数据过度数据采集会对目标站点产生非常大的压力,可导致目标站点服务器瘫痪、不能访问等,相当于网络攻击。学习过程中抓取数据不可贪多,满足学习需求即可,损害他人权益的事不能做
1.1.3.不要采集隐私数据有选择的采集数据,别人不让看的数据不要爬,私人数据不要爬,如手机号、身份证号、住址、个人财产等不要抓取,受法律保护的特定类型的数据或信息不能抓取
1.1.4.网站有声明”禁止爬虫采集或转载商业化”当采集的站点有声明,禁止爬虫采集或转载商业化,请绕行,不让爬的数据不要爬
1.1.5.不得将抓取数据用于商业化使用恶意利用爬虫技术抓取数据,进行不正当竞争,甚至牟取不法利益,会触犯法律,数据采集不得伤害他人利益
1.2.爬虫与爬虫工程师爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本,是搜索引擎的重要组成;爬虫可以用于以下场景:搜索引擎、数据分析、人工智能、薅羊毛、抢车票等
目前市面主流的爬虫产品有:神箭手、八爪鱼、造数、后羿采集器等
爬虫工程师简单点理解就是数据的搬运工
爬虫工程师技术储备
- python编程基础
- linux系统管理基础
- www.baidu.com/对应的IP地址,如果能获取到则直接使用hosts文件的解析结果;host文件在本地的C:\Windows\System32\drivers\etc目录下
3)如果Host文件中找不到,就会使用DNS协议来获取IP。在DNS协议中,PC会向你本地DNS求助,请求DNS服务器之后,得到百度的IP
4)接下来浏览器会请求获得的Ip地址对应的Web服务器,Web服务器接收到客户的请求并响应处理,将客户请求的内容返回给客户端浏览器
5)如果服务器正常则给你回个“OK”,状态码为200并将你要的数据传给你。你收到服务器的回复,是HTML形式的文本。浏览器必须能够理解文本的内容,并快速的渲染到屏幕上,渲染出来后,你就能看到百度的首页了
2.3.2.微观解析1)域名解析:同宏观解析,通过本地host文件查找;找不到,PC请求本地DNS帮忙;最后得到域名的IP
2)建立连接:
TCP三次握手:双向连接确认过程
- step-1 监听:首先client客户端和server服务端都处于LISTEN监听状态
- step-2 第一次握手(客户端):
- 客户端告诉服务端我要访问你,完成第一次握手;
- 详解为:客户端会发送一个TCP的SYN,并且标志位为1的这样一个数据包;同时指明客户端要连接服务器的端口;发送完毕后,客户端进入SYN_SYNSEND的状态;并完成第一次握手
- step-3第二次握手(服务端):
- 服务端告诉客户端我收到了你的SYN数据包,你的内容为SYN=1,并且返回一个ACK=1的数据包,和客户端的SYN=1一并打包发给客户端;
- 同时服务端由LISTEN状态变成SYN_RCVD状态;完成第二次握手
- step-4客户端发送ACK给服务端:
- 客户端再次访问服务端,并发送ACK=1确认数据包,跟服务端确认是否一致
- 发送完毕后客户端进入ESTABLISHED状态
- step-5第三次握手(服务端):
- 服务端收到客户端发过来的ACK=1数据包,确认无误后,同样进入ESTABLISHED状态;
- 完成第三次握手
3)发送HTTP请求:同宏观解析,客户端发送get或post请求;服务器正常给你返回200,OK,以及返回你要的html文本;客户端对服务端给的heml文本进行解析、渲染、展示
4)断开连接:
TCP四次挥手:双向断开确认
- step-1第一次挥手(客户端):
- 客户端告诉服务端请求我已经发送完毕了,我想要跟你断开连接了,没有数据可以发送了,但是呢服务端你还能向我发送数据,我还能接收数据;
- 详解为:客户端会发送一个TCP的FIN,并且标志位为1的这样一个数据包;告诉服务端我已经没有数据可以发送了,但是我还能接收数据;发送完毕后,客户端进入FIN_WAIT_1的状态;并完成第一次挥手
- step-2第二次挥手(服务端):
- 服务端确认了客户端的FIN数据包,并回一个ACK=1的数据包,表明我接收到了客户端关闭连接的请求,但是我这边还没有准备好关闭整个连接;
- 同时服务端由进入CLOSE_WAIT状态;完成第二次握手
- step-3客户端接收ACK等待服务端关闭连接:
- 客户端接收到服务端发过来的ACK=1数据包,客户端状态变更为FIN_WAIT_2状态;并等待服务端关闭连接
- step-4第三次挥手(服务端):
- 服务端向客户端发送一个FIN=1的数据包,表明我可以关闭连接了,响应数据已经都发完了。
- 服务端状态变更为LAST_ACK;等待客户端发送ACK确认包
- step-5 第四次挥手(客户端):
- 客户端收到服务端可以关闭的FIN数据包后,发送ACK=1包给服务端;告诉服务端,我这边没有问题,你关闭连接吧
- 客户端状态变更为TIME_WAIT;
- step-6 服务端关闭连接 :
- 服务端接收到客户端发送的ACK=1确认包后,关闭连接;服务端状态变更为CLOSED

