【Python网络蜘蛛】:基础 - 爬虫的基本原理
文章目录
- 爬虫概述
- 能爬的数据
- JavaScript渲染的页面
爬虫概述
- 获取网页
在HTTP基本原理中讲了请求和响应的概念,向网站的服务器发送一个请求,服务器返回的响应体便是网页源码。关键部分即构造请求并发送给服务器,然后接收响应对其进行解析。这个过程可使用Python提供的库:urllib、requests等来完成HTTP请求操作。 - 提起信息
获取网页源码后,接下来就是分析源码,提取我们想要的数据。通用的提取方法是采用正则表达式,另外由于网页结构具有一定的规则,所以还有一些库是根据网页节点属性、CSS选择器或XPath来提取网页信息,如Beautiful、Soup、pyquery、lxml等。 - 保存数据
提取信息后,我们需要保存数据到某处以遍后续使用。保存数据的形式多种多样,可保存为TXT文本或JSON文本,也可以保存到数据库,如MySQL和MongoDB等,还可以保存至远程服务器,如借助SFTP进行操作等。
能爬的数据
- HTML源代码
- JSON字符串
- 各种扩展名文件,如CSS、JavaScript和配置文件等
上述内容都有各自对应的URL,URL基于HTTP或HTTPS协议,只要是这种数据,都可以抓取。
JavaScript渲染的页面
当我们在用urllib或requests抓取网页时,得到的源码和在浏览器中看到的不一样。
这是一个非常常见的问题。现在越来越多的网页是采用Ajax、前端模块化工具构建的,可能整个网页都是由JavaScript渲染出来的,也就是说原始的HTML代码就是一个空壳,例如:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>例子</title>
</head>
<body><div id="content"></div>
</body>
<script src="app.js"></script>
</html>
body节点里面只有一个id为content的节点,需要注意在body节点后引入了app.js,它负责整个网站的渲染。
当浏览器打开这个网页时首先加载这个HTML内容,接着引入app.js文件,JavaScript会改变HTML中的节点,想其中添加内容,最后获得完整的页面。
在用urllib和requests等库请求当前页面时,只能获得HTML代码,不会加载JavaScript文件,我们也就无法看到完整的页面内容。
对于这种情况,我们可以分析源代码后台Ajax接口,也可以使用Selenium、Splash、Pyppeteer、Playwright这样的库来模拟JavaScript渲染。
后续会详细介绍如何采集JavaScript渲染出来的网页。
【Python网络蜘蛛】:基础 - 爬虫的基本原理相关推荐
- python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...
python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...
- python网络编程证书_《Python网络编程基础》笔记
python网络编程基础 ================== Author: lujun9972 Date: 2013-03-08 22:29:20 CST Table of Contents == ...
- 《python网络编程基础》PDF 下载
<python网络编程基础> > 方式一: 链接:百度网盘下载地址 [ https://pan.baidu.com/s/1BiDw-gVKGrLbgUnqHUt1qQ ] 提取码:4 ...
- Python网络编程基础之ip地址,端口号,TCP,socket
Python网络编程基础 IP地址 ip地址表现形式 查看ip地址 Linux Windows 检查网络是否正常 端口与端口号 端口号分类 知名端口号 动态端口号 TCP协议 概念 TCP通讯步骤 特 ...
- python网络编程基础百度云_PYTHON网络编程基础 PDF 下载
相关截图: 资料简介: <Python网络编程基础>全面介绍了使用Python语言进行网络编程的基础知识,主要内容包括网络基础知识.高级网络操作.Web Services.解析HTML和X ...
- 【Python网络蜘蛛】:基础 - HTTP基本原理
文章目录 1.1 HTTP基本原理 1. URI和URL 2. HTTP和HTTPS 3. HTTP请求过程 4. 请求 5. 响应 1.1 HTTP基本原理 1. URI和URL URI为统一资源标 ...
- 【Python网络蜘蛛】基础 - 多线程和多进程的基本原理
文章目录 多线程和多进程的基本原理 多线程的含义 并发和并行 Python中的多线程和多进程 多线程和多进程的基本原理 在编写爬虫程序的时候,为了提高爬取效率,我们可能会同时运行多个爬虫任务,其中同样 ...
- python网络编程基础知识_python网络编程基础
一.客户端/服务器架构 网络中到处都应有了C/S架构,我们学习socket就是为了完成C/S架构的开发. 二.scoket与网络协议 如果想要实现网络通信我们需要对tcpip,http等很多网络知识有 ...
- [Python]网络编程基础
客户端/服务器网络编程 在服务器响应客户端请求之前,必须进行一些初步的设置流程来为之后的工作做准备.首先会创建一个通信端点,它能够使服务器监听请求.一旦一个通信端点已经建立,监听服务器就可以进入无限循 ...
最新文章
- discuz 删除系统自带的附件上传
- Android Studio SDK Manager 解决无法更新问题
- 有个小问题,大家一起研究。
- pgpool-II3.1 的内存泄漏(六)
- Java基础篇:final关键字
- ChoiceFormat:数字范围格式
- 精讲23种设计模式-基于观察者模式~设计异步多渠道群发框架
- linux还原系统_怎么成为一名合格的Linux运维工程师
- fastNLP工具包, 快速实现序列标注模型
- 分布式设计 —— 容错与主备
- Win7 安装程序时报错 error 1935 HRESULT 0x80070422
- 牛客网项目——项目开发(三):开发登录模块
- 金融科技方便生活,分布式架构助力微粒贷“闪电放款”
- hbase —— Dead Region Servers
- 如何提高代码质量,或者说高质量代码的特征是什么
- OBS美颜滤镜插件,美白、瘦脸....
- 论文阅读:**CTF: Anomaly Detection in High-Dimensional Time Series with Coarse-to-Fine Model Transfer
- solr基本操作步骤
- 前端Base64编码(兼容IE8)
- 关于c语言中EOF用法的理解
热门文章
- [PowerBI]DAX虚拟连接函数:TREATAS()用法介绍
- JAVA 性能调优相关命令
- linux下文件压缩、解压缩方法(tar)
- usb storage驱动分析
- 高速下载Arxiv论文的解决方案
- java 线性回归_Java线性回归
- git导入项目时,git出现10054错误
- Worker节点加入K8S集群报错:error execution phase preflight: couldn‘t validate the identity of the API Server
- 海康摄像头opencv实时回调
- 计算机软件可以用虚拟串口吗,虚拟串口以及在Proteus中的使用