目录
前言什么是爬虫?
爬虫与反爬虫基础知识
一、网页基础知识
二、网络传输协议
HTTP(HyperText Transfer Protocol)和HTTPS(HTTP Secure)请求过程的原理?
三、Session和Cookies
Session
Cookies
Session与Cookies的区别与联系
四、Web服务器Nginx
五、代理IP
1、代理IP的原理
2. 分类
3. 获取途径
入门案列
爬虫步骤及思路:
主要步骤:
完整代码
总结
博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,深受全网粉丝喜爱与支持✌有需要可以联系作者我哦!
🍅文末三连哦🍅
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
前言
什么是爬虫?
爬虫,也称为网页蜘蛛或网络机器人,是一种按照既定规则,在网络上自动爬取信息的程序或脚本。它模拟人操作客户端(如浏览器或APP)向服务器发起网络请求,以抓取所需的数据。爬虫的工作原理主要包括网页请求、数据解析和数据存储等步骤。
首先,爬虫需要确定要爬取的目标网址,并向目标网站发送HTTP请求,获取网页的内容。在发送请求之前,爬虫可以选择合适的请求方法(如GET或POST),并可以设置请求头部信息以模拟浏览器的请求,避免被网站的反爬虫机制拦截。
其次,爬虫需要对获取到的网页内容进行解析。网页通常使用HTML、XML或JSON等标记语言编写,爬虫需要根据网页的结构和规则,提取出所需的数据。在解析过程中,爬虫还可以进行数据清洗和处理,以获取更加干净和规范的数据。
最后,爬虫将解析后的数据进行存储,供后续使用和分析。
爬虫与反爬虫基础知识
在正式学习爬虫知识之前,我们需要了解掌握相关的知识及概念,如浏览器前端页面知识、网络传输协议、Web服务器Nginx、代理IP、HTTP接口概念、Session和Cookie等。通过了解这些概念,我们可以更好地掌握爬虫基本原理,同时学会如何使用爬虫来收集和分析市场数据、社交媒体数据、新闻等信息,以做出更明智的商业和战略决策。
一、网页基础知识
如淘宝页面涉及的知识结构:
淘宝首页源代码:
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="data-spm" content="a2638t"/><meta name="keywords" content=""/><meta name="description" content=""/><title>阿里巴巴1688.com - 全球领先的采购批发平台,批发网</title><!-- 引用样式 --><link rel="stylesheet" href="//gw.alipayobjects.com/os/lib/alifd/next/1.19.24/dist/next.min.css"/><link rel="stylesheet" type="text/css" href="https://sucai.alicdn.com/boot-build-page-prod/71-59942-index.css"/><script type="text/javascript" data-sc-pos="head" src="//g.alicdn.com/mtb/lib-mtop/2.4.2/mtop.js"></script><script src="//g.alicdn.com/assets-group/jplus/0.0.11/index.js" crossorigin></script><script src="//g.alicdn.com/assets-group/cbu-splus/0.1.0/index.js" crossorigin></script><script>var jplusUtil = window.jplusUtil;var setConfig = jplusUtil && jplusUtil.setConfig;var renderAsync = true;setConfig('exp', {config: {selector: '.offer',visible: '0.01',duration: '1',propsMap: {url: 'data-jplus-exp-url'}}})var browserRenderData = {}; //渲染用数据var urlParams = {"cosite":"360jj","exp":"zgc_tab:A;offerWwClick:A","hpageId":"krump-2125","keywords":"淘宝网首页","location":"landing_t4","p4pid":"c28241d4dafe1","pageNo":1,"pageSize":20,"pageUrl":"https://p4psearch.1688.com/page.html?keywordid=52595543980&cosite=360jj&keywords=%E6%B7%98%E5%AE%9D%E7%BD%91%E9%A6%96%E9%A1%B5&trackid=88576672928645988612270&location=landing_t4&ptid=hr40f198ac2e9981&exp=zgc_tab%3AA%3BofferWwClick%3AA&hpageId=krump-2125&bd_vid=e9f3037c3e6f91d0","platform":"PC","ptid":"hr40f198ac2e9981","pvType":"COMMON","se":"","ssr":false,"trackid":"88576672928645988612270"}</script></head>
<body data-bu="1688" data-spm="b_78128457"><script>
with(document)with(body)with(insertBefore(createElement("script"),firstChild))setAttribute("exparams","category=&aplus&asid=AQAAAABSEh5mCpDDLwAAAABaIrI1no31Rg==&aat=&abb=&ret=ali%5fresin%5ftrace%3dc%5fp4pid%3dc28241d4dafe1%7cc%5fbid%3d2%2d5%2d6%2d268%2dkrump%2d2125%2d2601%7c202403311%7cc%5froute%3d1&c_signed=&hn=p4p%2dlp033044050177%2ecenter%2ena620&at_bu=cbu",id="beacon-aplus",src="//g.alicdn.com/alilog/??/aplus_plugin_b2bfront/index.js,mlog/aplus_v2.js")
</script>
<div id="app"></div><!-- 引用页面 JS -->
<script src="https://sucai.alicdn.com/boot-build-page-prod/71-59942-index.js"></script><!-- 性能监控与异常打点 -->
<script>var g_config = window.g_config || {};g_config.jstracker2 = g_config.jstracker2 || {};g_config.jstracker2.pid = '25687-tracker';
</script><script src="//g.alicdn.com/tb/tracker/index.js"></script></body>
</html>
通过代码可以知识网页主要由HTML、CSS和JS三个部份组成。其作用:
- HTML与网页结构:
- HTML(HyperText Markup Language,超文本标记语言):是构建网页的标准标记语言。它定义了网页的结构和内容,通过标签(tags)来标记文本、图片、链接等各种元素。爬虫需要了解HTML标签和它们的用途,以便能够正确地解析网页并提取所需信息。
- CSS与网页样式:
- CSS(Cascading Style Sheets,层叠样式表):用于描述网页的样式,如颜色、字体、布局等。虽然爬虫主要关注网页的内容,但了解CSS有助于更好地识别和处理网页元素,特别是在处理动态加载或隐藏的内容时。
- JavaScript与网页交互:
- JavaScript:是一种用于网页交互的脚本语言。现代网页中,很多内容是通过JavaScript动态生成的,或者需要通过JavaScript交互来展示。爬虫需要能够处理JavaScript代码,以便获取这些动态生成的内容。有些高级爬虫会使用无头浏览器(headless browsers)来执行JavaScript并渲染网页。
二、网络传输协议
网络传输协议是指在计算机网络中为了使不同的计算机之间能够传输数据而制定的一种约定。它是计算机网络的基础,是实现计算机数据传输和信息交换的重要手段。在网络传输协议中,通信双方需要达成共识,以确定数据传输的格式、数据包大小、传输速率、数据校验等参数,以保证数据传输的可靠性、安全性和高效性。常见的传输协议:
TCP/IP (Transmission Control Protocol/Internet Protocol):
- TCP (Transmission Control Protocol): TCP是一种面向连接的协议,提供可靠的数据传输服务。它通过三次握手建立连接,确保数据按顺序、完整地传输到目标地址。TCP还负责流量控制和拥塞控制。
- IP (Internet Protocol): IP是一种数据包交换的协议,它负责定义数据包的格式和发送到目标地址的方式。IP地址用于唯一标识网络上的设备。
UDP (User Datagram Protocol):
- UDP是一种无连接的协议,不保证数据传输的可靠性和顺序。它比TCP快速,适用于一些对实时性要求较高的应用,如视频流和语音通话。
HTTP/HTTPS (HyperText Transfer Protocol/Secure):
- HTTP: HTTP是一种应用层协议,用于从网络服务器传输超文本到本地浏览器。它是无状态的,每个请求独立处理,常用于网页浏览。
- HTTPS: HTTPS是HTTP的安全版本,使用SSL/TLS加密数据传输,提供数据的机密性和完整性。它在电子商务、在线银行等需要安全传输数据的场景中广泛应用。
FTP (File Transfer Protocol):
- FTP是用于在计算机之间传输文件的协议。它支持上传、下载和管理文件,通常用于网站维护、文件备份等。
SMTP (Simple Mail Transfer Protocol):
- SMTP是用于电子邮件发送的协议。它定义了邮件如何从发送者的电子邮件服务器传输到接收者的电子邮件服务器。
HTTP(HyperText Transfer Protocol)和HTTPS(HTTP Secure)请求过程的原理?
其是应用层协议,主要用于在客户端和服务器之间传输超文本内容。它们的请求过程有一定的相似性,但HTTPS在传输层使用了SSL/TLS加密来增加安全性。下面我们详细讲解HTTP/HTTPS的请求过程:
HTTP请求过程:
建立连接:
- 客户端(通常是浏览器)向服务器发起一个TCP连接,通常在端口80。
- 三次握手完成后,TCP连接建立。
发送请求:
- 客户端发送一个HTTP请求到服务器,请求包括HTTP方法(如GET、POST)、URL、HTTP版本、请求头(如User-Agent、Accept等)和可选的请求体(如POST数据)。
服务器处理请求:
- 服务器接收到请求后,解析HTTP方法、URL和头部信息。
- 根据请求的内容,服务器执行相应的操作,可能是查询数据库、读取文件或执行其他业务逻辑。
发送响应:
- 服务器将处理结果封装成HTTP响应,响应包括HTTP版本、状态码、响应头(如Content-Type、Server等)和响应体(如HTML页面、JSON数据等)。
- 服务器通过TCP连接将响应发送回客户端。
关闭连接:
- 一旦响应发送完成,TCP连接可能会立即关闭(短连接),也可能会保持一段时间以供后续请求使用(长连接)。
HTTPS请求过程:
HTTPS在HTTP的基础上增加了SSL/TLS加密来保护数据的机密性和完整性。以下是HTTPS请求过程的详细步骤:
建立连接:
- 客户端发起一个TCP连接到服务器的443端口。
- TCP连接建立后,客户端和服务器之间开始SSL/TLS握手过程。
SSL/TLS握手:
- 客户端发送一个SSL/TLS客户端Hello消息,包括支持的加密算法、随机数等。
- 服务器回应一个SSL/TLS服务器Hello消息,选择一个加密算法、发送证书等。
- 客户端验证服务器的证书,然后生成会话密钥。
- 客户端使用服务器的公钥加密会话密钥,并发送给服务器。
- 服务器使用私钥解密会话密钥,双方都获取了会话密钥用于后续通信。
发送加密请求:
- 客户端使用会话密钥加密HTTP请求,生成一个加密的HTTP请求。
- 加密后的请求通过TCP连接发送到服务器。
服务器解密请求:
- 服务器使用会话密钥解密收到的HTTP请求。
- 服务器处理解密后的请求,生成HTTP响应。
发送加密响应:
- 服务器使用会话密钥加密HTTP响应。
- 加密后的响应通过TCP连接发送回客户端。
关闭连接:
- 加密的HTTP响应发送完成后,TCP连接可能会关闭或保持开放。
淘宝网页请求返回数据:
三、Session和Cookies
Session和Cookies是Web开发中常用的两种技术,用于在用户与服务器之间维护状态和数据。下面将详细解释Session和Cookies的概念、原理、使用场景以及它们之间的区别与联系。
Session
Session(服务端会话跟踪技术)是指在一个特定时间段内,单个客户端与Web服务器之间的一系列交互过程。在这个过程中,服务器会为每一个会话分配一个唯一的Session对象,用于存储与该会话相关的数据。Session数据保存在服务器端,因此相对于客户端存储的Cookies来说,Session数据更加安全,不易被窃取或截获。
Session的工作流程如下:
- 当客户端首次访问服务器时,服务器会创建一个新的Session对象,并为其分配一个唯一的Session ID。
- 服务器会将这个Session ID以某种方式(如响应报文或重写URL)发送给客户端,客户端会将其保存在本地(通常是保存在浏览器的内存中)。
- 在后续的请求中,客户端会将这个Session ID发送给服务器,以便服务器能够识别出当前会话并获取到对应的Session对象。
- 通过这个Session对象,服务器可以在多次请求之间共享数据,实现用户状态的维护。
Cookies
Cookies是一种小型文本文件,由服务器发送到客户端并保存在客户端的本地终端上。这些文件通常经过加密,用于存储用户信息,以便在后续的请求中进行识别和跟踪。Cookies的主要作用是帮助网站记住用户的状态和偏好,以便提供更加个性化的服务。
Cookies的工作原理如下:
- 当客户端首次访问服务器时,服务器会创建一个包含用户信息的Cookies对象,并将其发送给客户端。
- 客户端收到Cookies后,会将其保存在本地(如浏览器的Cookie缓存中)。
- 在后续的请求中,客户端会自动将保存在本地的Cookies发送给服务器。
- 服务器通过解析这些Cookies,可以获取到用户的身份信息和其他相关数据,从而进行相应的处理。
Session与Cookies的区别与联系
存储位置:一般Session数据存储在服务器端,而Cookies数据存储在客户端。
数据安全性:由于Session数据存储在服务器端,因此相比于客户端存储的Cookies数据来说更加安全。而Cookies数据容易被窃取或截获,存在安全隐患。
数据大小与数量限制:Session在理论上没有大小限制,只受限于服务器的内存大小。而Cookies有大小限制以及浏览器在存储Cookies的数量上也有限制。
使用场景:Session通常用于存储重要的用户信息或会话数据,而Cookies则更多地用于存储用户的偏好设置、登录状态等轻量级数据。
四、Web服务器Nginx
Web服务器Nginx是一款高性能的HTTP和反向代理服务器,具有高并发、轻量级、模块化、异步非阻塞的事件驱动模型等优点而广受好评。
Nginx最初由俄罗斯人伊戈尔·赛索耶夫为Rambler.ru站点开发,并于2004年首次公开发布。在中国大陆,很多知名网站如百度、京东、新浪、网易、腾讯、淘宝等都是使用Nginx作为Web服务器。
Nginx的主要特点包括:
- 高并发、高性能:Nginx能够处理大量并发连接,支持高达50,000个并发连接数,并经受高负载的考验。其吞吐量比传统的Web服务器高很多倍,使得它非常适合高流量、高负载的网站和应用。
- 轻量级:Nginx的代码精简,功能简洁,占用资源少,启动和运行速度快。同时,其分布式架构和优秀的容错机制使得Nginx在服务器出现故障时能够自动切换到备份服务器,保证服务的连续性和稳定性。
- 模块化:Nginx的模块化架构使得它的扩展性非常好,支持多种模块和插件,可以通过添加模块和插件来实现更多的功能。
- 异步非阻塞的事件驱动模型:与Node.js相似,Nginx使用异步非阻塞的事件驱动模型来处理请求,这使得它能够高效地处理大量并发连接。
- 高可靠性:Nginx支持热部署,启动简单,可以做到7*24不间断运行。此外,它的架构是分布式的,可以通过多个节点实现负载均衡,提高系统的可靠性和可用性。
Nginx在Web服务中扮演了多个重要角色:
- 静态资源服务:Nginx可以作为静态资源服务器,提供图片、视频、CSS、JS等静态资源的访问服务。
- 反向代理服务:Nginx可以作为反向代理服务器,将客户端请求转发到后端服务器,并缓存请求结果以提高性能。同时,它支持多种负载均衡策略,如轮询、加权轮询和IP hash等,可以根据需要选择合适的策略来分发请求。
- API服务:Nginx可以与OpenResty等框架结合,提供API服务。
此外,Nginx还具有良好的配置性和安全性。其配置文件简单易懂,方便管理员进行配置和管理。同时,Nginx可以通过限制访问IP、防止DDoS等多种方式来保护服务器的安全。
五、代理IP
1、代理IP的原理
代理IP的工作原理基于代理服务器。当A机用户电脑通过代理服务器C机发送请求时,代理服务器会代表用户向目标服务器B机发送请求,然后将目标服务器B机的响应返回给用户。这样,目标服务器B机只能看到代理服务器C机的IP地址,而不知道真实的用户IP地址。
IP代理原理图:
2. 分类
根据代理IP的类型和使用场景,代理IP可以分为以下几类:
HTTP代理:主要用于HTTP协议的代理,适用于网页浏览等。
HTTPS代理:专用于HTTPS协议的代理,支持SSL加密的网站访问。
SOCKS代理:支持多种协议的代理,包括HTTP、HTTPS和FTP等,更为灵活。
透明代理:用户不需要进行任何设置,网络请求会自动通过代理服务器。
匿名代理:代理服务器会隐藏用户的真实IP地址,但目标服务器可以知道用户使用了代理。
高匿代理:完全隐藏用户的真实IP地址,目标服务器无法知道用户使用了代理。
3. 获取途径
获取代理IP的途径多种多样,但需注意代理IP的可用性和安全性:
免费代理IP网站:有一些网站提供免费的代理IP列表,用户可以直接复制使用。但免费代理IP通常不稳定,速度慢,安全性差。
付费代理IP服务:有专业的代理IP提供商提供付费的代理IP服务,通常提供更稳定、更快速、更安全的代理IP。
自建代理服务器:用户可以自己租用或购买服务器,然后安装代理软件,自建代理服务器,这样可以完全控制代理IP的质量和安全性。
API接口:一些代理IP提供商提供API接口,用户可以通过API接口动态获取代理IP,方便集成到自己的应用或工具中。
扫描器和爬虫:技术比较高的用户可以使用代理IP扫描器或爬虫工具,从网络上自动扫描和收集代理IP。
在这里插入一个小故事哦!对IP代理感兴趣的同学可以关注一下哦!
入门案列
爬取豆瓣的评论是一个常见的爬虫练习。今天我们利用基于Python来展示爬虫过程,使用BeautifulSoup和requests库来爬取豆瓣电影《热辣滚烫》的短评。
爬虫步骤及思路:
导入必要的库:
requests
用于发送HTTP请求,BeautifulSoup
用于解析HTML。定义
fetch_comments
函数:这个函数接收一个URL,发送GET请求获取页面内容,然后使用BeautifulSoup解析页面,提取评论并返回。在
if __name__ == '__main__':
部分:
- 定义基础URL,它是不包括页数和其他参数的URL。
- 初始化一个空列表
all_comments
来存储所有评论。- 循环获取前10页的评论:
- 构建完整的URL,其中
start
参数用于指定从哪里开始获取评论。- 调用
fetch_comments
函数获取当前页的评论。- 将获取的评论添加到
all_comments
列表中。- 输出所有获取的评论,包括评论的序号和评论内容。
请确保已安装requests
和beautifulsoup4
库。如果还未安装,可以使用以下命令安装:
pip install requests beautifulsoup4
主要步骤:
第一步:设置请求头,模拟浏览器访问
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
第二步:发送GET请求获取页面内容并检测返回结果
response = requests.get(url, headers=headers)
第三步:使用BeautifulSoup解析页面内容
soup = BeautifulSoup(response.text, 'html.parser')
第四步:主要获取评论并输出评论内容
完整代码
import requests
from bs4 import BeautifulSoupdef fetch_comments(url):# 设置请求头,模拟浏览器访问headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}# 发送GET请求获取页面内容response = requests.get(url, headers=headers)# 检查响应状态码,确保请求成功if response.status_code != 200:print('爬取失败')return# 使用BeautifulSoup解析页面内容soup = BeautifulSoup(response.text, 'html.parser')# 初始化一个空列表来存储评论comments = []# 找到所有的评论元素comment_items = soup.find_all('span', class_='short')# 遍历每个评论元素,提取评论文本并添加到列表中for item in comment_items:comments.append(item.text.strip())return commentsif __name__ == '__main__':# 基础URL,不包括页数和其他参数base_url = 'https://movie.douban.com/subject/36081094/comments'# 初始化一个空列表来存储所有评论all_comments = []# 循环获取前10页的评论for i in range(10):# 构建完整的URL,包括start参数用于指定从哪里开始获取评论url = f'{base_url}?start={i * 20}&limit=20&status=P&sort=new_score'# 调用fetch_comments函数获取当前页的评论comments = fetch_comments(url)# 将获取的评论添加到all_comments列表中all_comments.extend(comments)# 输出所有获取的评论for idx, comment in enumerate(all_comments, 1):print(f'{idx}. {comment}')
官网评论情况:
获取的评论结果:
总结
首先,我们详细探讨了网页知识、网络传输协议、代理IP的工作原理、应用场景以及设置方式。代理IP通过第三方服务器(代理服务器)转发网络请求,从而隐藏真实IP地址,保护用户隐私和数据安全。它在网络安全、SEO优化、数据采集以及安全加固等方面有着广泛的应用。在设置代理IP时,我们可以通过浏览器、系统或软件等方式进行设置,但需要注意选择可靠的代理服务商并遵守相关法律法规。同时我们也演示如何利用requests库来爬取豆瓣评论,最主要是学会爬虫的原理以及思想思路,但我们也需要遵守相关的法律。
通过今天的学习,我们对代理IP和Nginx有了更深入的了解,必然可以为今后的Web相关工作提供了有力的基础支持。同时,我们也意识到在使用这些技术时需要遵守相关法律法规,确保合法合规地运用它们。
创作不易,你的支持是我的不竭动力,感谢大家的三连哦!