爬虫的原理(基本流程,Request与Response,怎么解决JavaScript渲染的问题,怎么保存数据)

2023-10-27

什么是爬虫?
爬虫就是请求网站并提取数据的自动化程序。

爬虫基本流程

1.发起请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等配置信息,等待服务器响应。
2.获取响应内容:如果服务器能正常响应,会得到一个Response,其中的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。
3.解析内容:得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
4.保存数据:保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。

Request与Response

(1)浏览器发送消息给该网址所在的服务器,这个过程就叫做HTTP Request。
(2)服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response。
(3)浏览器收到服务器的Response信息后,会对信息进行相应处理,然后展示。

Request

1.请求方式:主要有GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等。
2.请求URL:URL全称统一资源定位符,如一个网页文档、一张图片、一个视频等都可以用URL唯一来确定。
3.请求头:包含请求时的头部信息,如User-Agent、Host、Cookies等信息。
4.请求体:请求时额外携带的数据,如表单提交时的表单数据。

Response

1.相应状态:有多种响应状态,如200代表成功、301跳转、404找不到页面、502服务器错误。
2.响应头:如内容类型、内容长度、服务器信息、设置Cookie等等。
3.响应体:最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等。

简单试验

在python交互模式下执行以下命令:
import requests
response=requests.get(‘http://www.baidu.com’)
print(response.text)
在这里插入图片描述
这些命令将一次 requests后得到的response的内容通过库里的get方法获取,并打印出来。
在这里插入图片描述
还可以看看response的响应头长啥样:
print(response.headers)
在这里插入图片描述
可以看到这是一个字典形式的结构。
再看看状态码:
print(response.status_code)
在这里插入图片描述
以上就是简单用代码感受以下Request与Response的过程。

能抓怎样的数据

1.网页文本:如HTML文档、Json格式文本等。
2.图片:获取到的是二进制文件,保存为图片格式。
3.视频:同为二进制文件,保存为视频格式即可。
4.其他:只要是能请求到的,都能获取。

怎样来解析

1.直接处理
2.Json解析
3.正则表达式
4.BeautifulSoup解析库
5.PyQuery
6.XPath

为什么我们抓到的和浏览器审查看到的不一样?

以微博为例,我们可以看一下首页的源代码(右键:检查):
在这里插入图片描述
将代码赋值到文本编辑器中看一下:
在这里插入图片描述
可以看到这里有许多用js配置的形式,和我们直接浏览网站看到的并不一样。
现在我们用命令行试试,在python交互模式下执行以下命令:
import requests
requests.get(‘http://m.weibo.com’)
requests.get(‘http://m.weibo.com’).text
可以看到窗口中打印一堆密集的东西,这和刚才文本编辑器中看到的内容是一样的。
问题的回答就是:网页最终显示的页面源码是经过浏览器解释后的,我们get或者post请求到的源码是服务器直接返回的。二者是不一样的。

怎么解决JavaScript渲染的问题

1.分析Ajax请求

返回的是json格式的字符串,方便我们提取数据

2.用Selenium/WebDriver驱动一个浏览器来模拟加载网页

演示一下,在python交互模式下执行以下命令:
from selenium import webdriver
driver=webdriver.Chrome()
driver.get(‘http://m.weibo.com’)
driver.get(‘http://www.taobao.com’)
print(driver.page_source)
(注意,需要先安装webdriver这个库,以及Chromedriver,详情可以看这篇文章:https://blog.csdn.net/z714405489/article/details/83047772)
系统就会驱动一个浏览器,并且访问我们请求的网址,最后可以将该页面的源代码打印出来,这和我们审查网页源代码时看到的就是一样的了。

3.Splash

可以在github搜索详情。

4.PyV8、Ghost.py等等其他的库

怎样保存数据?

1.文本:纯文本、Json、Xml等。
2.关系型数据库:MySQL、Oracke、SQL Server等具有结构化表结构形式存储。
3.非关系型数据库:如MongoDB、Redis等Key-Value形式存储。
4.二进制文件:如图片、视频、音频等等直接保存成特定格式即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

爬虫的原理(基本流程,Request与Response,怎么解决JavaScript渲染的问题,怎么保存数据) 的相关文章

随机推荐

  • UVA-1354 天平难题 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 这道题需要 1 遍历二叉树的每种构成方式 我这里每次把当前所有结点列出 然后遍历选取两个组合构成一个新结点 原来的结点剔除 新结点
  • 17张经典动态图带您看懂电动机运行原理!电机一共有多少种?

    电动机 电动机是一种旋转式电动机器 它将电能转变为机械能 它主要包括一个用以产生磁场的电磁铁绕组或分布的定子绕组和一个旋转电枢或转子 在定子绕组旋转磁场的作用下 其在电枢鼠笼式铝框中有电流通过并受磁场的作用而使其转动 这些机器中有些类型可作
  • php弹窗24小时一次,javascript 24小时弹出一次的代码(利用cookies)_广告代码

    function jb51tuitan if getCookie jb51popped 要执行的代码或一些操作 setCookie jb51popped ok 写入cookies表示已经执行过了 alert ok jb51tuitan fu
  • spring mvc 集成freemarker模板

    主要使用到的jar 文件 spring mvc freemarker jar 第一步 spring mvc 集成 freemarker
  • SQL如何进行帕累托分析?(窗口函数、累计百分比分类)

    帕累托分析法是指定决策的统计方法 包含按降序排序的列和表示累积总百分比的线条 面试题 有一张 学生成绩表 包含3个字段 学号 课程 成绩 问题 找出每门课程A类和B类的学生 判断标准是累计占比 0 60 的记为A类 60 85 记为B类 解
  • GPIO模块功能测试

    目录 1 功能描述 2 端口复用 3 如何操作 4 测试代码分析 4 1GPIO VERIFICATION01 GPIO复位值验证 4 2GPIO VERIFICATION02 GPIO读写验证 4 3GPIO VERIFICATION03
  • WebGL射线拾取模型——八叉树优化

    经过前面2篇WebGL射线拾取模型的文章 相信大家对射线和模型面片相交的原理已经有所了解 那么今天我们再深入探究关于射线拾取的一个问题 那就是遍历场景中的所有与射线相交的模型的优化问题 首先我们来复习一下射线拾取模型的原理 请看下图 我们从
  • ELK 日志系统收集K8s中日志

    容器特性给日志采集带来的困难 K8s弹性伸缩性 导致不能预先确定采集的目标 容器隔离性 容器的文件系统与宿主机是隔离 导致日志采集器读取日志文件受阻 日志按体现方式分类 应用程序日志记录体现方式分为两类 标准输出 输出到控制台 使用kube
  • 人工智能算法 上市公司,人工智能算法公司排名

    人工智能上市公司龙头股票有哪些 一 科大讯飞 002230 属于人工智能稀缺标的 多领域布局苦尽甘来 业绩拐点临近 二 浪潮信息 000977 人工智能基础设施提供商 目前具备业界最全CPU服务器产品线 三 中科曙光 603019 含着金钥
  • 第十二章 内中断

    引言 本书主要讲解硬件中断 12 1 内中断的产生 12 2 中断处理程序 12 3 中断向量表 中断向量表在内存中存放 对于8086PC机 中断向量表指定存放在内存地址0处 从内存0000 0000到0000 03FF的1024个单元中存
  • 微信小程序npm构建

    步骤 一 初始化 npm init y 自动生成生成package json文件 二 project config js配置项 packNpmManually false packNpmRelationList packageJsonPat
  • error: No rule to make target ‘...‘. Stop. 解决方案

    一 error 二 解决方案 第一步 删除 xxx pro 文件中的 RESOURCES xxx qrc 然后 CTRL S 保存文件 第二步 重新添加资源文件 注 文件名不要使用中文 以避免未知的错误 三 环境
  • 类成员函数创建线程

    include
  • iOS--伪后台(安卓与iOS区别)

    1 后台机制方面的区别 提到后台 大家应该会很容易想到安卓的真后台了吧 所谓真后台 就是像PC一样 将应用保留在RAM中 当你使用HOME键退出应用 程序实际上并没有完全退出 而是被系统挂在了后台 比如一些聊天软件 之所以关闭后依然能够收到
  • 注意力机制详述

    学习本部分默认大家对RNN神经网络已经深入理解了 这是基础 同时理解什么是时间序列 尤其RNN的常用展开形式进行画图 这个必须理解了 这篇文章整理有关注意力机制 Attention Mechanism 的知识 主要涉及以下几点内容 1 注意
  • Django 项目使用 Bootstrap 的导入方式

    Django 项目中导入 Bootstrap 是固定的 补充 1 Django 项目的 html 文件中必须先写 meta 再引入其他内容 并且对于导入 JS 的先后顺序有比较严格的要求 补充 2 Django 项目表单中使用POST的方法
  • C++ 对象模型

    C 对象模型 虚函数机制 实现执行器绑定 虚基类机制 实现多继承体系中只有一个共享实体 非静态数据成员放在 object 之中 静态数据成员放在 object 之外 静态和非静态成员函数都放在 object 之外 每个类会产生一堆指向虚函数
  • 表单--form对象

    在Javascript 中 页面上的每一对
  • AAAI 2021

    作者 孙宇冲 单位 中国人民大学 多模态学习旨在使计算机拥有处理不同来源信息的能力 近年来成为了人工智能领域的研究热点 多模态学习将不同模态信息进行融合 学习不同模态信息之间的关联 人类对信息的处理其实也是多模态的 如人可以同时利用视觉和听
  • 爬虫的原理(基本流程,Request与Response,怎么解决JavaScript渲染的问题,怎么保存数据)

    什么是爬虫 爬虫就是请求网站并提取数据的自动化程序 爬虫基本流程 1 发起请求 通过HTTP库向目标站点发起请求 即发送一个Request 请求可以包含额外的headers等配置信息 等待服务器响应 2 获取响应内容 如果服务器能正常响应