Python爬虫----python爬虫基础

一、python爬虫基础-爬虫简介

1、现实生活中实际爬虫有哪些?

2、什么是网络爬虫?

3、什么是通用爬虫和聚焦爬虫?

4、为什么要用python写爬虫程序

5、环境和工具

二、python爬虫基础-http协议和chrome抓包工具

1、什么是http和https协议

2、http请求过程

3、url详解

4、常用的请求方法:

5、请求头常见参数:

6、常见响应状态码:

7、浏览器抓包工具


一、python爬虫基础-爬虫简介

1、现实生活中实际爬虫有哪些?

(1)搜索引擎(百度、谷歌、360)

(2)购物助手:可以自动查看历史价格,通过爬虫实现爬取电商平台价格数据。

(3)数据分析与研究:根据爬虫程序爬取数据并对数据进行分析。

(4)抢票软件:

2、什么是网络爬虫?

爬虫是一个模拟人类请求网站行为的程序、可以自动请求网页,并将数据抓取出来,然后使用一定的规则把有用的数据筛选出来。

3、什么是通用爬虫和聚焦爬虫?

通用爬虫‌(General Purpose Web Crawler 或 Scalable Web Crawler)的目标是覆盖整个互联网或尽可能广泛的网络空间进行数据抓取。它们主要用于搜索引擎,如Baidu、Google和Yahoo,目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。通用爬虫的爬行范围和数量巨大,通常采用并行工作方式,但需要较长时间才能刷新一次页面‌。

聚焦爬虫‌(Focused Crawler 或 Topical Crawler)则是选择性地爬行那些与预先定义好的主题相关的页面。与通用爬虫相比,聚焦爬虫只需要爬行与主题相关的页面,从而极大地节省了硬件和网络资源,保存的页面数量少且更新快,能够很好地满足特定人群对特定领域信息的需求‌。

4、为什么要用python写爬虫程序

(1)PHP:PHP是世界是最好的语言,但他天生不是做这个的,而且对多线程、异步支持不是很好,并发处理能力。爬虫是工具性程序,对速度和效率要求比较高。

(2)Java:生态圈很完善,是Python爬虫最大的竞争对手。但是Java语言本身很笨重,代码量很大。重构成本比较高,任何修改会导致代码大量改动。爬虫要经常修改采集代码。

(3)C/C++:运行效率是无敌的。但是学习和开发成本高。写个小爬虫程序可能要大半天时间。 (4)Python:语法优美、代码简洁、开发效率高、支持的模块多。相关的HTTP请家模块和HTML解析模块非常丰富。还有Scrapy和Scrapy-redls框架让我们开发肥虫变得异常简单。

5、环境和工具

(1)开发环境:python3以上

(2)使用工具:Pycharm

(3)虚拟环境: Virtualenv/Virtualenvwrapper

二、python爬虫基础-http协议和chrome抓包工具

1、什么是http和https协议

HTTP协议:全程是HyperText Transfer Protocol,即超文本传输协议,是一种发布和接收HTML的方法。服务端口号80。

HTTPS协议:是http协议的加密版本,在HTTP下加入了ssl层,服务端口号是443端口。

2、http请求过程

(1)当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为"Get"和"Post"两种方法。

(2)当我们在浏览器输入URL http://www.baidu.com 的时候,浏览器发送一个Request请求去获取 http://www.baidu.com的html文件,服务器把Response文件对象发送回给浏览器。

(3)浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如images文件,CSS文件,JS文件。浏览器会自动再次发送Request请求去获取图片,CSS文件,或者JS文件。

(4)当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。

3、url详解

URL是UniforF Resource Locator 的简写,统一资源定位符。

一个 URL 由以下几部分组成:

scheme://host:port/path/?query-string=xxx#anchor
  • scheme:代表的是访问的协议,一般为http或者 https以及 ftp 等。

  • host:主机名,域名,比如www.baidu.com。

  • port:端口号。当你访问一个网站的时候,浏览器默认使用80端口。

  • path:查找路径。比如:www.baidu.com/trending/now,后面的trending/now 就是 path 。

  • query-string:查询字符串,比如:www.baidu,con/s?wd-python,后面的 wd-python 就是查询字符串。如果查询多个参数使用&进行拼接。

  • anchor:锚点,后台一般不用管,前端用来做页面定位的。

在浏览器中请求一个 url,浏览器会对这个url进行一个编码。除英文字母,数字和部分符号外,其他的全部使用百分号+十六进制码值进行编码。

4、常用的请求方法:

在 Http 协议中,定义了八种请求方法。这里介绍两种常用的请求方法,分别是get 请求和 post 请求。

(1)set请求:一般情况下,只从服务器获取数据下来,并不会对服务器资源产生任何影响的时候会使用 set 请求。

(2)post 请求:向服务器发送数据(登录)、上传文件等,会对服务器资源产生影响的时候会使用 post 请求。

以上是在网站开发中常用的两种方法。并且一般情况下都会遵循使用的原则。但是有的网站和服务器为了做反爬虫机制,也经常会不按常理出牌,有可能一个应该使用get方法的请求就一定要改成post请求,这个要视情况而定。

5、请求头常见参数:

在 http 协议中,向服务器发送一个请求,数据分为三部分,第一个是把数据放在url中,第二个是把数据放在 body 中(在 post 请求中),第三个就是把数据放在 head中。这里介绍在网络虫中经常会用到的一些请求头参数:

(1)Uer-Agent:浏览器的名称。这个在网络爬虫中经常会被使用到。请求一个网页的时候,服务器通过这个参数就可以知道这个请求是由哪种浏览器发送的。如果我们是通过爬虫发送请求,那么我们的user-Agent就是python ,这对于那些有反爬虫机制的网站来说,可以轻易的判断你这个请求是爬虫。因此我们要经常设置这个值为一些浏览器的值,来伪装我们的爬虫。

(2)Referer :表明当前这个请求是从哪个url过来的。这个一般也可以用来做反爬虫技术。如果不是从指定页面过来的,那么就不败相关的响应。 (3)cookie: http 协议是无状态的。也就是同一个人发送了两次请求,服务器没有能力知道这两个请求是否来自同一个人。因此这时仅就用 cookie来做标识。一般如果想要做登录后才能访问的网站,那么就需发送 cookie 信息。

6、常见响应状态码:

  • 200:请求正常,服务器正常的返回数据。

  • 301: 永久重定向。比如在访问www.jingdong.com的时候会重定问到www.jd.com。

  • 302:临时重定向。比如在访问一个需要登录的页面的时候,而此时没有登录,那么就会重定向到登录页面。

  • 400:请求的url在服务器上找不到。换句话说就是请求 url错误。

  • 403: 服务器拒绝访问,权根不够。

  • 500: 服务器内部错误。可能是服务器出现 bug 了。

7、浏览器抓包工具

浏览器内右键->检查或F12:

(1)Elements 面板

作用:查看和修改 HTML 和 CSS 代码

这个面板展示了当前页面的 HTML 结构 和 CSS 样式。你可以直接查看页面的 DOM(Document Object Model,文档对象模型),也就是页面的 HTML 元素的层次结构,以及与每个元素关联的 CSS 样式。

  • 实时查看页面结构:通过 Elements 面板,你可以看到浏览器是如何解析和展示 HTML 元素的。每个元素都可以展开以查看其子元素。

  • 修改页面样式:你可以在这个面板中临时修改 HTML 或 CSS 来查看效果变化。比如,右键单击某个元素,选择 “检查”(Inspect),可以查看并实时编辑该元素的样式。这些修改只会在本地生效,不会影响服务器上的页面。

  • 调试布局问题:如果页面布局有问题,比如元素显示错位,或是某个元素不可见,你可以使用 Elements 面板检查该元素的样式、布局盒模型(Box Model),看看是否有 CSS 样式问题。

使用示例:

  • 按下 F12,打开 Elements 面板。

  • 移动鼠标到页面上的元素,浏览器会高亮显示该元素的 HTML 代码和样式。

  • 你可以临时修改 HTML 或 CSS,看看页面会如何变化。

(2)Console 面板

作用:查看日志信息、调试 JavaScript

Console 面板是用于执行和调试 JavaScript 代码 的区域。它有两个主要功能:

  • 输出日志:开发者可以通过 JavaScript 中的 console.log() 方法将调试信息输出到控制台。这对于查看程序运行过程中的变量状态、错误信息等非常有用。

  • 执行 JavaScript 代码:你可以直接在控制台中输入和执行 JavaScript 代码。比如,输入 document.querySelector('h1'),可以获取页面上的第一个 <h1> 元素。

另外,当 JavaScript 代码抛出错误时,错误信息也会显示在 Console 面板中,帮助你定位问题。

使用示例:

  • 按下 F12,打开 Console 面板。

  • 输入 alert('Hello!') 并按下回车,浏览器会弹出一个提示框显示 “Hello!”。

(3)Network 面板

作用:监控网络请求,分析页面加载性能

Network 面板显示了页面加载时发起的所有网络请求,包括:

  • HTML、CSS、JavaScript 文件的请求。

  • 图片、视频、音频等媒体资源的加载。

  • AJAX 请求,即前端与服务器之间的动态数据交换。

你可以使用这个面板来分析页面加载的速度,查看哪些资源占用了较多时间,并可以检查每个请求的响应内容、状态码等。开发者通常用这个面板来调试 API 调用,确保请求的数据正确返回,以及分析页面性能瓶颈。

Network面板的概述:时间轴

当你打开 Network 面板时,你会看到一个时间轴,它显示了页面加载过程中发出的所有请求,按顺序排列,通常包括:

  • HTML 页面:页面的主 HTML 文件。

  • CSS 文件:用于页面样式的 CSS 文件。

  • JavaScript 文件:前端逻辑的 JavaScript 文件。

  • 图片、字体、媒体资源:如图片、字体、视频等。

  • Ajax 请求或 Fetch 请求:与服务器进行的异步数据交换。

  • 其他资源:如 WebSocket 连接、manifest 文件等。

(4)Sources 面板

作用:调试 JavaScript 代码

Sources 面板允许开发者查看和调试 JavaScript 代码。你可以在这个面板中设置断点(breakpoints),当代码执行到某个断点时,浏览器会暂停运行,这样你可以逐步查看变量的值、调用的函数堆栈等。

常见功能:

  • 断点调试:设置断点后,当浏览器执行到这一行代码时会暂停,你可以一步步调试代码。

  • 监控变量:在调试时可以实时查看变量的值,帮助你分析 JavaScript 的执行过程。

  • 查看本地和会话存储:可以通过 Application 面板查看本地存储(LocalStorage)或会话存储(SessionStorage)中的数据。

(5)Application 面板

作用:查看和管理存储、缓存及会话数据

Application 面板允许你查看页面存储的数据和资源,包括:

  • Cookies:你可以查看每个域名下的 Cookie,并且可以修改或删除它们。

  • LocalStorage 和 SessionStorage:查看页面存储在浏览器本地的数据,这通常用于保持用户状态等。

  • IndexedDB 和 Web SQL:这些是浏览器内的数据库存储,可以存储较大数据。

  • Service Workers:你可以管理页面的服务工作线程(Service Workers),这对于 PWA(渐进式网页应用)和离线功能非常重要。

(6)Performance 面板

作用:分析页面加载性能,进行性能优化

Performance 面板允许你记录页面加载过程中的性能数据,帮助你分析哪些部分消耗了过多的资源。这对于优化页面的加载速度非常重要,开发者可以通过分析页面的渲染、资源加载、JavaScript 执行等来发现瓶颈。

常见功能:

  • 记录页面性能:通过点击 “Record” 按钮,你可以记录页面加载的详细信息,分析每个部分的加载时间。

  • 帧率分析:如果你的页面包含动画或交互,可以查看帧率来确保页面的流畅度。

(7)Security 面板

作用:检查页面的安全性

Security 面板帮助开发者查看页面的安全信息,比如 HTTPS 证书是否有效,是否存在混合内容(即 HTTPS 页面中包含了不安全的 HTTP 资源)。如果你的网站有安全问题,这个面板会显示警告。

(8)Lighthouse 面板

作用:分析页面的整体质量,包括性能、可访问性、SEO

Lighthouse 是一个自动化工具,用于提升 Web 应用的质量。它可以生成关于页面性能、可访问性、SEO(搜索引擎优化)等方面的报告,帮助开发者识别出可以改进的地方。

使用示例:

  • 按下 F12,打开 Lighthouse 面板。

  • 选择要分析的项目(例如性能、SEO 等),点击 “Generate Report” 生成报告。

总结:

  • Elements:查看和编辑页面结构和样式。

  • Console:查看调试信息,执行 JavaScript 代码。

  • Network:监控和分析页面加载的网络请求。

  • Sources:调试 JavaScript 代码,设置断点。

  • Application:管理页面存储的数据和资源。

  • Performance:分析页面性能,识别瓶颈。

  • Security:检查页面的安全性。

  • Lighthouse:生成页面质量报告。

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

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

相关文章

人力资源招聘系统-提升招聘效率与质量的关键工具

在当今这个竞争激烈的商业环境中&#xff0c;企业要想在市场中立于不败之地&#xff0c;关键在于拥有高素质的人才队伍。然而&#xff0c;传统的招聘方式往往效率低下&#xff0c;难以精准匹配企业需求与人才特质&#xff0c;这无疑给企业的发展带来了不小的挑战。 随着科技的飞…

Python3.11.9+selenium,获取图片验证码以及输入验证码数字

Python3.11.9+selenium,获取图片验证码以及输入验证码数字 1、遇到问题:登录或修改密码需要验证码 2、解决办法: 2.1、安装ddddocr pip install ddddocr 2.2、解析验证码函数 import ddddocr def get_capcha_text():#获取验证码图片ele_pic = driver.find_element(By.XPAT…

2024-11-16-机器学习方法:无监督学习(1) 聚类(上)

文章目录 机器学习方法&#xff1a;无监督学习&#xff08;1&#xff09; 聚类&#xff08;上&#xff09;1. 聚类的基本概念1.1 聚类的概念1.2 聚类的功能1.3 聚类的算法 2. 相似度或距离2.1 闵可夫斯基距离2.2 相关系数2.3 夹角余弦 3 类或簇3.1 类的特征 4 类与类之间的距离…

Ubuntu 系统端口查询与管理详细分析

目录 前言1. 查询端口占用情况2. 释放占用的端口3. 修改应用程序的端口 前言 Window的端口被占用&#xff0c;类似的知识点&#xff1a;重装mysql时3306端口被占用解决方法 事情起因是宝塔的CPU负载过大&#xff0c;重启服务进程之后还是爆&#xff0c;后续发现是端口被占用&…

go 集成swagger 在线接口文档

安装swaggo go install github.com/swaggo/swag/cmd/swaglatest 编写swag import ("github.com/gin-gonic/gin""goWeb/internal/service""goWeb/model/response" )// UserRouter 路由 func UserRouter(ctx *gin.RouterGroup) {ctx.GET("/…

蓝桥杯每日真题 - 第15天

题目&#xff1a;&#xff08;钟表&#xff09; 题目描述&#xff08;13届 C&C B组B题&#xff09; 解题思路&#xff1a; 理解钟表指针的运动&#xff1a; 秒针每分钟转一圈&#xff0c;即每秒转6度。 分针每小时转一圈&#xff0c;即每分钟转6度。 时针每12小时转一圈…

Redis性能优化——针对实习面试

目录 Redis性能优化什么是bigkey&#xff1f;bigkey的危害&#xff1f;如何处理bigkey?什么是hotkey&#xff1f;hotkey的危害&#xff1f;如何处理hotkey&#xff1f;如何处理大量key集中过期问题&#xff1f;什么是内存碎片&#xff1f;为什么会有Redis内存碎片&#xff1f;…

小白进!QMK 键盘新手入门指南

经常玩键盘的伙伴应该都知道&#xff0c;现在的键盘市场可谓是百花齐放&#xff0c;已经不是之前的单一功能产品化时代。我们可以看到很多诸如&#xff1a;机械轴键盘、磁轴键盘、光轴键盘、电感轴键盘&#xff0c;以及可能会上市的光磁轴键盘&#xff0c;更有支持屏幕的、带旋…

分布式事务seata基于docker安装和项目集成seata

目录 本地事务 根据隔离性的等级会导致不同的问题 有四种隔离等级 分布式事务 现在有一个场景&#xff1a; 结果&#xff1a; CAP定理 矛盾 总结&#xff1a; es集群使用的是cp: BASE理论 解决分布式事务的思路 Seata Seata的架构 docker安装seata 1.拉取seat…

【Qt实现虚拟键盘】

Qt实现虚拟键盘 &#x1f31f;项目分析&#x1f31f;实现方式&#x1f31f;开发流程 &#x1f31f;项目分析 需求&#xff1a;为Linux环境下提供可便捷使用的虚拟键盘OS环境&#xff1a;Windows 7/11、CentOS 7开发语言&#xff1a;Qt/C IDE&#xff1a;QtCreator 、Qt5.14.2功…

react中如何在一张图片上加一个灰色蒙层,并添加事件?

最终效果&#xff1a; 实现原理&#xff1a; 移动到图片上的时候&#xff0c;给img加一个伪类 &#xff01;&#xff01;此时就要地方要注意了&#xff0c;因为img标签是闭合的标签&#xff0c;无法直接添加 伪类&#xff08;::after&#xff09;&#xff0c;所以 我是在img外…

电子应用产品设计方案-11:全自动智能全屋智能系统设计方案

一、设计目标 打造便捷、舒适、安全且节能的全屋智能环境。 二、系统组成 1. 智能灯光系统 - 在客厅、卧室、厨房、卫生间等各处安装智能灯具&#xff0c;可通过手机 APP、语音控制实现开关、调光调色。如客厅设置多种场景模式&#xff0c;如“观影模式”&#xff08;灯光…

服务端高并发分布式结构进阶之路

序言 在技术求知的旅途中&#xff0c;鉴于多数读者缺乏在中大型系统实践中的亲身体验&#xff0c;难以从宏观角度把握某些概念&#xff0c;因此&#xff0c;本文特选取“电子商务应用”作为实例&#xff0c;详细阐述从百级至千万级并发场景下服务端架构的逐步演变历程。同时&am…

WebRTC视频 02 - 视频采集类 VideoCaptureModule

WebRTC视频 01 - 视频采集整体架构 WebRTC视频 02 - 视频采集类 VideoCaptureModule&#xff08;本文&#xff09; WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇 WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇 WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇 一、前言…

POI实现根据PPTX模板渲染PPT

目录 1、前言 2、了解pptx文件结构 3、POI组件 3.1、引入依赖 3.2、常见的类 3.3、实现原理 3.4、关键代码片段 3.4.1、获取ppt实例 3.4.2、获取每页幻灯片 3.4.3、循环遍历幻灯片处理 3.4.3.1、文本 3.4.3.2、饼图 3.4.3.3、柱状图 3.4.3.4、表格 3.4.3.5、本地…

sqli-labs靶场17-20关(每日四关)持续更新!!!

Less-17 打开靶场&#xff0c;发现页面比之前多了一行字 翻译过来就是&#xff0c;密码重置&#xff0c;大家肯定会想到&#xff0c;自己平时在日常生活中怎么密码重置&#xff0c;肯定是输入自己的用户名&#xff0c;输入旧密码&#xff0c;输入新密码就可以了&#xff0c;但…

node.js下载安装步骤整理

>> 进入node.js下载页面下载 | Node.js 中文网 >>点击 全部安装包 >>删除网址node后面部分&#xff0c;只保留如图所示部分&#xff0c;回车 >>点击进入v11.0.0/版本 >>点击下载node-v11.0.0-win-x64.zip(电脑是windows 64位操作系统适用) >…

ThinkServer SR658H V2服务器BMC做raid与装系统

目录 前提准备 一. 给磁盘做raid 二. 安装系统 前提准备 磁盘和系统BMC地址都已经准备好&#xff0c;可正常使用。 例&#xff1a; 设备BMC地址&#xff1a;10.99.240.196 一. 给磁盘做raid 要求&#xff1a; 1. 将两个894G的磁盘做成raid1 2. 将两块14902G的磁盘各自做…

SpringBoot配置类

在Spring Boot中&#xff0c;配置类是一种特殊的类&#xff0c;用于定义和配置Spring应用程序的各种组件、服务和属性。这些配置类通常使用Java注解来声明&#xff0c;并且可以通过Spring的依赖注入机制来管理和使用。 Spring 容器初始化时会加载被Component、Service、Reposi…

SpringBoot教程(二十五) | SpringBoot配置多个数据源

SpringBoot教程&#xff08;二十五&#xff09; | SpringBoot配置多个数据源 前言方式一&#xff1a;使用dynamic-datasource-spring-boot-starter引入maven依赖配置数据源动态切换数据源实战 方式二&#xff1a;使用AbstractRoutingDataSource1. 创建数据源枚举类2. 创建数据源…