首页 > 编程语言 >Python爬虫基本原理

Python爬虫基本原理

时间:2022-10-01 14:31:07浏览次数:75  
标签:浏览器 请求 Python 基本原理 爬虫 TCP hero HTTP

1、爬虫是什么

爬虫是模拟用户在浏览器或者某个应用上的操作,把操作的过程、实现自动化的程序。

Python爬虫基本原理_json

当我们在浏览器中输入一个url后回车,后台会发生什么?比如说输入http://www.sina.com.cn/

发生四个步骤

  • 查找域名对应的IP地址。
  • 向IP对应的服务器发送请求。
  • 服务器响应请求,发回网页内容。
  • 浏览器解析网页内容。

Python爬虫基本原理_服务器_02

网络爬虫本质就是浏览器http请求

浏览器和网络爬虫是两种不同的网络客户端,都以相同的方式来获取网页:

网络爬虫要做的,简单来说,就是实现浏览器的功能。通过指定url,直接返回给用户所需要的数据,而不需要一步步人工去操纵浏览器获取。


2、爬虫的基本原理

爬虫的基本原理是模拟浏览器发送和接收这个数据,但浏览器怎么发送和接收这个数据呢?

2.1 HTTP简介

HTTP协议(HyperTextTransfer Protocol,超文本传输协议)目的是为了提供一种发布和接收HTML(HyperTextMarkup Language)页面的方法。

HTTP是基于TCP协议之上的。在TCP/IP协议参考模型的各层对应的协议如下图,其中HTTP是应用层的协议。默认HTTP的端口号为80,HTTPS的端口号为443。

Python爬虫基本原理_服务器_03


2.2 HTTP工作过程

一次HTTP操作称为一个事务,其工作整个过程如下:

1 ) 地址解析

如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm

从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:

协议名:http

主机名:localhost.com

端口:8080 

对象路径:/index.htm

在这一步,需要域名系统DNS解析域名localhost.com,得主机的IP地址。

2)封装HTTP请求数据包

把以上部分结合本机自己的信息,封装成一个HTTP请求数据包

3)封装成TCP包,建立TCP连接(TCP的三次握手)

在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。

HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口

4)客户机发送请求命令

建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。

5)服务器响应

服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

6)服务器关闭TCP连接

一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码

Connection:keep-alive

TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。



3、爬虫的基本流程

发起请求—>获取响应内容—>解析内容—>保存数据

3.1 请求

请求方式:请求方式的主要类型是GET,OST两种,另外还有HEAD、PUT、DELETE等。GET 请求的请求参数会显示在URL链接的后面,比如我们打开百度,搜索“图片”,我们会看到请求的URL链接为https://www.baidu.com/s?wd=图片。而POST请求的请求参数会存放在Request内,并不会出现在 URL 链接的后面,比如我们登录知乎,输入用户名和密码,我们会看到浏览器开发者工具的Network页,Request请求有FormData的键值对信息,那里就存放了我们的登录信息,有利于保护我们的账户信息安全;

请求URL:URL全称是统一资源定位符,也就是我们说的网址。比如一张图片,一个音乐文件,一个网页文档等都可以用唯一URL来确定,它包含的信息指出文件的位置以及浏览器应该怎么去处理它;

请求头(RequestHeaders):请求头包含请求时的头部信息,如User-Agent(指定浏览器的请求头),Host,Cookies等信息;

请求体:请求体是请求是额外携带的数据,比如登录表单提交的登录信息数据。

3.2 响应

响应状态:有多种响应状态,比如200代表成功,301 跳转页面,404 表示找不到页面,502 表示服务器错误;

响应头(ResponseHeaders):比如内容类型,内容长度,服务器信息,设置Cookie等;

响应体:响应体最主要的部分,包含了请求资源的内容,比如网页 HTML 代码,图片二进制数据等。

简单演示

import requests# 导入requests库,需要安装# 模拟成浏览器访问的头headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}resp = requests.get('https://www.baidu.com', headers=headers)print(resp.text)# 打印出网页源代码print(resp.status_code)# 打印出状态码

运行成功后可以看到打印出来的 html 源代码和 200 状态码了。这就基本上实现了爬虫的Request和Response的过程。

3.3 解析内容

能抓到什么样的内容?

  • 网页文本:如 HTML 文档,Ajax加载的Json格式文本等;
  • 图片,视频等:获取到的是二进制文件,保存为图片或视频格式;
  • 其他只要能请求到的,都能获取。

解析方式有哪些?

  • 直接处理,比如简单的页面文档,只要去除一些空格的数据;
  • Json解析,处理Ajax加载的页面;
  • 正则表达式;
  • BeautifulSoup库;
  • PyQuery;
  • XPath。

3.4 保存数据

解析内容后,根据自己的需求保存对应的数据或者进行数据加工处理,保存图片、pandas处理、写入csv等。


4、python爬虫提取王者荣耀皮肤

原理同前期文章,下面直接给出代码

import osimport requests
url = 'https://pvp.qq.com/web201605/js/herolist.json'herolist = requests.get(url) # 获取英雄列表json文件
herolist_json = herolist.json() # 转化为json格式hero_name = list(map(lambda x: x['cname'], herolist.json())) # 提取英雄的名字hero_number = list(map(lambda x: x['ename'], herolist.json())) # 提取英雄的编号hero_skin_number = []for i in herolist.json(): try: hero_skin_number.append(len(i['skin_name'].split("|"))) except KeyError: hero_skin_number.append(1)

# 下载图片def downloadPic(): i = 0 for j in hero_number: # 创建文件夹 os.mkdir("./" + hero_name[i]) # 进入创建好的文件夹 os.chdir("./" + hero_name[i]) i += 1 for k in range(1, hero_skin_number[i - 1] + 1): # 拼接url onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str( j) + '-bigskin-' + str(k) + '.jpg' print(onehero_link) im = requests.get(onehero_link) # 请求url if im.status_code == 200: open(str(k) + '.jpg', 'wb').write(im.content) # 写入文件 os.chdir("../")
downloadPic()


往期文章参考:

​12.奇怪知识(1) --Matlab爬虫获取王者荣耀英雄皮肤​

标签:浏览器,请求,Python,基本原理,爬虫,TCP,hero,HTTP
From: https://blog.51cto.com/domi/5728269

相关文章

  • python截取字符串(字符串切片)
    python中使用[]来截取字符串,语法:字符串[起始位置:结束位置]一、起始位置:结束位置先看几个例子:s='python'print(s)#输出python直接输出字符串#从前......
  • python题集
    生成全排列n=0vis=[0foriinrange(100)]ans=[0foriinrange(100)]defwork(cnt):ifcnt==n:foriinrange(n):print(ans[i......
  • python引用另一个py文件中的类中函数
    1.获取gpu信息的文件gpu_info.pycatgpu_info.pyimportpynvml#获取GPU信息classGpuInfo(object):def__init__(self):#初始化pynvml......
  • 1.Python环境与数据分析
    今天是科研能力提升强化培训的第一天,简单记录下培训过程一、安装软件1.安装python2.安装anaconda3.安装jupyternotebook4.安装pycharm二、numpy基础1.numpy的ndarr......
  • python---pefile
    python---pefilepefile可以解析、读取或修改PE文件。github地址:https://github.com/erocarrera/pefile/一些示例地址:https://github.com/erocarrera/pefile/blob/wi......
  • python(内置方法操作2)
    今日内容概要字典相关操作元组相关操作集合相关操作字符编码(理论)今日内容总结今天主要讲了一些昨日剩下的数据类型的内置方法以及一些相关的操作,一共有,字典。元组.......
  • Python基本算法实现及总结归纳
    @目录冒泡排序快速排序插入排序选择排序希尔排序归并排序各个算法的时间复杂度附:二分法冒泡排序这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(......
  • python的time库详解
    time库的使用:Python中内置了一些与时间处理相关的库,如time、datatime和calendar库。其中time库是Python中处理时间的标准库,是最基础的时间处理库。time库的功能如下:(1)计......
  • 【python基础教程】csv文件的写入与读取
      csv的简单介绍 CSV(CommaSeparatedValues),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本格式,用以存储表格数据,包括数字或者字符。很多程......
  • Python基础(九) | time random collections itertools标准库详解
    ⭐本专栏旨在对Python的基础语法进行详解,精炼地总结语法中的重点,详解难点,面向零基础及入门的学习者,通过专栏的学习可以熟练掌握python编程,同时为后续的数据分析,机器学习及深......