爬虫开发基础

本博客内容来自所看图书《实战python网络爬虫(黄永祥著)》,摘取原因主要是方便自己理解。

爬虫开发基础

HTTP与HTTPS

HTTP(Hyper Text Transfer Protocol,超文本传输协议)是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其他工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求,这个客户端叫用户代理(User Agent)。响应的服务器上存储着资源,比如HTML文件和图像,这个服务器为源服务器(Origin Server),在用户代理和服务器中间可能存在多个中间层,比如代理、网关或者隧道(Tunnels)。

在浏览器的地址栏输入的网站地址叫作URL(Uniform Resource Locator,统一资源定位符)。就像每家每户都有一个门牌地址一样,每个网页也都有一个Internet地址。在浏览器的地址框中输入一个URL或单击一个超级URL时,URL就确定了要浏览的地址,向服务器发送一次请求,浏览器通过超文本传输协议(HTTP)传送到服务器,服务器根据请求头做出相应的响应,将响应数据返回到客户端,客户端收到响应内容后,通过浏览器翻译成网页。

URL是一种统一定位符。你平常使用的http、smtp、ftp协议和你本地
计算机上存储文件的格式都各不相同,它们都有自己的编码方式,而URL的
任务就是将互联网上所有的资源和本地主机上所有的资源统一成一个可识别
的格式,你通过这个格式可以访问任何一个资源。这个格式叫URL链接。

HTTP协议全称叫超文本传输协议,它给你在网页上看到的各种文字和图片
提供了一个传输和显示的规范,所有网页都必须按照这个规范编写,所有
浏览器也必须支持这个规范,否则你用不同的浏览器看同一个网页就会是
不同的结果,甚至乱码。

URL

URL,全称是UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。以下面这个URL为例,介绍下普通URL的各部分组成:
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

从上面的URL可以看出,一个完整的URL包括以下几部分:
1.协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符

2.域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用

3.端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口

4.虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”

5.文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名

6.锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分

7.参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。

扫描二维码关注公众号,回复: 9125893 查看本文章

(原文:http://blog.csdn.net/ergouge/article/details/8185219 )

请求头

请求头描述客户端向服务器发送请求时使用的协议类型、所使用的编码以及发送内容的长度等。客户端(浏览器)通过输入URL后确定等于做了一次向服务器的请求动作,在这个请求里面带有请求参数,请求头在网络爬虫中的作用是相当重要的一部分。检测请求头是常见的反爬虫策略,因为服务器会对请求头做一次检测来判断这次请求是人为的还是非人为的。为了形成一个良好的代码编写规范,无论网站是否做Headers反爬虫机制,最好每次发送请求都添加请求头。请求头的参数如下。
(1)Accept:text/html,image/*(浏览器可以接收的文件类型)。(2)Accept-Charset:ISO-8859-1(浏览器可以接收的编码类型)。
(3)Accept-Encoding:gzip,compress(浏览器可以接收的压缩编码类型)。
(4)Accept-Language:en-us,zh-cn(浏览器可以接收的语言和国家类型)。
(5)Host:请求的主机地址和端口。
(6)If-Modified-Since:Tue, 11 Jul 2000 18:23:51 GMT(某个页面的缓存时间)。
(7)Referer:请求来自于哪个页面的URL。
(8)User-Agent:Mozilla/4.0(compatible,MSIE 5.5,Windows NT 5.0,浏览器相关信息)。
(9)Cookie:浏览器暂存服务器发送的信息。(10)Connection:close(1.0)/Keep-Alive(1.1)(HTTP请求版本的特点)。
(11)Date:Tue, 11 Jul 2000 18:23:51 GMT(请求网站的时间)。
请求头一定要有User-Agent

Cookies

Cookies也可以称为Cookie,指某些网站为了辨别用户身份、进行Session 跟踪而储存在用户本地终端上的数据。

一个Cookies就是存储在用户主机浏览器中的文本文件。Cookies是纯文本形式,它们不包含任何可执行代码。服务器告诉浏览器将这些信息存储,并且每个请求中都将该信息返回到服务器。服务器之后可以利用这些信息来标识用户。多数需要登录的网站通常会在用户登录后将用户信息写入Cookies,只要这个Cookies存在并且合法,就可以自由地浏览这个网站的所有站点。Cookies只是包含数据,就其本身而言并不有害。

服务器可以利用Cookies包含的信息判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站和保留用户信息以便简化登录手续。

HTML

HTML是超文本标记语言,标准通用标记语言下的一个应用。“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。超文本标记语言的结构包括“头”部分(Head)和“主体”部分(Body),其中“头”部分提供关于网页的信息,“主体”部分提供网页的具体内容。

爬虫开发对HTML的要求是能看懂HTML各个标签的含义,了解标签的属性作用以及整个HTML布局设计。

JavaScript

JavaScript是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML网页上使用的,用来给HTML网页增加动态功能。

JavaScript脚本语言同其他语言一样,有自身的基本数据类型、表达式和算术运算符及程序的基本框架。JavaScript提供了4种基本的数据类型和两种特殊的数据类型用来处理数据和文字。而变量提供存放信息的地方,表达式则可以完成较复杂的信息处理。

JSON

JSON(JavaScript Object Notation,JavaScript对象标记)是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言,易于阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

在JavaScript语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。

JSON格式说明如下:
(1)对象表示为键值对。
(2)数据由逗号分隔。
(3)花括号保存对象。
(4)方括号保存数组。

JSON的书写格式是:键/值对,包括字段名称(字符串),后面写一个冒号,然后是值。例如“name”:“Tom”,等价于JavaScript语句:name = “Tom”JSON的值可以是数字(整数或浮点数)、字符串、逻辑值(True 或 False)、数组(在方括号中)、对象(在花括号中)和Null。

例子如下:
MyJSon = { “name”: “Python”, “address” : { “province” : “广东” , “city” : “广州”} }
JSON的格式是用花括号表示的,代码MyJSon里包含两个属性,分别是name和address。name的值是“Python”;address的值是嵌套新的JSON,里面包含province和city属性,值为“广东”和“广州”。

一个JSON里可以嵌套多个JSON,也 可 以嵌套JSON数组,都是以键-值的形式表现。在 数 据结构上,JSON与Python里的字典非常相似

Ajax

Ajax不是一种新的编程语言,而是一种用于创建更好、更快以及交互性更强的Web应用程序的技术。使用JavaScript向服务器提出请求并处理响应而不阻塞用户,核心对象是XMLHTTPRequest。通过这个对象,JavaScript可在不重载页面的情况下与Web服务器交换数据,即在不需要刷新页面的情况下就可以产生局部刷新的效果。

Ajax在浏览器与 Web服务器之间使用异步数据传输(HTTP请求),这样就可以使网页从服务器请求少量的信息,而不是整个页面。

JavaScript、XML、HTML与 CSS 在 Ajax 中使用的 Web 标准已被良好定义,并被所有的主流浏览器支持,Ajax 应用程序独立于浏览器和平台。Web应用程序比桌面应用程序有优势,能够涉及广大的用户,更易安装及维护,也更易开发。

判断网页数据是否使用Ajax最简单的方法是:触发事件之后,判断网页是否发生刷新状态。如果网页没有发生刷新,数据就自动生成,说明数据的加载是通过Ajax生成并渲染到网页上的;反之,数据是通过服务器后台生成并加载的。两种数据加载渲染方式分别由前端和后端完成,实现的方式和原理也不同。判断数据加载方式是爬虫开发必备的基本技能之一,正确地判断数据加载方式才能找到数据来源的渠道,最终才能找到抓取的目标.
Ajax:主要是前端数据加载和渲染技术,其响应内容大部分以JSON格式为主。

发布了16 篇原创文章 · 获赞 3 · 访问量 1076

猜你喜欢

转载自blog.csdn.net/weixin_42233120/article/details/101361558