1. 爬虫介绍
数据的来源:
- 企业生产的用户数据
- 数据管理咨询公司
- 政府/机构提供的公开数据
- 第三方数据平台购买数据
- 爬虫爬取数据
爬虫的定义: 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序.
只要是浏览器能做的事情,原则上,爬虫都能够做
爬虫怎么抓取网页上的数据?
-
网页的三大特征:
- 网页都有自己唯一的URL
- 网页都是HTML来描述页面信息
- 网页都使用HTTP/HTTPS协议来传输HTML数据
-
爬虫的设计思路
- 确定需要爬取的URL地址
- 通过HTTP/HTTPS协议获取对应的HTML页面
- 提取HTML页面有用的数据
为什么要选择Python做爬虫?
代码简介,开发效率高,支持的模块多,HTTP请求和HTML解析的模块丰富
调用其他接口也非常方便
2. 通用爬虫和聚焦爬虫
根据使用场景,网络爬虫分为 通用爬虫 和 聚焦爬虫
通用爬虫(General Web Crawler)和聚焦爬虫(Focused Web Crawler),也被称为主题爬虫,是两种不同类型的网络爬虫,它们在目标、策略和技术上有所不同。
通用爬虫:
- 定义:通用爬虫是指广泛地抓取互联网上的网页,其目的是尽可能全面地覆盖整个互联网或者特定范围内的网站。
- 用途:通常用于构建搜索引擎的索引库,以便用户可以搜索到几乎任何主题的信息。
- 特点:
- 覆盖面广,尝试访问并抓取大量的网页。
- 不特别针对某个领域或主题。
- 可能会遇到大量的无用信息或不相关的内容。
- 需要处理海量数据,因此对存储和计算资源要求较高。
- 通常会有比较完善的去重机制,以避免重复抓取相同的内容。
聚焦爬虫:
- 定义:聚焦爬虫是一种专门抓取与预先设定的主题相关的网页内容的爬虫。
- 用途:适用于需要收集特定领域内信息的情况,如科学研究、市场分析、竞争对手情报等。
- 特点:
- 有针对性,只抓取与特定主题相关的页面。
- 在抓取过程中会根据预设的条件筛选出符合要求的链接进行深入抓取。
- 由于目标明确,所以效率相对更高,且抓取的数据更加集中和有用。
- 可能使用机器学习技术来提高抓取的准确性和相关性。
- 对于非相关的内容,即使它们出现在被抓取的网页中,也可能被忽略。
两者的主要区别:
- 目的:通用爬虫追求的是覆盖面广度,而聚焦爬虫追求的是内容的相关性和深度。
- 策略:通用爬虫采用较为广泛的抓取策略,而聚焦爬虫则基于一定的主题模型或规则来进行选择性的抓取。
- 应用场景:通用爬虫多用于搜索引擎等场景;聚焦爬虫则适用于更专业的数据挖掘任务。
在实际应用中,开发者可以根据项目需求来决定使用哪种类型的爬虫,并结合适当的算法和技术手段来优化爬虫的表现。
通用爬虫工作流程
graph TD
搜索引擎流程-.-
抓取网页 --> 数据存储 --> 预处理 --> 1["提供检索服务,网站排名"]
聚焦爬虫工作流程
graph TD
2["url list"]-->响应内容-->提取数据-->入库
响应内容-->提取url-->2
3.Robots协议
Robots协议(也叫 爬虫协议,机器人协议等),全称是"网络爬虫排除标准" (Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取
Robots.txt 文件的基本结构:
User-agent: 定义了规则适用的爬虫名称。通配符*表示适用于所有爬虫。Disallow: 指定了不允许爬虫访问的URL模式。Allow(非官方标准,但广泛支持): 指定了允许爬虫访问的URL模式。Crawl-delay: 建议爬虫在连续请求之间等待的时间(秒)。Sitemap: 提供网站地图的位置,帮助爬虫更好地理解网站结构。
eg:
http://example.com/robots.txt
4.HTTP和HTTPS协议
协议
-
概念:
通信计算机双方必须共同遵从的一组规定,只有遵守这个约定,计算机之间才能相互通信
HTTP协议 (HyperText Transfer Protocol, 超文本传输协议):是一种发布和接收HTML页面的方法
HTTPS (Hypertext Transfer Protocol over Secure Socket Layer),简单讲是HTTP协议的安全版,在HTTP下加入SSL层
SSL (Secure Sockets Layer 安全套接层):主要用于Web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全
HTTP的端口号为:80
HTTPS的端口号为:443
-
HTTP的请求与响应
HTTP通信由两部分组成: 客户端请求消息 与 服务器响应消息
- 当用户在浏览器的地址栏输入一个URL并按回车键后,浏览器一向HTTP服务器发送HTTP请求.HTTP请求要分 "Get"和"Post"两个方法
- 当在浏览器输入URL www.baidu.com/时,浏览器发送一个Request请求去获取www.baidu.com/的HTML文件,服务器把Response文本对象发送回给浏览器
- 浏览器分析Response的HTML,发现其引用很多文本,比如Images文本,CSS文本,JS文本
- 当所有的文本资源都下载成功后,网页根据HTML语法结构,完整的显示出来相应的页面
URL: 统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法
基本格式:
scheme://host[:post#]/path/.../[?query-string][#anchor]
scheme:协议(eg:http,https,ftp)host:服务器的IP地址或者域名port#:服务器的端口(如果是走协议默认端口,缺省端口 80)path: 访问资源的路径query-string: 参数,发送给http服务器的数据anchor: 锚(跳转到网页的指定锚点位置)
客户端HTTP请求:
URL只是标识资源的位置,而HTTP是用来提交和获取资源.
客户端发送一个HTTP请求到服务器的请求消息,包括以下格式
- 请求行
- 请求头部
- 空行
- 请求数据
典型的HTTP请求:
GET / HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9 Cache-Control: max-age=0
Connection: keep-alive
Cookie: BAIDU_WISE_UID=wapp_1723335123355_15; ZFY=wwbo77JxaJhraZC4S0rJs3xChJuVuDsCI73zBfFN2hA:C; newlogin=1; BAIDUID=9B93E5568BC01F248399690FAB1A66AC:FG=1; BAIDUID_BFESS=9B93E5568BC01F248399690FAB1A66AC:FG=1; RT="z=1&dm=baidu.com&si=812c5df2-b66d-44a9-bd24-6dde060ed25f&ss=m21zqojm&sl
Host: www.baidu.com
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
sec-ch-ua: "Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法
| 方法 | 描述 |
|---|---|
| GET | 请求指定的页面信息,并返回实体主体 |
| HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
| POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中.POST请求可能会导致新的资源的建立或已有资源的修改 |
| PUT | 从客户端向服务器传送的数据取代指定的文档的内容 |
| DELETE | 请求服务器删除指定的页面 |
| CONNECT | HTTP 1.1协议中预留给能够将连接改为管道方式的代理服务器 |
| OPTIONS | 允许客户端查看服务器的性能 |
| TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
HTTP请求主要分为Get和POST两种方法
- Get是从服务器上获取数据,POST是向服务器传送数据
- Get请求番薯显示,都显示在浏览器网址上,HTTP服务器根据该请求所包含URL中的参数来产生响应内容,即"Get"请求的参数是URL的一部分. eg:www.baidu.com/s?wd=Chines…
- POST请求参数在请求体当中,消息长度没有限制而且以隐式的方式进行发送,通常用来向HTTP服务器提交量比较大的数据(比如请求中包含许多参数或者文件上传操作等),请求的参数包含在"Content-Type"消息头里,指明该消息体的媒体类型和编码
常用的请求报头
-
Host(主机和端口号)
对应网址URL中的Web名称和端口号,用于指定被请求资源的Internet主机和端口号,通常属于URL的一部分
2.Connection(链接类型)
表示客户端与服务连接类型
-
Client发起一个包含
Connection:keep-alive的请求,HTTP 1.1使用keep-alive为默认值 -
Server收到请求后:
- 如果Server支持keep-alive,回复一个包含Connection:keep-alive的响应,不关闭连接
- 如果Server不支持keep-alive,回复一个包含Connection:close的响应,关闭连接
-
如果client收到包含
Connection:keep-alive的响应,向同一个连接发送下一个请求,知道一方主动关闭连接
-
Upgrade-Insecure-Requests(升级为HTTPS请求)
升级为不安全的请求,意思是会在加载http资源时自动替换成https请求,让浏览器不再显示https页面中的http请求警报
-
User-Agent(浏览器名称)
客户浏览器的名称
-
Accept(传输文件类型)
指浏览器或其他客户端可以接受的MIME(Multipurpose Internet Mail Extensions (多用途互联网邮件扩展))文件类型,服务器可以根据它判断并返回适当的文件格式
Accept: */*:表示什么都可以接受Accept: image/gif:表明客户端希望接受GIF图像格式的资源Accept: text/html:表明客户端希望接受html文本Accept: text/html, application/xhtml+xml;q=0.9,image/*;q=0.8:表示浏览器支持的MIME类型分别是html文本,xhtml和xml文档,所有的图像格式资源 -
Referer (页面跳转处)
Referer:表明产生请求的网页来自于哪个URL,用户是从该 Referer页面访问到当前请求的页面。这个属性可以用来跟踪Web请求来自哪个页面,是从什么网站来的等。
-
Accept-Encoding(文件编解码格式)
Accept-Encoding:指出浏览器可以接受的编码方式。编码方式不同于文件格 式,它是为了压缩文件并加速文件传递速度。浏览器在接收到Web响应之后先 解码,然后再检查文件格式,许多情形下这可以减少大量的下载时间。
-
Accept-Language (语言种类)
Accept-Langeuage:指出浏览器可以接受的语言种类,如en或en-us指英 语,zh或者zh-cn指中文,当服务器能够提供一种以上的语言版本时要用到。
-
Accept-Charset t (字符编码)
Accept-Charset:指出浏览器可以接受的字符编码。
-
Cookie(Cookie)
Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存 的小型数据体,它可以记载和服务器相关的用户信息
-
Content-Type(POST数据类型)
Content-Type:POST请求里用来表示的内容类型
5.常见状态码
常见状态码:
- 100~199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
- 200~299:表示服务器成功接收请求并已完成整个处理过程。常用200(OK 请求成功)
- 300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(所请求的页面已经临时转移至新的url)307和304(使用缓存资源)。
- 400~499:客户端的请求有错误,常用404(服务器无法找到被请求的页面)、403(服务器拒绝访问,权限不够)
- 500~599:服务器端出现错误,常用500(请求未完成。服务器遇到不可预知的情况)