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:生成页面质量报告。
相关文章:

Python爬虫----python爬虫基础
一、python爬虫基础-爬虫简介 1、现实生活中实际爬虫有哪些? 2、什么是网络爬虫? 3、什么是通用爬虫和聚焦爬虫? 4、为什么要用python写爬虫程序 5、环境和工具 二、python爬虫基础-http协议和chrome抓包工具 1、什么是http和https协议…...

css-50 Projects in 50 Days(3)
html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>旋转页面</title><link rel"sty…...

另外一种缓冲式图片组件的用法
文章目录 1. 概念介绍2. 使用方法2.1 基本用法2.2 缓冲原理3. 示例代码4. 内容总结我们在上一章回中介绍了"FadeInImage组件"相关的内容,本章回中将介绍CachedNetworkImage组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的CachedNetwo…...

字节青训-小C的外卖超时判断、小C的排列询问
目录 一、小C的外卖超时判断 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 最终代码: 运行结果: 二、小C的排列询问 问题描述 测试样例 最终代码: 运行结果: 编辑 一、小C的外卖超时判断…...

PHP 伪静态详解及实现方法
概述 在现代 Web 开发中,URL 的设计对用户体验和搜索引擎优化(SEO)至关重要。动态 URL 虽然功能强大,但往往显得冗长且不友好。伪静态(URL 重写)技术通过将动态 URL 转换为静态样式,不仅提高了…...

Spring Boot 简单预览PDF例子
目录 前言 一、引入依赖 二、使用步骤 1.创建 Controller 处理 PDF 生成和预览 2.创建预览页面 总结 前言 使用 Spring Boot 创建一个生成 PDF 并进行预览的项目,你可以按以下步骤进行。我们将使用 Spring Boot、Thymeleaf、iText 等技术来完成这个任务。 一、引入…...

【魔珐有言-注册/登录安全分析报告-无验证方式导致安全隐患】
前言 由于网站注册入口容易被机器执行自动化程序攻击,存在如下风险: 暴力破解密码,造成用户信息泄露,不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 ,造成用户无法登陆、注册,大量收到垃圾短信的…...

LabVIEW 使用 Snippet
在 LabVIEW 中,Snippet(代码片段) 是一个非常有用的功能,它允许你将 一小段可重用的代码 保存为一个 图形化的代码片段,并能够在不同的 VI 中通过拖放来使用。 什么是 Snippet? Snippet 就是 LabVIEW 中的…...

单片机_day3_GPIO
目录 1. 灯如何才能亮 1.1原理图 1.2 二极管 1.3 换了一个灯和原理图 编辑 1.4 三极管 1.4.1 NPN型三极管 1.4.2 PNP型三极管 2. 基本概念 3. 输入 3.1 浮空输入 3.2 上拉输入 3.3 下拉输入 3.4 模拟输入 4. 输出 4.1 推挽输出 4.2 开漏输出 如何让开漏输出…...

Python小游戏24——小恐龙躲避游戏
首先,你需要安装Pygame库。如果你还没有安装,可以通过以下命令安装: 【bash】 pip install pygame 【python】代码 import pygame import random # 初始化Pygame pygame.init() # 设置屏幕尺寸 screen_width 800 screen_height 600 screen …...

Python 的多态笔记
Python的多态实际是通过instance 实现的 class Person:def __init__(self, name,age):self.name nameself.age agedef feed_pet(self,pet):#isinastance(obj,类)-->判断obj,是不是这个类的对象,或者判断obj是不是该类的子类的对象if isinstance(pet, Pet):sel…...

go module使用
go module介绍 go module是go官⽅⾃带的go依赖管理库,在1.13版本正式推荐使⽤ go module可以将某个项⽬(⽂件夹)下的所有依赖整理成⼀个 go.mod ⽂件,⾥⾯写⼊了依赖的版本等 使⽤ go module之后我们可不⽤将代码放置在src下了 使⽤ go module 管理依赖后会在项⽬根⽬录下⽣成…...

c ++零基础可视化——数组
c 零基础可视化 数组 一些知识: 关于给数组赋值,一个函数为memset,其在cplusplus.com中的描述如下: void * memset ( void * ptr, int value, size_t num );Sets the first num bytes of the block of memory pointed by ptr to…...

CVE-2024-2961漏洞的简单学习
简单介绍 PHP利用glibc iconv()中的一个缓冲区溢出漏洞,实现将文件读取提升为任意命令执行漏洞 在php读取文件的时候可以使用 php://filter伪协议利用 iconv 函数, 从而可以利用该漏洞进行 RCE 漏洞的利用场景 PHP的所有标准文件读取操作都受到了影响࿱…...

计算机组成原理笔记----基础篇
计算机系统硬件软件 软件 ├── 系统软件 │ ├── 操作系统 │ └── 工具软件 └── 应用软件├── 办公软件├── 媒体软件└── 浏览器软件硬件 ├── 计算机硬件 │ ├── 中央处理器(CPU) │ ├── 存储设备 │ │ ├── …...

TheadLocal出现的内存泄漏具体泄漏的是什么?弱引用在里面有什么作用?什么情景什么问题?
首先ThreadLocal是什么就不介绍了!这篇是讲讲里面的东西。 再简单说一下强引用和弱引用,举个例子,我们平常new出来的对象就是强引用的,在栈中有强引用,所以在gc的时候,堆中的实例对象不会被清除掉。 弱引…...

AI在电商平台中的创新应用:提升销售效率与用户体验的数字化转型
1. 引言 AI技术在电商平台的应用已不仅仅停留在基础的数据分析和自动化推荐上。随着人工智能的迅速发展,越来越多的电商平台开始将AI技术深度融合到用户体验、定价策略、供应链优化、客户服务等核心业务中,从而显著提升运营效率和用户满意度。在这篇文章…...

CTF-RE 从0到N:RC4
RC4加密算法简介 RC4是由Ron Rivest于1987年设计的一种流加密算法。它通过伪随机数生成器生成密钥流,并将该密钥流与明文进行异或运算来完成加密和解密。 RC4的加密流程 RC4主要包含两个阶段: 密钥调度算法 (Key Scheduling Algorithm, KSA)ÿ…...

HbuilderX 插件开发-模板创建
实现思路 使用HbuilderX 打开某个文档时右键点击的时候获取当前打开的文档内容使用 API 替换为自己的模板 示例 package.json {"id": "SL-HbuilderX-Tool","name": "SL-HbuilderX-Tool","description": "快速创建h…...

打造专业问答社区:Windows部署Apache Answer结合cpolar实现公网访问
文章目录 前言1. 本地安装Docker2. 本地部署Apache Answer2.1 设置语言选择简体中文2.2 配置数据库2.3 创建配置文件2.4 填写基本信息 3. 如何使用Apache Answer3.1 后台管理3.2 提问与回答3.3 查看主页回答情况 4. 公网远程访问本地 Apache Answer4.1 内网穿透工具安装4.2 创建…...

YOLO-SLD: An Attention Mechanism-ImprovedYOLO for License Plate Detection
摘要 车辆牌照检测在智能交通系统中发挥着关键作用。检测汽车、卡车和面包车等的牌照对于执法、监控和收费站操作非常有用。如何快速准确地检测牌照对牌照识别至关重要。然而,在现实世界复杂捕捉场景中,光照条件不均匀或牌照拍摄角度的倾斜会发生剧烈变…...

ArcGIS的汉字(亚洲文本)垂直标注
01 需求说明 实现ArcGIS的汉字(亚洲文本的垂直标注)。 启用 Maplex 标注引擎。 在标注 工具条上单击标注管理器按钮 。 选中要进行标注的图层旁边的复选框。 选择图层下方的标注分类。 单击符号。 选中 CJK 字符方向复选框。 仅当字体有垂直的文本度…...

【面试题】
1.UART 和 IIC 的区别 UART (Universal Asynchronous Receiver-Transmitter) 用途:用于异步串行通信。信号线:通常需要两根线(TX 和 RX),有时还需一根地线。通信方式:点对点。数据传输:单向或…...

Leetcode 寻找峰值
为了实现时间复杂度为 O ( log n ) O(\log n) O(logn),可以使用二分查找法: 解题思路: 峰值的特性是:当前元素大于左右相邻元素。使用二分法: 如果 nums[mid] > nums[mid 1],说明峰值在左侧或当前…...

探索大规模语言模型(LLM)在心理健康护理领域中的应用与潜力
概述 心理健康是公共卫生最重要的领域之一。根据美国国家精神卫生研究所(NIMH)的数据,到 2021 年,22.8% 的美国成年人将患上某种形式的精神疾病。在全球范围内,精神疾病占非致命性疾病负担的 30%,并被世界…...

Infisical开源密钥管理平台实战指南
1. 引言 在现代软件开发中,安全地管理环境变量和敏感信息已成为一个关键挑战。Infisical作为一个开源的密钥管理平台,为这一问题提供了强大而灵活的解决方案。本指南将深入探讨Infisical的功能,并通过实际操作步骤,帮助读者全面了解和使用这个工具。 2. Infisical概述 I…...

AI大模型:重塑软件开发流程与模式
人工智能技术的飞速发展,尤其是AI大模型的兴起,正以前所未有的速度和深度影响着各行各业,其中软件开发领域尤为显著。AI大模型,如GPT系列、BERT、Claude等通过其强大的自然语言处理能力、代码理解和生成能力,正在从根本…...

AMD(Xilinx) FPGA配置Flash大小选择
目录 1 FPGA配置Flash大小的决定因素2 为什么选择的Flash容量大小为最小保证能够完成整个FPGA的配置呢? 1 FPGA配置Flash大小的决定因素 在进行FPGA硬件设计时,选择合适的配置Flash是我们进行硬件设计必须考虑的,那么配置Flash大小的选择由什…...

基于Java Springboot图书借阅系统
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…...

DDRPHY数字IC后端设计实现系列专题之数字后端floorplanpowerplan设计
3.2.3 特殊单元的布局 布图阶段除了布置 I/O 单元和宏单元,在 28nm 制程工艺时,还需要处理两种特 殊的物理单元,Endcap 和 Tapcell。 DDRPHY数字IC后端设计实现系列专题之后端设计导入,IO Ring设计 (1)拐…...