• Python爬虫学习笔记2:爬虫基础


    参考:python3 网络爬虫开发实战

    HTTP基本原理

    URL

    https://github.com/favicon.ico,用 URL用RI来唯一指定了它的访问方式,这其中包括了访问协 议 https 、 访问路径 (/即根目录)和资源名称 favicon.ico。 通过这样一个链接,我们便可以从互联网上 找到这个资源,这就是 URL用URI。

    超文本

    我们在浏览棉里看到的网页就是超文本解析而成的, 其网页源代码是一系列 HTML代码, 里面包含了一系列标签,比如 img显 示图片, p 指定显示段落。

    HTTP和HTTPS

    在淘宝的首页 https://www.taobao.com/中, URL 的开头会有 http或 https,这就是访问资源需要的 协议类型。 有时,我们还会看到坤、 s丘p、 smb开头的 URL,它们都是协议类型。 

    HTTP 的全称是 Hyper Text Transfer Protocol ,中文名叫作超文本传输协议 。

    HTTPS 的全称是 Hyper Text Transfer Protocol over Secure Socket Layer,是以安全为目标的 HTTP通道,简单讲是 HTTP的安全版, 即 HTTP下加入 SSL层,简称为 HTTPS 

     HTTP 请求

    请求 

    请求方法

    GET和POST 

    GET请求中的参数包含在 URL里面,数据可以在 URL中看到,而 POST请求的 URL不会包 含这些数据,数据都是通过表单形式传输的,会包含在请求体中 。 

    GET请求提交的数据最多只有 1024字节,而 POST方式没有限制 。

    请求的网址

    请求的网址,即统一资惊定位符 URL

    请求头

    请求头,用来说明服务器要使用的附加信息,比较重要的信息有 Cookie、 Referer、 User-Agent等。

    Accept:请求报头域,用于指定客户端可接受哪些类型的信息。
    Accept-Language:指定客户端可接受的语言类型 。
    Accept-Encoding:指定客户端可接受的内容编码。
    Host:用于指定请求资源的主机 IP 和端口号,其内容为请求 URL 的原始服务器或网关的位置。 从HTTP1.l版本开始,请求必须包含此内容。

    Cookie:也常用复数形式 Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地

    的数据 。 它的主要功能是维持当前访问会话 。 例如,我们输入用户名和密码成功登录某个网 站后,服务器会用会话保存登录状态信息,后面我们每次刷新或请求该站点的其他页面时, 会发现都是登录状态,这就是 Cookies 的功劳。 Cookies里有信息标识了我们所对应的服务器 的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上 Cookies 并将其发送给服 务器,服务器通过 Cookies 识别出是我们自己,并且查出当前状态是登录状态,所以返回结 果就是登录之后才能看到的网页内容 。

    Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相 应的处理,如做来源统计、防盗链处理等 。

    User-Agent:简称 UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统

    及版本 、 浏览器及版本等信息 。 在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很

    可能会被识别州为爬虫 。
    Content-Type:也叫互联网媒体类型( Internet Media Type )或者 MIME类型,在 HTTP协议

    消息头中,它用来表示具体请求中的媒体类型信息 。 例如, text/html 代表 HTML 格式, image/gif代表 GIF 图片, application/json代表 JSON类型,更多对应关系可以查看此对照表 : http://tool.oschina.neνcommons。

    请求体

    请求体-般承载的内容是 POST请求中的表单数据,而对于 GET请求,请求体则为空 

    响应

    响应,由服务端返回给客户端,可以分为三部分:响应状态码( Response Status Code )、响应头( Response Headers )和响应体( Response Body )。 

    响应状态码

    响应状态码表示服务器的响应状态,如 200代表服务器正常响应, 404代表页面未找到, 500代表 服务器内部发生错误 。 在爬虫中,我们可以根据状态码来判断服务器响应状态,如状态码为 200,则 证明成功返回数据 , 再进行进一步的处理,否则直接忽略  

     

                         

     网页基础

    网页可以分为三大部分一一-HTML, CSS和JavaScript。如果把网页比作一个人的话, HTML相当 于骨架, JavaScript相当于肌肉, css相当于皮肤,‘三者结合起来才能形成一个完善的网页 

    1. HTML 

    HTML是用来描述网页的一种语言 , 其全称叫作 Hyper Text Markup Language,即超文本标记语 言。 网页包括文字、按钮、图片和视频等各种复杂的元素,其基础架构就是 HTML。 不同类型的文字 通过不同类型的标签来表示 ,如图片用 img标签表示, 视频用 video标签表示 ,段落用 p标签表示 , 它们之间的布局又常通过布局标签 div嵌套组合而戚 ,各种标签通过不同的排列和嵌套才形成了网页 的框架。

    2. css 

    css,全称叫作 CascadingStyle Sheets,即层叠样式表。 “层叠”是指当在 HTML 中引用了数个样 式文件,并且样式发生冲突时,浏览器能依据层叠顺序处理 。 “样式”指网页中文字大小 、 颜色 、元 素间距、排列等格式。

    #head_wrapper.s-ps-islite .s-p-top { position: absolute;
    bottom: 40px;
     100%;
    height: 181px;
    }
    

     就是一个 css 样式 。 大括号前面是一个 css 选择器 。 此选择器的 意思是首先选中 id 为 head_wrapper 且 class 为 s-ps-islite 的节点,然后再选中其内部的 class 为 s-p-top 的节点 。 大括号内部写的就是 一条条样式规则,例如 position指定了这个元素的布局方式为绝对布局, bottom指定元素的下边距为 40像素, width 指定了宽度为 100%占满父元素, height 则指定了元素的高度 

     在网页中,一般会统一定义整个网页的样式规则,并写人 css 文件中(其后缀为 css )。 在 HTML 中,只需要用 link标签即可引人写好的 css文件,这样整个页面就会变得美观、 优雅 。

    3. JavaScript 

    JavaScript,简称 JS, 是一种脚本语言。 HTML和 css配合使用, 提供给用户的只是一种静态信 息,缺乏交互性。 我们在网页里可能会看到一些交互和动画效果,如下载进度条、提示框、 轮播图等, 这通常就是 JavaScript 的功劳。 它的出现使得用户与信息之间不只是一种浏览与显示的关系,而是实 现了 一种实时、动态、交互的页面功能 。

    JavaScript通常也是以单独的文件形式加载的,后缀为 js,在 HTML 中通过 script 标签即可引 人, 例如:

    <script src:"jquery-2.1.o.js"><Iscript>

     

    2.2.2 网页的结构

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8"> <title>This is a Demo</title> </ head>
    <body>
    <div id=”container”>
    <div class=、rapper”〉
    <h2 class=”title”>Hello World</h2>
    <p class=”text”>Hell口, this i s a paragraph.</p> </div>
    </div>
    </ body >
    </ html>
    

     这就是一个最简单的 HTML 实例 。 开头用 DOCTYPE 定义了文档类型,其次最外层是 html 标签, 段后还有对应的结束标签来表示闭合,其内部是 head标签和 body标签,分别代表网页头和网页体, 它们也需要结束标签 。 head 标签内定义了一些页面的配置和引用,如:

    <meta charset=”UTF-8”> 它指定了 网页的编码为 UTF-8.

    title 标签则定义了网页的标题,会显示在网页的选项卡中,不会显示在正文中 。 body 标签内则 是在 网页正文中显示的内容 。 div 标签定义了网页中的区块,它的 id 是 container,这是一个非常常 用的属性,且 id 的内容在网页中是唯一的,我们可以通过它来获取这个区块 。 然后在此区块内又有 一个 div 标签,它的 class 为 wrapper,这也是一个非常常用的属性,经常与 css 配合使用来设定样 式。 然后此区块内部又有一个 h2 标签,这代表一个二级标题。 另外,还有一个 p 标签,这代表一个

    段落 。 在这两者中直接写入相应的内容即可在网页中呈现出来,它们也有各自的 〉|夺代码保存后,在浏览器中打开该文件,可以看到如图 2-10所示的内容。

    class 属性 .

    2.2.4 选择器

    在 css中,我们使用 css选择器来定位节点。 例如,上例中 div节点的 id为 container,那么就 可以表示为#container,其中#开头代表选择 id,其后紧跟 id 的名称 。 另外,如果我们想选择 class 为 wrapper 的节点 ,便可以使用 .wrapper,这里以点(.)开头代表选择 class,其后紧跟 class 的名称 。 另外,还有一种选择方式,那就是根据标签名 筛选,例如想选择二级标题 ,直接用 h2 即可 。 这是最 常用的 3种表示,分别是根据挝 、 class、标签名筛选 .

    另外, css 选择器还支持嵌套选择 ,各个选择器之间加上空格分隔开便可以代表嵌套关系, 如 #container .wrapper p则代表先选择 id 为 container 的节点,然后选中其内部的 class 为 wrapper 的节 点,然后再进一步选中其内部的 p节点。另外,如果不加空格,则代表并列关系,如 div#container .wrapper p.text代表先选择 id为 container的 div节点,然后选中其内部的 class为 wrapper的节点,再进一 步选中其内部的 class 为 text 的 p节点  

    2.3 爬虫的基本原理 

    我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛 。 把网的节点比 作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息。 可以把节点间的连线比作网页与 网页之间的链接关系,这样蜘蛛通过一个节点后,可以顺着节点连线继续爬行到达下一个节点,即通 过一个网页继续获取后续的网页,这样整个网的节点便可以被蜘蛛全部爬行到,网站的数据就可以被 抓取下来了 .

    2.3.1 爬虫概述 

    爬虫就是获取网页并提取和保存信息的自动化程序 

    1. 获取网页

    爬虫首先要做的工作就是获取网页,这里就是获取网页的源代码。 源代码里包含了网页的部分有用信息 ,所以只要把源代码获取下来,就可以从中提取想要的信息了  

     2. 提取信息

    获取网页源代码后,接下来就是分析网页源代码,从中提取我们想要的数据。正则表达式、beautiful soup,pyquery, lxml等

    3. 保存数据 

    提取信息后,我们一般会将提取到的数据保存到某处以便后续使用。 这里保存形式有多种多样, 如可以简单保存为 TXT 文本或 JSON 文本,也可以保存到数据库,如 MySQL 和 MongoDB 等  

    2.3.3 JavaScript渲染页面 

    用 时lib或 requ曰“抓取网页时,得到的游、代码实际和浏览器中看到的不一样。

    现在网页越来越多地采用 Ajax、前端模块化工具来构建,整个网页可 能都是由 JavaScript渲染出来的,也就是说原始的 HTML代码就是一个空壳 。

    <!OOCTYPE html>
    <html>
    <head >
    〈 『neta c h a r s e t = " UT F - 8 ” > <title>This is a Oemo</title> </ head>
    <body>
    <div id=”container”>
    </div>
    </body>
    <script src=”app.js”></script> </ html>
    

     

    body节点里面只有一个 id 为 container 的节点,但是需要注意在 body节点后引入了 app. ,它便 负责整个网站的渲染 。

    在浏览器中打开这个页面时,首先会加载这个 HTML 内容,接着浏览器会发现其中引人了一个 app.js 文件,然后便会接着去请求这个文件,获取到该文件后,便会执行其中的 JavaScript 代码,而

    2.4 会话和 Cookies 95 JavaScript则会改变 HTML 巾的节点,向其添加内容,最后得到完整的页面  。

    但是在用urllib或 requests等库请求当前页面时,我们得到的只是这个 HTML代码,它不会帮助 我们去继续加载这个 JavaScript文件,这样也就看不到浏览器中的内容了 .

    对于这样的情况,我们可以分析其后台 Ajax接口,也可使用 Selenium、 Splash这样的库来实现模拟 JavaScript渲染.

     

    2.4 会话和 Cookies

    2.4. 1 静态网页和动态网页

    静态网页:网页的内容是 HTML 代码编写的,文字、图片等内容均通过写好的 HTML 代码来指定 , 这 种页面 叫作静态网页 。 它加载速度快,编 写简单,但是存在很大的缺陷,如可维护性差 ,不能根据 URL灵活多变地显示内容等。

    动态网页应运而生,它可以动态解析 URL 中参数的变化,关联数据库井动态呈现不同的页面内容

    Cookies 在客户端,也可以理解为浏览器端,有 了 Cookies,浏览器在下次访问网页时会自动附带上它发送给服务器,服务器通过识别 Cookjes并鉴定出 是哪个用户,然后再判断用户是否是登录状态,然后返回对应的响应.

    因此在爬虫中,有时候处理需要登录才能访问的页面时,我们一般会直接将登录成功后获取的 Cookies放在请求头里面直接请求,而不必重新模拟登录.

  • 相关阅读:
    MFC的序列化的一点研究.
    一次LoadRunner的CPC考试经历
    LAMP架构上(一)
    文件和目录管理
    如何在Linux上清理内存缓存、缓冲与交换空间
    Linux Shell基础(下)
    防火墙(上)
    LAMP架构(三)
    LNMP(二)
    LNMP(一)
  • 原文地址:https://www.cnblogs.com/zheng1076/p/11125360.html
Copyright © 2020-2023  润新知