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代码,助于分析爬虫中一些参数。

浙公网安备 33010602011771号