1、爬虫基本概念

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。--------百度百科

简单的说,爬虫就是获取目标网页源代码,并提取和保存网页信息的自动化程序或者脚本。网络爬虫脚本或者程序一般包含如下几个步骤:

A.获取网页源代码

爬虫首要的任务就是获取需要爬取的目标网页,也就是网页源代码,一般网页源代码就是一系列HTML代码

B.提取信息

得到了网页源代码后,接下来就是分析该HTML代码,按照一定的规则或者方法,从中提取我们想要的数据

C.保存数据

提取了想要的数据后,一般需要将我们爬取到的数据保存到某个地方,如最简单的方式就是保存到本地为txt、json格式的文件,更高级的就是搭建数据库服务,如MySQL等,将数据存储到数据库中

D.整合成可执行程序或者脚本

用于快速自动爬取大量数据,并处理爬取过程中各种异常、错误等操作,确保爬取的高效运行

2、HTTP原理和网页基础

上面对于爬虫的基本介绍知道,爬虫就是爬取网页源代码并提取信息的过程,那么我们需要了解一些基本的网页基础知识、HTTP原理等。

2.1、 HTTP基本原理

在我们访问一个网页站点时,首先都是在浏览器输入一段URL,然后才能访问该网站。什么是URL?URL全称是:Universal Resource Locator,即统一资源定位符,可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。包括了访问的协议http(https)、访问路径和资源名称、端口号等,如https://www.baidu.com。

HTTP全称:Hyper Text Transfer Protocol,中文译为超文本传输协议。HTTP协议用于从网络传输超文本数据到本地浏览器,并保证高效而准确地传送超文本文档,而HTML源代码就是一种超文本标记语言。该协议是由万维网和互联网工作小组联合制定的,目前广泛使用的版本是HTTP1.1。除了HTTP外还有HTTPS,就是HTTP的安全版,通过HTTPS传输的内容都是经过SSL加密的,保证数据传输的安全。如我们购票用的网站:https://www.12306.cn/,就是这样的站点。

2.2、 HTTP请求过程

我们在浏览器输入一个URL站点,回车后正常就能在浏览器中看到网站页面内容。实际上,这个过程是浏览器向所在的服务器发送了一个请求,告诉服务器需要请求什么东西,服务器收到请求后进行处理和解析这个请求,如果处理解析这个请求OK,那么就返回给浏览器对应的响应。响应中包含了页面的源代码等内容,浏览器再对响应中的源代码进行解析,最后将解析后的网页呈现出来。其大概过程就是:浏览器请求》服务器处理解析》服务器响应并传给浏览器》浏览器解析呈现网页。

下面通过实际的网络站点,学习HTTP请求和响应的过程,以及过程中都发生了怎样的网络请求。以Chrome浏览器访问百度站点:https://www.baidu.com/为例。

打开Chrome浏览器,鼠标右键菜单选择【检查】或者直接快捷键【F12】打开开发者工具,切换到【Network】。在浏览器中输入百度站点:https://www.baidu.com/,回车后,看看发生的网络请求。如下图:

其中第一条网络请求:www.baidu.com,就是浏览器向百度服务器发送的一条请求访问百度站点的请求,点击这个请求,即可看到请求的详细信息和内容。

首先是General部分,描述了请求的URL、请求的方法、响应状态码以及远程服务器的地址和端口;

在往下,就是Response Headers和Request Headers,分别是响应头和请求头。包含了响应和请求的部分相关信息和内容,下面具体看看这个请求和对应的响应都哪些内容。

请求的组成

请求由客户端即浏览器向服务端发送,发送的请求有4个方面的内容:请求方法(Request Method)、请求的站点(Request  URL)、请求头(Request  Headers)、请求体(Request Body)

1.请求的方法

常见的请求有get,post,put...类型。get类型的接口一般是指获取信息的接口,比如列表查询的功能,点击查询按钮就调用一个get接口,然后把信息返回出来。就是指把内容从服务器(后端)拉下来。Post类型一般是提交表单的功能,比如注册、导入数据之类的就是post接口。就是指把内容推到服务器(后端)上去。

2.请求的站点

请求的网站,就是在浏览器输入的一段URL网址

3.请求头

请求头用来说明服务端使用的附件信息,也就是HTTP协议规定的附加内容,必须按照协议规则办事。如下图访问百度站点的请求头信息:

看看请求头信息的相关字段说明

Accept:请求报头域,用来指定客户端可接受哪些类型的信息,如上图可以接受text/html等类型的信息

Accept-Encoding和Accept-Language:指定客户端可接受的编码和语言

Connection:连接状态

Cookie:存储的Cookie信息,主要用于维持当前会话

Host:需要访问的站点地址

User-Agent:用于向服务端识别客户使用的操作系统和浏览器版本等信息

4.请求体

请求体一般是承载着POST类型请求的表单数据,GET类型的请求体为空

响应的组成

响应由服务端返回给浏览器的信息,响应的内容有3个方面:响应状态码(Response Status Code)、响应头(Response Headers)和响应体(Response Body)

1.响应状态码

响应状态码表示服务器对于请求信息的处理结果,如200表示响应正常、404表示页面未找到、500表示服务器出错等

2.响应头

响应头包含了服务端对请求的应答信息,如下图的响应头信息:

看看响应头相关关键字段说明

Content-Type:文档类型,指定返回的文档是什么,如text/html表示返回的是HTML文档

Server:服务器的信息,如服务器名称、版本等

Set-Cookie:设置Cookie

Expires:指定响应的过期时间

3.响应体

就是网页的HTML源代码,点击【Preview】页签就可以看到网页的源代码

2.3、 网页构成

现代化的网页呈现给我们的总是绚丽多彩的,有着丰富的视觉感受,不同网页上面往往有着诸多各式各样样子,并搭配合理的排版、丰富的图片、动画效果等。那么这些网页是怎么构成的?构成网页主要有三大部分:HTML、CSS、JavaScript,其中HTML构成了网页的基础架构,CSS确定了网页的排版样式,JavaScript决定了网页的可塑造性和动态呈现。下面具体看看这三大部分:

1.HTML

HTML:全称Hyper Text Markup Language,即超文本标记语言。网页上的文字、段落、图片、按钮等元素就是由HTML定义,如img标签表示图片,p标签表示段落等等,在Chrome浏览器打开百度站点,右击鼠标菜单中选择【检查】或者直接【F12】打开开发者工具在【Elements】选项栏就可以看到网页的HTML源代码,如下图:

可以看到网页HTML源代码,每个标签对定义了一个节点和节点的属性,他们构成了一个HTML树。这些节点标签对陈列在HTML树中,它们存在的一定的层级关系,常用父节点、子节点和同级节点表示。具体对于HTML的学习,可以参考W3School网站学习:http://www.w3school.com.cn/html/index.asp

2.CSS

CSS:全称Cascading Style Sheets,即层叠样式表。CSS用来确定网页页面的排版样式的标准,指定了网页中文字的大小、颜色、位置等属性。如下图定位到【百度一下】这个按钮,查看样式:

该CSS样式确定该按钮的width、height,即宽和高的像素大小,以及文字颜色color:white等信息,按钮背景色:backgroud

3.JavaScript

JavaScript就是JS,一种脚本语言,用来将JS文件嵌入到HTML代码中提供交互式的动态效果,如提示框、轮播图、下载进度条等等。其在HTML的标签对是由script标签对来定义

综上所述,HTML定义了网页的内容和结构,CSS则描述了网页元素的布局渲染和位置效果,JavaScript定义了网页的交互性和动画效果,这三个构成了丰富网页呈现的基础架构。

在了解了爬虫基本概念和HTTP协议以及网页基本构成后,基于这些方面的认知,再开始学习如何爬取网站并提取信息。

Python网络爬虫学习手记(1)——爬虫基础的更多相关文章

  1. Python网络socket学习

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  2. PYTHON之爬虫学习(一)基础

    关于python爬虫,大家都很熟悉,那么我就不多说,开始做了. 首先,python爬虫先安装python库,主要是requests库,在windows中cmd中输入,pip install reque ...

  3. Python爬虫学习笔记之爬虫基础库

    知识预览 beautifulsoup的简单使用 beautifulsoup的遍历文档树 beautifulsoup的搜索文档树 beautifulsoup的css选择器 回到顶部 beautifuls ...

  4. 【python网络编程】新浪爬虫:关键词搜索爬取微博数据

    上学期参加了一个大数据比赛,需要抓取大量数据,于是我从新浪微博下手,本来准备使用新浪的API的,无奈新浪并没有开放关键字搜索的API,所以只能用爬虫来获取了.幸运的是,新浪提供了一个高级搜索功能,为我 ...

  5. python网络编程学习笔记(三):socket网络服务器(转载)

    1.TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较. 步骤 TCP客户端 TCP服务器 第一步 建立socket对象  建立socket对 ...

  6. python网络编程学习《一》

    最近,刚实习完,很喜欢实验楼,但是自己的方向仍然不能确定,自己觉得可选择的空间很大,尽管已经是大四的人了,想到别人都在忙着买职业装,买高跟鞋面试,学习化妆什么的,看看自己,反而开始慢慢关注运动,食疗以 ...

  7. Python网络编程学习_Day11

    一.协程 1.理论知识 协程,又称伪线程,是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈,协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈. ...

  8. Python网络编程学习_Day10

    一.进程与线程 1.区别 进程:一个程序要运行时所需要的所有资源的集合,进程是资源的集合. 一个进程至少需要一个线程,这个线程称为主线程 一个进程里面可以有多个线程 两个进程之间的数据是完全独立,不能 ...

  9. Python网络编程学习_Day9

    一.socketserver实现多并发 socket只能实现单进程通讯,要实现多进程同时和服务端通讯就要使用socketserver. 代码如下: import socket client = soc ...

随机推荐

  1. (二)react-native开发系列之windows开发环境配置

    之前写了react-native在mac上得环境搭建,但是如果只开发android的话,只要用windows系统就可以了,下面就来说下react-native的windows开发环境配置. 1.下载配 ...

  2. 认识和学习redis

    redis VS mysql """ redis: 内存数据库(读写快).非关系型(操作数据方便) mysql: 硬盘数据库(数据持久化).关系型(操作数据间关系) 大量 ...

  3. Vue 中的Vue Router一级路由,二级路由,三级路由以及跳转

    今天编写了一下Vue中的路由 先用命令行新建一个空的项目,并且我知道要用路由,就下载了路由的相关依赖 vue init webpack demo5 完毕之后进入所在的项目 cd demo5 之后用vs ...

  4. 用Xcode配置完美ACMer环境

    用Xcode配置完美ACMer环境 前言 ​ 作为\(ACMer\),需求大致为强大的文本编辑功能\((VIM)\),便捷的文件模版功能以及多文件编译功能.\(vscode\)虽然强大,但是与集成\( ...

  5. vue---子调父 $emit (把子组件的数据传给父组件)

    ps:App.vue 父组件  Hello.vue 子组件 ps:App.vue 父组件 Hello.vue 子组件 <!--App.vue :--> <template> & ...

  6. sbt 配置个屁的国内源

    ~/.sbt/repositories [repositories] #本地源 local #兼容 Ivy 路径布局 apache-ivy: https://repo1.maven.apache.or ...

  7. __str__()方法

    只要定义了__str__(self)方法,那么就会打印从这个方法中return的数据 class Car: def __init__(self, newWheelNum, newColor): sel ...

  8. 物联网之窄带物联网(NB-IOT)

    NB-IoT即窄带物联网(Narrow Band Internet of Things),NB-IOT构建在蜂窝网络之上,只消耗大约180KHZ的带宽,可直接部署于GSM(2G).UMTS(3G).L ...

  9. GBDT算法梳理

    1.GBDT(Gradient Boosting Decision Tree)思想 Boosting : 给定初始训练数据,由此训练出第一个基学习器: 根据基学习器的表现对样本进行调整,在之前学习器做 ...

  10. Nginx设置禁止通过IP访问服务器并且只能通过指定域名访问

    为了避免别人把未备案的域名解析到自己的服务器IP而导致服务器被断网,需要在nginx上设置禁止通过IP访问服务器,只能通过域名访问. 最关键的一点是,在server的设置里面添加这么一行: liste ...