01爬虫初识

初识爬虫

一、爬虫介绍

爬虫主要的功能就是抓取网络数据的程序。本质就是用程序模拟人使用浏览器访问网站,并将所需要的数据抓取下来。

爬虫可分为两大类:通用网络爬虫、聚焦网络爬虫

通用网络爬虫:是搜索引擎的重要组成部分,百度搜索引擎,其实可以更形象地称之为百度蜘蛛(Baiduspider),它每天会在海量的互联网信息中爬取信息,并进行收录。当用户通过百度检索关键词时,百度首先会对用户输入的关键词进行分析,然后从收录的网页中找出相关的网页,并按照排名规则对网页进行排序,最后将排序后的结果呈现给用户。通用网络爬虫需要遵守robots协议,网站通过此协议告诉搜索引擎哪些页面可以抓取,哪些页面不允许抓取。

robots协议:是一种“约定俗称”的协议,并不具备法律效力,它体现了互联网人的“契约精神”。行业从业者会自觉遵守该协议,因此它又被称为“君子协议”。

聚焦网络爬虫:是面向特定需求的一种网络爬虫程序。聚焦爬虫在实施网页抓取的时候会对网页内容进行筛选,尽量保证只抓取与需求相关的网页信息。这也很好地满足一些特定人群对特定领域信息的需求。

二、网页获取流程

  • 浏览器会根据URL发送HTTP请求给服务端
  • 服务端接收到HTTP请求后进行解析
  • 服务端处理请求内容,组织响应内容
  • 服务端将响应内容以HTTP响应格式发送给浏览器
  • 浏览器接收到响应内容,解析展示
import socket


def handle_request(client):
    request_data = client.recv(1024)
    print(request_data.decode())
    client.send(b"HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n")
    client.send("<h1 style='color:red'>Hello, 中职通! </h1>".encode("utf-8"))


def main():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('127.0.0.1', 8800))
    server_socket.listen(5)

    while True:
        connection, address = server_socket.accept()
        handle_request(connection)
        connection.close()


if __name__ == '__main__':
    main()

三、URL

URL(Uniform Resource Locator)即统一资源定位符. 资源: HTML页面,CSS文档,js文件,图片,视频,音频等等

URL的格式为:protocol://hostname[:port]/path[?query]

https://edu.zztion.com/course/list?sort&page=1

  • protocol:是指网络传输协议
  • hostname:是指存放资源的服务器的域名或IP地址。
  • port:是一个[0,65535]的整数. 如果port被省略时就使用默认端口,各种传输协议都有默认的端口号,如http的默认端口为80,https的端口是 443.
  • path:路由地址,一般用来表示主机上的一个目录或文件地址,由零个或多个/符号隔开的字符串,路由地址决定了服务端如何处理这个请求。
  • query:从?开始到#为止,它们之间的部分就是参数,又称搜索部分或者查询字符串。这个部分允许有多个参数,参数与参数之间用&作为分隔符。

四、HTTP协议

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP协议主要的作用就是要服务器和客户端之间进行数据交互(相互传输数据)。HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,HTTPS是HTTP协议的安全版。对传输数据进行加密。

4.1 HTTP请求

请求行 : 具体的请求类别和请求内容

GET         /        HTTP/1.1
请求类别   请求内容     协议版本

请求类别:每个请求类别表示要做不同的事情

在HTTP协议中,定义了八种请求方法。我们主要了解两种常用的请求方法,分别是get请求和post请求。

get请求:从服务器获取数据下来,并不会对服务器资源产生任何影响的时候会使用get请求。

post请求:向服务器发送数据(登录)、上传文件等,会对服务器资源产生影响的时候会使用post请求。

请求头:对请求的进一步解释和描述

  • Referer:表明当前这个请求是从哪个url过来的。这个一般也可以用来做反爬虫技术。如果不是从指定页面过来的,那么就不做相关的响应。
  • User-Agent:请求载体的身份标识,这个在网络爬虫中经常会被使用到。请求一个网页的时候,服务器通过这个参数就可以知道这个请求是由哪种浏览器发送的。如果我们是通过爬虫发送请求,那么我们的User-Agent就是Python,这对于那些有反爬虫机制的网站来说,可以轻易的判断你这个请求是爬虫。因此我们要经常设置这个值为一些浏览器的值,来伪装我们的爬虫。
  • Cookie:对应的是一个用户的信息,http协议是无状态的。也就是同一个人发送了两次请求,服务器没有能力知道这两个请求是否来自同一个人。因此这时候就用cookie来做标识。

空行

请求体: 提交的内容

4.2 HTTP响应

响应行 : 反馈基本的响应情况

HTTP/1.1   200       OK
版本信息 响应码 附加信息
# 常见的响应状态码:
200:请求正常,服务器正常的返回数据。
301:永久重定向。
302:临时重定向。比如在访问一个需要登录的页面的时候,而此时没有登录,那么就会重定向到登录页面。
400:请求的url在服务器上找不到。换句话说就是请求url错误。
403:服务器拒绝访问,权限不够。
500:服务器内部错误。

响应头:对响应内容的描述

  • Content-Length: 服务器通过这个头,告诉浏览器回送数据的长度
  • Content-Type:服务器通过这个头,告诉浏览器回送数据的类型

空行

响应体:响应的主体内容信息

五、编写爬虫的流程

  • 确定需要爬取的url

    • 清楚获取数据的类型

    • 清楚获取数据的url

  • 使用请求模块向url地址发出请求,并得响应

  • 从响应内容中提取所需数据,持久化存储 mysql Excel word

六、控制台抓包

  • 打开浏览器,F12打开控制台,找到Network选项卡
  • 控制台常用选项
    • Network: 抓取网络数据包
    • ALL: 抓取所有的网络数据包
    • XHR:抓取异步加载的网络数据包
    • JS : 抓取所有的JS文件
  • 抓取具体网络数据包后:单击左侧网络数据包地址,进入数据包详情,查看右侧
  • Sources: 格式化输出并打断点调试JavaScript代码,助于分析爬虫中一些参数。
posted @ 2023-04-05 00:41  LePenseur  阅读(147)  评论(0)    收藏  举报