爬虫入门urllib 和 request (一)

news2024/11/24 18:49:12

前言

在开始进行爬虫的知识之前,我们需要明白web网页是怎么工作的?浏览器工具是怎么使用的?反爬虫的手段手段是那些?

一.web请求全过程解析

我们浏览器在输入完网址到我们看到网页的整体内容, 这个过程中究竟发生了些什么?

我们看一下一个浏览器请求的全过程
在这里插入图片描述
在这里插入图片描述

这里还要介绍几个概念

浏览器输入的路径

在这里插入图片描述

页面渲染过程的过程

1. 服务器渲染, 你需要的数据直接在页面源代码里能搜到

在这里插入图片描述
由于数据是直接写在html中的, 所以我们能看到的数据都在页面源代码中能找的到的.

这种网页一般都相对比较容易就能抓取到页面内容.

2.前端JS渲染, 你需要的数据在页面源代码里搜不到

这种就稍显麻烦了. 这种机制一般是第一次请求服务器返回一堆HTML框架结构. 然后再次请求到真正保存数据的服务器, 由这个服务器返回数据, 最后在浏览器上对数据进行加载. 就像这样:

在这里插入图片描述

代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>案例:动态渲染页面</title>
    <style>
        table{
            width: 300px;
            text-align: center;
        }
    </style>
</head>
<body>
    <table border="1" cellspacing="0">
        <thead>
            <tr>
                <th>ID</th>
                <th>姓名</th>
                <th>年龄</th>
            </tr>
        </thead>
        <tbody>
        <!--        js渲染-->
        </tbody>
    </table>

    <script>
        //提前准备好的数据
        var users = [
            {id: 1, name: '张三', age: 18},
            {id: 2, name: '李四', age: 28},
            {id: 3, name: '王麻子', age: 38}
        ]

        //获取tbody标签
        var tbody = document.querySelector('tbody')

        //1.循环遍历users数据
        users.forEach(function (item) {
            //这里的item 就是数组中的每一个对象
            console.log(item)
            //2. 每一个对象生成一个tr标签
            var tr = document.createElement('tr')

            //循环遍历item
            for(var key in item){
                //生成td标签
                var td = document.createElement('td')
                td.innerHTML = item[key]

                //5.把td 插入到tr内部
                tr.appendChild(td)
            }
            //把本次的tr插入到tbody的内部
            tbody.appendChild(tr)
        })
    </script>
</body>
</html>

这样做的好处是服务器那边能缓解压力. 而且分工明确. 比较容易维护. 典型的有这么一个网页
在这里插入图片描述
那数据是何时加载进来的呢? 其实就是在我们进行页面向下滚动的时候, jd就在偷偷的加载数据了, 此时想要看到这个页面的加载全过程, 我们就需要借助浏览器的调试工具了(F12)

在这里插入图片描述
在这里插入图片描述
看到了吧, 页面上看到的内容其实是后加载进来的.

也不是说这两种方式有什么不同, 只是想告诉各位, 有些时候, 我们的数据不一定都是直接来自于页面源代码. 如果你在页面源代码中找不到你要的数据时, 那很可能数据是存放在另一个请求里.

 1.你要的东西在页面源代码. 直接拿`源代码`提取数据即可
 2.你要的东西,不在页面源代码, 需要想办法找到真正的加载数据的那个请求. 然后提取数据

二.浏览器工具的使用

Chrome是一款非常优秀的浏览器. 不仅仅体现在用户使用上. 对于我们开发人员而言也是非常非常好用的.

对于一名爬虫工程师而言. 浏览器是最能直观的看到网页情况以及网页加载内容的地方. 我们可以按下F12来查看一些普通用户很少能使用到的工具.
在这里插入图片描述
其中, 最重要的Elements, Console, Sources, Network…

  • Elements是我们实时的网页内容情况, 注意, 很多兄弟尤其到了后期. 非常容易混淆Elements以及页面源代码之间的关系.

注意,

  1. 页面源代码是执行js脚本以及用户操作之前的服务器返回给我们最原始的内容
  2. Elements中看到的内容是js脚本以及用户操作之后的当时的页面显示效果.

你可以理解为, 一个是老师批改之前的卷子, 一个是老师批改之后的卷子. 虽然都是卷子. 但是内容是不一样的. 而我们目前能够拿到的都是页面源代码. 也就是老师批改之前的样子. 这一点要格外注意.

在Elements中我们可以使用左上角的小箭头.可以直观的看到浏览器中每一块位置对应的当前html状况. 还是很贴心的.
在这里插入图片描述

  • 第二个窗口, Console是用来查看程序员留下的一些打印内容, 以及日志内容的. 我们可以在这里输入一些js代码自动执行.
    在这里插入图片描述
  • 第三个窗口, Source, 这里能看到该网页打开时加载的所有内容. 包括页面源代码. 脚本. 样式, 图片等等全部内容.
    在这里插入图片描述
  • 第四个窗口, Network, 我们一般习惯称呼它为抓包工具. 在这里, 我们能看到当前网页加载的所有网路网络请求, 以及请求的详细内容. 这一点对我们爬虫来说至关重要.
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

三.反爬虫的一般手段

爬虫项目最复杂的不是页面信息的提取,反而是爬虫与反爬虫、反反爬虫的博弈过程

  • User-Agent

    浏览器的标志信息,会通过请求头传递给服务器,用以说明访问数据的浏览器信息

    反爬虫:先检查是否有UA,或者UA是否合法

  • 代理IP

  • 验证码访问

  • 动态加载网页

  • 数据加密

四.常用HTTPP状态码

  • 200:这个是最常见的http状态码,表示服务器已经成功接受请求,并将返回客户端所请
  • 100-199 用于指定客户端应相应的某些动作。
  • 200-299 用于表示请求成功。
  • 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。
  • 400-499 用于指出客户端的错误。
    • 404:请求失败,客户端请求的资源没有找到或者是不存在
  • 500-599 服务器遇到未知的错误,导致无法完成客户端当前的请求。

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

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

相关文章

JavaEE 第21节 UDP数据报结构剖析

目录 前言报文结构1、源端口号&目的端口号2、UDP长度3、校验和概念校验和计算方法 前言 本篇文章会围绕UDP报文的结构&#xff0c;对此协议展开详细的讲解&#xff0c;比如报文中每个字段的作用、以及填写方式。 阅读完这篇文章&#xff0c;你会对UDP数据报结构有个透彻的…

不知道电脑驱动软件哪个好,试试这几款免费不限速的驱动安装软件

每一台电脑都需要安装相关的驱动才能保证设备的正常运行&#xff0c;然而&#xff0c;很多用户搜索下载的驱动安装软件不是捆绑各类软件就是限速下载或者需要开通会员。下面小编就来和大家分享几款免费且不限速的驱动安装软件&#xff0c;帮助大家找到最适合自己的驱动管理工具…

idea使用maven

文章目录 IDEA集成Maven配置Maven环境 全局配置&#xff1a;创建Maven项目POM配置详解 IDEA集成Maven 我们要想在IDEA中使用Maven进行项目构建&#xff0c;就需要在IDEA中集成Maven 配置Maven环境 当前工程设置 1、选择 IDEA中 File > Settings > Build,Execution,Dep…

7,sql 基本的创建库表查询数据

-- 创建库 CREATE DATABASE IF NOT EXISTS test04_dql; 切换到这个库USE test04_dql;-- 创建员工表 DROP TABLE IF EXISTS t_employee; ---创建字段CREATE TABLE t_employee (eid INT NOT NULL COMMENT 员工编号,ename VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900…

网站建设完成后, 做seo必须知道的专业知识之--黑帽SEO

黑帽SEO是指通过不道德或不公平的手段&#xff0c;试图提高网站在搜索引擎中的排名。下面将详细探讨黑帽SEO的各个方面&#xff1a; 定义与原理 定义概述&#xff1a;黑帽SEO涉及使用作弊策略和技巧&#xff0c;目的在于快速提升网站的搜索引擎排名&#xff0c;而非通过正当的…

Django+Vue音乐推荐系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作者&…

C语言试题生成与考试系统/在线考试系统/试题管理系统

摘要 学生考试实现智能化管理的帮手需要有试题生成与考试系统&#xff0c;这样能够提高管理员的管理效率&#xff0c;试题生成与考试系统需要提供给用户查询的功能。计算机网络如果结合使用信息管理系统&#xff0c;能够提高管理员管理的效率&#xff0c;改善服务质量。优秀的…

【Linux操作系统】重装系统配置文件一条龙

【Linux操作系统】重装系统配置文件一条龙 文章目录 【Linux操作系统】重装系统配置文件一条龙虚拟机网络配置安装net-tools工具解决屏幕自适应问题解决虚拟机与主机复制粘贴问题文件互通安装ssh服务vscode远程写代码改中文中文输入法支持apt更新源 下面一切案例均在ubantu22.0…

7个流行的开源数据治理工具

数字化时代&#xff0c;数据是已经成为最宝贵的资产之一。数据支撑着我们的政府、企业以及各类组织的所有流程&#xff0c;并为决策以及智能化服务提供支撑。大数据有大用途&#xff0c;但是也可能隐藏着巨大的风险&#xff0c;特别是如果我们对数据的情况不是很了解的时候&…

Java技术栈 —— Spark入门(三)之实时视频流

Java技术栈 —— Spark入门&#xff08;三&#xff09;之实时视频流转灰度图像 一、将摄像头数据发送至kafka二、Kafka准备topic三、spark读取kafka图像数据并处理四、本地显示灰度图像(存在卡顿现象&#xff0c;待优化) 项目整体结构图如下 参考文章或视频链接[1] Architectur…

RocketMQ学习(二)

文章目录 1. 案例介绍1.1 业务分析1&#xff09;下单2&#xff09;支付 1.2 问题分析问题1如何保证数据的完整性&#xff1f;使用MQ保证在下单失败后系统数据的完整性 问题2如何处理第三方支付平台的异步通知通过MQ进行数据分发&#xff0c;提高系统处理性能 2. 技术分析2.1 技…

Visual Studio 快速跳转至特定程序行的快捷键

Visual Studio 快速跳转至特定程序行的快捷键 linuxWindows在Visual Studio中在Visual Code中在Notepad中Win11中的普通记事本 总结 linux :numWindows Ctrl G在Visual Studio中 在Visual Code中 Ctrl G也是可以的 在Notepad中 Ctrl G也是可以的 Win11中的普通记事本…

模型 生产微笑曲线

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。产业链中&#xff0c;研发设计和品牌营销环节附加值高&#xff0c;制造环节附加值低。 1 生产微笑曲线的应用 1.1 大杨集团的“微笑曲线”到“武藏曲线”转型 武藏曲线简介说明&#xff1a;在制造业…

JavaScript的对象详解

作为程序员&#xff0c;我们常常会听见一种说法&#xff0c;那就是面向对象编程。那到底什么是对象呢&#xff1f;有改如何面向对象编程呢&#xff1f;今天我们就来详细讲讲 什么是对象呢&#xff1f; 对象是JavaScript中一个非常重要的概念&#xff0c;这是因为对象可以将多个…

Java项目怎么从零部署到Linux服务器上?

目录 一.Java环境&#xff08;JDK&#xff09;安装 二.数据库&#xff08;MySQL&#xff09;安装 三.部署上线 ▐ 部署Jar包 ▐ 运行程序 ▐ 开放端口 一个Java项目首先需要一个支持它编译的Java环境&#xff0c;因此首先要保证服务器上安装的有相应的JDK 一.Java环境&a…

为什么使用雪花算法,有什么优缺点,如何解决?为什么不使用UUID的方法,如何解决系统回拨的问题?

为什么使用雪花算法&#xff0c;有什么优缺点&#xff0c;如何解决&#xff1f;为什么不使用UUID的方法&#xff0c;如何解决系统回拨的问题&#xff1f; 生成的id应该满足下面的条件&#xff1a; 首先是全局唯一&#xff0c;不能出现重复的ID之后是总体应该是递增的&#xf…

8个平面设计必备素材网站,免费下载。

平面设计师应该去哪里找免费可商用素材网站&#xff1f;我推荐这8个&#xff0c;赶紧收藏好。 1、菜鸟图库 菜鸟图库-免费设计素材下载 菜鸟图库是一个非常大的素材库&#xff0c;站内包含设计、办公、自媒体、图片、电商等各行业素材。网站还为新手设计师提供免费的素材&…

基于django的失物招领系统的设计与实现/ 基于Python的失物招领系统的设计与实现/失物招领管理系统

失物招领系统的设计与实现 摘要:伴随着我国全面推动信息化的趋势&#xff0c;我国的很多行业都在朝着互联网的方向进发。结合计算机技术的失物招领系统能够很好地解决传统失物招领存在的问题&#xff0c;能够提高管理员管理的效率&#xff0c;改善服务质量。优秀的失物招领系统…

感染了后缀为.Wormhole勒索病毒如何应对?数据能够恢复吗?

引言&#xff1a; 在当今日益复杂的网络安全环境中&#xff0c;勒索病毒成为了企业和个人面临的一大威胁。其中&#xff0c;.Wormhole勒索病毒以其独特的传播机制和强大的加密能力&#xff0c;尤为引人注目。本文将深入探讨.Wormhole勒索病毒的特点、感染途径、危害以及相应的…

XSS LABS 靶场初识

关注这个靶场的其他相关笔记&#xff1a;XSS - LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;XSS LABS 靶场简介 XSS LABS 靶场是一个专注于跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;XSS&#xff09;教育和训练的平台。平台中有一系列精心设计的关于 XS…