爬虫初涉

在了解和使用urllib库之前,我们应当先了解一些“基础理论”,以便对“爬虫”有个初步的印象。当然,若做到知行合一则最好不过了。

注意:不必死记硬背,大致有一个基本的认识就可以了,哈哈。

基本概念


爬虫

爬虫就是一个自动化程序。它通过模拟浏览器向web服务器发送一个请求(URL)并获取相关的响应,即网页的源代码或其他类型数据。

在这个程序中,我们还可以通过增加一些操作(如正则表达式),进而提取该网页中有用的数据,并将之保存他处(如mysql关系型数据库等等)。

因此,一个爬虫通常有以下三个步骤:

  1.  获取网页源代码或其他类型数据(发送请求并成功得到服务器的响应)
  2.  解析数据并提取
  3.  保存信息

目标数据

HTML源代码、JSON字符串、各种二进制数据、各种扩展名的文件。只要上述内容有对应的URL,且是基于HTTP或HTTPS协议的数据,都可以将其抓取下来。

一个常见的问题:有时我们使用爬虫得到的源代码和浏览器中看到的不一样是怎么回事?

答:这是因为,该网页采用了Ajax、前端模块化工具构建,整体内容均由JavaScript渲染出来的。而使用urllib、requests等库请求当前页面时,只得到HTML代码,它们不会帮助我们去继续加载这个JavaScript文件。这才就导致了不一致。

对于这种情况,分析其后台Ajax接口,或使用Selenium、Splash库来实现模拟JavaScript渲染是十分有效的途径。

请求

1. 请求方式:

  • GET请求:请求参数直接包含在URL中(将参数书写在url);
  • POST请求:请求参数包含在请求体中(需要构造一个表单并提交)。

2. 请求头:请求的配置信息,以键值对的形式存在。通常需要设定User-Agent,以使爬虫伪装为浏览器。

3. 请求体:在请求中需要提交的额外信息,一般是POST请求中的表单数据(form data)。

而构造POST请求,需要使用正确的Content-Type,否则会导致POST提交后无法正常响应。

PS:因为GET请求中的参数是直接包含在url中,因此对于GET请求,其请求体为空。这点很好地将POST和GET请求区分开了。

 

响应

1. 响应状态码:服务器的响应状态,200代表服务器正常响应,404代表页面未找到。根据状态码可以判断服务器的响应状态,以做进一步的应对措施。

2. 响应头:包含服务器对请求的应答信息。

3. 响应体:网页源代码,或其他类型的数据。

URL

URL是统一资源定位符(Universal Resource Locator)的缩写。这其中包含了

  • 访问协议(http、https);
  • 访问路径(第一个/为根目录,后续的/为文件路径映射);
  • 资源名称。

通过URL,我们可以访问指定路径下的网站资源。

HTTP、HTTPS

1. HTTP或HTTPS为访问资源需要的协议类型。

  • HTTP(超文本传输协议之意,全称为Hyper Text Transfer Protocol)是用于从网络传输超文本数据(html, 网页源代码)到本地浏览器的传送协议。
  • HTTPS(HTTP的安全版,全称为Hyper Text Transfer Protocol over Secure Socket Layer)是基于安全通道层面搭建的超文本传输协议,传输的内容都是经过SSL层加密的。

2. HTTP可视作Web客户端和服务器端交互需要用到的特定“语言”。HTTP是TCP/IP的上层协议,因而HTTP协议是依靠TCP/IP来进行底层的交流工作的——TCP/IP负责发送或传递消息,而HTTP则通过发送、接收HTTP消息来处理客户端的请求

3. HTTP属于无状态协议,其不跟踪从一个客户端到另一个客户端的请求信息。这样,每个请求便缺乏了上下文,我们尚需额外传递一些前面的重复请求,才能继续后面的操作。好在如今,有两种方式可以解决这个问题:

  • 在URL中包含变量和值,使它们将作为请求的一部分,从而提供一些状态信息;
  • 使用"cookie",将客户状态信息保存在客户端中。这样与服务器端的会话进行协作,便实现了登录会话控制。

猜你喜欢

转载自www.cnblogs.com/RajXie/p/10273136.html
今日推荐