文章目录

  • 爬虫概述
  • 能爬的数据
  • 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网络蜘蛛】:基础 - 爬虫的基本原理相关推荐

  1. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...

  2. python网络编程证书_《Python网络编程基础》笔记

    python网络编程基础 ================== Author: lujun9972 Date: 2013-03-08 22:29:20 CST Table of Contents == ...

  3. 《python网络编程基础》PDF 下载

    <python网络编程基础> > 方式一: 链接:百度网盘下载地址 [ https://pan.baidu.com/s/1BiDw-gVKGrLbgUnqHUt1qQ ] 提取码:4 ...

  4. Python网络编程基础之ip地址,端口号,TCP,socket

    Python网络编程基础 IP地址 ip地址表现形式 查看ip地址 Linux Windows 检查网络是否正常 端口与端口号 端口号分类 知名端口号 动态端口号 TCP协议 概念 TCP通讯步骤 特 ...

  5. python网络编程基础百度云_PYTHON网络编程基础 PDF 下载

    相关截图: 资料简介: <Python网络编程基础>全面介绍了使用Python语言进行网络编程的基础知识,主要内容包括网络基础知识.高级网络操作.Web Services.解析HTML和X ...

  6. 【Python网络蜘蛛】:基础 - HTTP基本原理

    文章目录 1.1 HTTP基本原理 1. URI和URL 2. HTTP和HTTPS 3. HTTP请求过程 4. 请求 5. 响应 1.1 HTTP基本原理 1. URI和URL URI为统一资源标 ...

  7. 【Python网络蜘蛛】基础 - 多线程和多进程的基本原理

    文章目录 多线程和多进程的基本原理 多线程的含义 并发和并行 Python中的多线程和多进程 多线程和多进程的基本原理 在编写爬虫程序的时候,为了提高爬取效率,我们可能会同时运行多个爬虫任务,其中同样 ...

  8. python网络编程基础知识_python网络编程基础

    一.客户端/服务器架构 网络中到处都应有了C/S架构,我们学习socket就是为了完成C/S架构的开发. 二.scoket与网络协议 如果想要实现网络通信我们需要对tcpip,http等很多网络知识有 ...

  9. [Python]网络编程基础

    客户端/服务器网络编程 在服务器响应客户端请求之前,必须进行一些初步的设置流程来为之后的工作做准备.首先会创建一个通信端点,它能够使服务器监听请求.一旦一个通信端点已经建立,监听服务器就可以进入无限循 ...

最新文章

  1. discuz 删除系统自带的附件上传
  2. Android Studio SDK Manager 解决无法更新问题
  3. 有个小问题,大家一起研究。
  4. pgpool-II3.1 的内存泄漏(六)
  5. Java基础篇:final关键字
  6. ChoiceFormat:数字范围格式
  7. 精讲23种设计模式-基于观察者模式~设计异步多渠道群发框架
  8. linux还原系统_怎么成为一名合格的Linux运维工程师
  9. fastNLP工具包, 快速实现序列标注模型
  10. 分布式设计 —— 容错与主备
  11. Win7 安装程序时报错 error 1935 HRESULT 0x80070422
  12. 牛客网项目——项目开发(三):开发登录模块
  13. 金融科技方便生活,分布式架构助力微粒贷“闪电放款”
  14. hbase —— Dead Region Servers
  15. 如何提高代码质量,或者说高质量代码的特征是什么
  16. OBS美颜滤镜插件,美白、瘦脸....
  17. 论文阅读:**CTF: Anomaly Detection in High-Dimensional Time Series with Coarse-to-Fine Model Transfer
  18. solr基本操作步骤
  19. 前端Base64编码(兼容IE8)
  20. 关于c语言中EOF用法的理解

热门文章

  1. [PowerBI]DAX虚拟连接函数:TREATAS()用法介绍
  2. JAVA 性能调优相关命令
  3. linux下文件压缩、解压缩方法(tar)
  4. usb storage驱动分析
  5. 高速下载Arxiv论文的解决方案
  6. java 线性回归_Java线性回归
  7. git导入项目时,git出现10054错误
  8. Worker节点加入K8S集群报错:error execution phase preflight: couldn‘t validate the identity of the API Server
  9. 海康摄像头opencv实时回调
  10. 计算机软件可以用虚拟串口吗,虚拟串口以及在Proteus中的使用