Python |浅谈爬虫的由来

news2024/9/25 13:23:56

本文概要

本篇文章主要介绍Python爬虫的由来以及过程,适合刚入门爬虫的同学,文中描述和代码示例很详细,干货满满,感兴趣的小伙伴快来一起学习吧!

🌟🌟🌟个人简介🌟🌟🌟

☀️大家好!我是新人小白博主朦胧的雨梦,希望大家多多关照和支持😝😝😝
🌖大家一起努力,共同成长,相信我们都会遇到更好的自己👊👊👊
🌗期待我的文章能给各位带来收获和解决问题的灵感🤩🤩🤩
🌟大家的三连是我不断更新的动力~😘😘😘

在这里插入图片描述

目录

  • 本文概要
  • 🌟🌟🌟个人简介🌟🌟🌟
  • 学习重点提前知🏆
  • ✨一.爬虫的由来和编写语言
    • 🌲1.何为爬虫
    • 🌲2.Python语言对爬虫的重要性
  • ✨二.网络传输协议
    • 🌲1.HTTP协议
    • 🌲2.HTTPS协议
    • 🌲3.返回的状态码意义
  • ✨三.学会使用抓包工具
  • ✨四. 爬虫的机制
  • ✨六.总结
  • 💫往期好文推荐

在这里插入图片描述

学习重点提前知🏆

  1.了解何为爬虫;

  2.掌握网络传输协议(主要为HTTP协议和HTTPS协议);

  3.掌握爬虫机理。

✨一.爬虫的由来和编写语言

🌲1.何为爬虫

  爬虫指的是一种自动化程序或软件,可以对互联网上的网页进行自动化抓取和分析。其基本原理是先根据设定的规则和指令搜索和下载特定的网页,然后解析其内容,提取所需的数据信息,并进一步处理和应用这些数据。

  在互联网中,数据是极其重要和珍贵的资产,因此爬虫应用广泛,例如搜索引擎,数据挖掘,业务智能和个性化推荐,自然语言处理,监测竞争对手等方面。爬虫除了可以有效地提供海量的各种类型的数据,也可以帮助机构或公司了解自己的品牌形象和在竞争市场中的地位。

  但是,由于爬虫不仅可以用于良性目的,还能用于非法、恶意目的,例如爬取个人敏感信息或侵犯版权等违法行为,因此,爬虫在实际运用中也需要遵守法律和伦理规范,否则将会面临法律制裁和声誉损失等风险。

  我个人说说大白话,首先爬虫的初衷就是根据某些规则,对特定网页的信息进行提取和采集。其次,爬虫有利有害,具体是利还是害,则须看使用这项技术的人,“技术本身不分好坏”,非要拿出来个标准,那就是“君子约定”,举例,我们打开baidu文库网在网站根目录后输入/robots.txt后即可查看该网站的君子协议。
在这里插入图片描述
Of course, if you follow this agreement, you don’t need to learn this technology,Ctrl+c and Ctrl+v are sufficient.,咳咳,大家只要记住,第一,你不要去以一个极高的频率向对方的服务器发送请求,不听话?如果造成宕机,恭喜你…第二,强行突破对方的各种加密手段从而拿到一些涉及机密的数据,第三,涉及个人隐私信息等
在这里插入图片描述

🌲2.Python语言对爬虫的重要性

  Python语言在爬虫领域中的作用非常重要,因为Python是一种易学易用的编程语言,有一个强大的爬虫生态系统和大量开源的爬虫框架可供选择。其他一些常见的编程语言,例如Java、PHP、C/C++等也可以用于编写爬虫,但对比Python来说,Python语言在以下几个方面表现得更胜一筹:
  1.简单易学:Python语言简单易学,使得开发者可以快速掌握其语法和基础知识,进而能够高效地编写出复杂的爬虫程序。

丰富的库和框架:Python拥有大量的库和框架,这些库和框架可以极大地降低爬虫开发的难度,避免开发者重复造轮子

  2.容易维护:Python的语法简洁明了,代码可读性强,适合开发和维护大型爬虫系统。

  3.跨平台:Python是一种跨平台的编程语言,在不同的操作系统和平台上都能够运行,这使得开发者可以更加快速地验证爬虫程序的正确性。

  因此,在爬取和处理互联网数据的过程中,Python语言以其简洁优美的语法、功能强大的爬虫框架和庞大的生态系统,一直受到开发者的青睐。

✨二.网络传输协议

🌲1.HTTP协议

  HTTP,全称是“超文本传输协议”,是一种用于传输文本、图像、音频、视频等超媒体信息的应用层协议

  HTTP 协议设计的初衷是为了在 Web 环境下进行通信,HTTP协议基于TCP连接,使用客户端-服务端模型,客户端发出HTTP请求,服务端返回HTTP响应。HTTP协议的常见版本有 HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2 和 HTTP/3等。

  HTTP协议的请求报文包含请求行,请求头和请求体三部分,请求行包含方法、URL和HTTP协议版本,请求头包含请求的附加信息,例如 Accept 和 User-Agent等,请求体包含上传的数据,例如表单数据或文件。

  HTTP协议的响应报文包含状态行,响应头和响应体三部分,状态行包含HTTP协议版本、状态码和状态描述,响应头包含响应的附加信息,例如 Content-Type 和 Server等,响应体包含响应的数据,例如HTML页面、图片或JSON数据。

  HTTP协议简单易懂,易于使用,广泛应用在互联网上,例如浏览器的网页请求和响应、API的数据传输等。但HTTP协议基于明文传输,容易受到网络攻击和窃听,因此在实际应用中,HTTPS协议逐渐取代了HTTP协议成为更为安全的协议标准。

  如果是纯小白,大家只需要明白,HTTP协议传输过程不加密,客户端-服务端模型,如下所示:
在这里插入图片描述

🌲2.HTTPS协议

  HTTPS,全称是“超文本传输安全协议”,是基于HTTP协议的一种安全的传输协议。HTTPS协议采用了SSL/TLS协议来加密传输数据,保证数据传输的安全性和完整性,防止被窃听和篡改。

  HTTPS协议在HTTP协议的基础上添加了加密方式和认证过程。HTTPS协议使用公钥、私钥和数字证书来实现加密和认证,加密采用了对称加密和非对称加密两种方式,对称加密用于加密数据,非对称加密用于认证服务端身份和交换对称加密所需的密钥。

  HTTPS协议的优点在于它可以保护用户的隐私信息,例如登录密码、信用卡号等,防止资料被黑客或中间人攻击者窃取或篡改。HTTPS协议现在已被广泛应用于金融、电商、社交媒体等互联网应用环境中。

  虽然HTTPS协议相对于HTTP协议而言,会带来一定的性能开销,例如建立连接的握手过程和加密处理的开销等,但由于网络安全问题日益严重,HTTPS协议已成为互联网通信标准的重要部分,同时各种新型的网络攻击和漏洞常常让出于安全考虑,网站运营者们更倾向DIOC升级其网站为HTTPS协议。

🌲3.返回的状态码意义

  当客户端向服务器发起网络请求时,服务器会返回一个状态码,状态码分为5类,分别是1xx、2xx、3xx、4xx和5xx。不同状态码代表着不同的含义,具体如下:

  1.1xx:表示客户端的请求已经被接收了,但服务器需要进一步处理请求才能完成。如:100 (继续),表示客户端可以继续发送请求。

  2.2xx:表示请求已成功被服务器接收、理解,并处理。如:200 (OK),表示请求已成功。

  3.3xx:表示请求需要进一步操作,服务器会返回一些跳转信息,告诉客户端如何操作。如:302 (重定向),表示请求的地址已经改变,需要客户端重新发送请求到新的地址。

  4.4xx:表示请求有误,客户端发送的请求出现了问题,如:404 (未找到),表示客户端请求的资源不存在。

  5.5xx:表示服务器端发生了错误,无法完成客户端的请求,如:500 (服务器内部错误),表示服务器发生了未知错误。

  状态码是网络请求过程中非常重要的一部分,它可以让客户端和服务器能够快速识别问题所在,进而进行修复和解决。因此,在进行网络开发的过程中,我们需要理解各种状态码的含义,以便及时排查和修正问题。

✨三.学会使用抓包工具

  抓包工具有很多,这里我建议小白使用Chrome浏览器,因为真的很好用,主要有以下几个原因:

  Chrome浏览器是市场占有率最高的浏览器,因此模拟Chrome浏览器的行为能够使爬虫更加隐蔽、更接近真实的用户行为,避免被网站识别为爬虫而被封禁。

  Chrome浏览器内置了开发者工具,使用Chrome提供的开发者工具可以方便的查看网页源码、调试JavaScript代码、分析HTTP请求等,这些功能对于爬虫开发来说非常有用。

  Chrome浏览器支持多种插件和扩展,其中一些插件可以帮助爬虫开发者更加方便的抓取和分析网页数据,例如Chrome插件XPath Helper可以方便地在网页中获取XPath路径

  Chrome浏览器的自动化测试工具Selenium也可以用于爬虫开发,Selenium可以模拟用户使用Chrome浏览器的行为,例如自动点击、输入、滚动等,这对于爬取一些需要模拟人工操作的网站非常有用。

  使用Chrome浏览器可以使爬虫更易于编写、更接近真实的用户行为、更方便地获取和分析网页数据。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

✨四. 爬虫的机制

  1.确定爬取目标:首先需要明确要爬取的网站、要爬取的数据类型和要爬取的数据范围。

  2.发起请求:爬虫程序通过 HTTP 或 HTTPS 协议向目标网站发起请求,获取网页的 HTML 文档。

  3.解析 HTML:爬虫程序使用网页解析库(如 BeautifulSoup、lxml)解析网页的 HTML 文档,提取出需要的数据。
  4.处理数据:爬虫程序对获取到的数据进行处理和存储,例如将数据存储到数据库中或写入文件。

  5.反爬措施:由于许多网站采取了反爬虫措施,爬虫程序需要进行相应的解决策略,例如设置 User-Agent 参数、使用代理和验证码识别等。

  6.定时任务:如果是长期维护的爬虫,需要定期对目标网站进行监测和更新,确保数据的实时性和准确性。.
   🌲示例:

import requests
# 发起请求,获取网页 HTML
url = 'https://www.xxxx.com/'
response = requests.get(url)
print(response.text)
html = response.text
# 解析 HTML,提取数据
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
title = soup.title.string

# 处理数据,存储数据
with open('xxxx.html', 'w', encoding='utf-8') as f:
    f.write(html)

print('爬取完成')

✨六.总结

  通过今天的简单介绍,相信大家已经明白了Python爬虫的由来以及过程,好了,今天就分享到这里,谢谢大家的观看,有什么想法记得评论区告诉我!拜拜~✨ ✨ ✨

💫往期好文推荐

  TOP🥇.自动驾驶技术未来大有可为❤️❤️❤️🏆🏆🏆❤️❤️❤️

  TOP🥈.Python爬虫 | 利用python爬虫获取想要搜索的数据(某du)❤️❤️❤️🏆🏆🏆❤️❤️❤️

  TOP🥉.ChatGPT | 一文详解ChatGPT(学习必备)❤️❤️❤️🏆🏆🏆❤️❤️❤️

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/497987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速搭建一个spring入门案例及整合日志

目录 环境要求 构建模块 程序开发 引入依赖 创建java类 创建配置文件 创建测试类测试 运行测试程序 程序分析 spring中配置启用Log4j2日志框架 Log4j2日志概述 引入Log4j2依赖 加入日志配置文件 测试 使用日志 环境要求 JDK:Java17(Spring6要…

Linux高性能服务器编程|阅读笔记:第6章 - 高级I/O函数

目录 简介6.1 pipe函数6.2 dup函数和dup2函数6.3 readv函数和writev函数6.4 sendfile函数6.5 mmap函数和munmap函数6.6 splice函数6.7 tee函数6.8 fcntl函数结语 简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出&…

10-Vue技术栈之脚手架配置代理(解决跨域问题)+ GitHub用户搜索案例

目录 1、基本使用1.1 方法一1.2 方法二 2、GitHub用户搜索案例 1、基本使用 1.1 方法一 ​ 在vue.config.js中添加如下配置: devServer:{proxy:"http://localhost:5000" }说明: 优点:配置简单,请求资源时直接发给前…

用三角函数解决几何问题

如图,在 △ A B C \triangle ABC △ABC 中, A C > 5 , A B > A C AC>5,AB>AC AC>5,AB>AC,点 E E E 是 A B AB AB 上一点,链接 C E CE CE,将 △ B C E \triangle BCE △BCE 沿 C E CE CE 折叠&…

【unity之数据持久化】-Unity公共类PlayerPrefs

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

FreeRTOS 内存管理

文章目录 一、FreeRTOS 内存管理简介二、 内存碎片三、heap_1 内存分配方法1. 分配方法简介2. 内存申请函数详解3. 内存释放函数详解 四、heap_2 内存分配方法1. 分配方法简介2. 内存块详解3. 内存堆初始化函数详解4. 内存块插入函数详解5. 内存申请函数详解6. 内存释放函数详解…

操作系统考试复习——第四章 4.3连续分配存储管理方式

在这里的开头需要讲述一下碎片,碎片分为内碎片和外碎片两种。 内碎片:分区之内未被利用的空间外碎片:分区之间难以利用的空闲分区(通常是小空闲分区)。 连续分配存储管理方式: 为了能将用户程序装入内存&#xff0c…

力扣刷题Day12_2

144.二叉树的前序遍历 测试代码main() class TreeNode:def __init__(self, valNone, leftNone, rightNone):self.val valself.left leftself.right rightfrom typing import Listclass Solution:def preorderTraversal(self, root: TreeNode) -> List[int]:s Solution…

C++易错编程练习题(1)

0 编程练习 基础不牢靠,回头来补课。小白这个系列主要是为了重新打基础,为一些常见的易错编程练习题提供记录。其间若有错误,欢迎指出,轻喷勿骂。毕竟小白确实是基础不牢靠。 1 题目 自定义函数之整数处理。 题目描述 输入10个…

多视图局部共现和全局一致性学习提高乳腺图像分类的综合性

文章目录 Multi-view Local Co-occurrence and Global Consistency Learning Improve Mammogram Classification Generalisation摘要本文方法global consistency modulelocal co-occurrence module (LCM) 实验结果 Multi-view Local Co-occurrence and Global Consistency Lear…

okio篇3-超时机制

关于System.nanoTime System.currentTimeMills与System.nanoTime实际都是时间间隔,只不过两个时间的起始时间衡量不一致。 我们比较常用的,实际是System.currentTimeMills(),这个时间是以1970-01-01起始,到系统显示时间的间隔。…

聚浪成潮,网易数帆CodeWave智能开发平台开启低代码新时代

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 随着全球范围内新一代人工智能技术发展突飞猛进,社会各领域从数字化、网络化向智能化转变,如何进一步释放数据生产力、加速智能化转型已成为企业发展的必修课。 2023年4月25日,“网易数帆…

K8S管理系统项目实战[API开发]-2

后端: gogin 后端代码地址GitHub - yunixiangfeng/k8s-platform: K8s管理系统后端: gogin 5、存储与配置 5.1 ConfigMap 5.2 Secret 5.3 PersistentVolumeClaims 6、工作流 6.1 流程设计 6.2 数据库操作(GORM) (1)初始化…

Mysql Sharding-JDBC读写分离 原理

0 课程视频 深入Sharding-JDBC分库分表从入门到精通【黑马程序员】_哔哩哔哩_bilibili 1 基本概念 1.1应用逻辑 1.1.1 msyql 多库 多表 多服务器 1.1.2 通过Sharding-JDBC jar包->增强JDBC 访问多数据源 -> 自动处理成一个数据源 1.1.3 使用数据的人 -> 使用Sh…

Java面试题总结 | Java面试题总结12- 测试模块

测试 测试需要具备的素质 基础的理论知识、编程语言的功底、自动化测试工具、计算机基础知识 业务分析能力:分析业务的流程,分析被测业务数据、分析被测系统的框架、分析业务模块、分析测试所需资源、分析测试完成目标 缺陷洞察能力:一般…

【ChatGPT】吴恩达教程笔记(预备篇)

本文概要 众所周知,吴恩达老师与OpenAI联合推出了一门面向开发者的Prompt课程(https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers ),时隔几天,吴恩达老师发推说已经有超过20万人…

Netty基础

2.1Netty是什么 是一个基于异步的(多线程处理结果和接收)、事件驱动的网络应用框架,用于基于快速开发可维护、高性能的网络服务器和客户端 异步是指调用时的异步,他的IO还是多路复用的IO 许多中间件都依赖与Netty zookperhado…

GUITAR PRO8吉他软件好不好用?值不值得下载

所谓“工欲善其事,必先利其器”,想成为一名专业甚至著名的音乐人,用到的工具软件非常多,在众多款软件工具中,Guitar Pro 8能满足乐谱创作者、学习者的所有需要。很多人在听到Guitar Pro这个名词时,本能反应…

spark的RDD算子计算

一、环境配置 import osfrom pyspark import SparkConf, SparkContextif __name__ __main__:os.environ[SPARK_HOME] /export/server/sparkos.environ["PYSPARK_PYTHON"] "/root/anaconda3/envs/pyspark_env/bin/python"os.environ["PYSPARK_DRIV…

JavaWeb07(MVC应用01[家居商城]连接数据库)

目录 一.什么是MVC设计模式? 1.2 MVC设计模式有什么优点? 二.MVC运用(家居商城) 2.1 实现登录 2.2 绑定轮播【随机三个商品】 2.2.1 效果预览 index.jsp 2.3 绑定最新上架&热门家居 2.3.1 效果预览 2.3.2 代码实现 数据…