Python3.x爬虫教程:爬网页、爬图片、自己主动登录

2023-05-16

林炳文Evankaka原创作品。

转载请注明出处http://blog.csdn.net/evankaka

摘要:本文将使用Python3.4爬网页、爬图片、自己主动登录。并对HTTP协议做了一个简单的介绍。在进行爬虫之前,先简单来进行一个HTTP协议的解说。这样以下再来进行爬虫就是理解更加清楚。

一、HTTP协议

       HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。

它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)终于公布了一系列的RFC。RFC 1945定义了HTTP/1.0版本号。当中最著名的就是RFC 2616。RFC 2616定义了今天普遍使用的一个版本号——HTTP 1.1。


       HTTP协议(HyperText Transfer Protocol。超文本传输协议)是用于从WWWserver传输超文本到本地浏览器的传送协议。它能够使浏览器更加高效,使网络传输降低。

它不仅保证计算机正确高速地传输超文本文档。还确定传输文档中的哪一部分。以及哪部分内容首先显示(如文本先于图形)等。

 HTTP的请求响应模型

HTTP协议永远都是client发起请求,server回送响应。见下图:

  


这样就限制了使用HTTP协议,无法实如今client没有发起请求的时候。server将消息推送给client。

HTTP协议是一个无状态的协议。同一个client的这次请求和上次请求是没有相应关系。

工作流程

一次HTTP操作称为一个事务。其工作过程可分为四步:

1)首先客户机与server须要建立连接。仅仅要单击某个超级链接,HTTP的工作開始。

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

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

4)client接收server所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与server断开连接。

假设在以上过程中的某一步出现错误,那么产生错误的信息将返回到client,有显示屏输出。

对于用户来说。这些过程是由HTTP自己完毕的,用户仅仅要用鼠标点击,等待信息显示就能够了

请求报头
请求报头同意client向server端传递请求的附加信息以及client自身的信息。
经常使用的请求报头
Accept
Accept请求报头域用于指定client接受哪些类型的信息。eg:Accept:image/gif。表明client希望接受GIF图象格式的资源。Accept:text/html,表明client希望接受html文本。
Accept-Charset
Accept-Charset请求报头域用于指定client接受的字符集。eg:Accept-Charset:iso-8859-1,gb2312.假设在请求消息中没有设置这个域,缺省是不论什么字符集都能够接受。
Accept-Encoding
Accept-Encoding请求报头域相似于Accept,可是它是用于指定可接受的内容编码。eg:Accept-Encoding:gzip.deflate.假设请求消息中没有设置这个域server假定client对各种内容编码都能够接受。


Accept-Language
Accept-Language请求报头域相似于Accept,可是它是用于指定一种自然语言。eg:Accept-Language:zh-cn.假设请求消息中没有设置这个报头域,server假定client对各种语言都能够接受。
Authorization
Authorization请求报头域主要用于证明client有权查看某个资源。当浏览器訪问一个页面时,假设收到server的响应代码为401(未授权),能够发送一个包括Authorization请求报头域的请求,要求server对其进行验证。


Host(发送请求时,该报头域是必需的)
Host请求报头域主要用于指定被请求资源的Internet主机和端口号。它通常从HTTP URL中提取出来的,eg:
我们在浏览器中输入:http://www.guet.edu.cn/index.html
浏览器发送的请求消息中,就会包括Host请求报头域。例如以下:
Host:
www.guet.edu.cn
此处使用缺省端口号80,若指定了端口号,则变成:Host:www.guet.edu.cn:指定端口号
User-Agent
我们上网登陆论坛的时候,往往会看到一些欢迎信息。当中列出了你的操作系统的名称和版本号,你所使用的浏览器的名称和版本号,这往往让非常多人感到非常奇妙,实际上,server应用程序就是从User-Agent这个请求报头域中获取到这些信息。User-Agent请求报头域同意client将它的操作系统、浏览器和其他属性告诉server。只是。这个报头域没必要的。假设我们自己编写一个浏览器。不使用User-Agent请求报头域。那么server端就无法得知我们的信息了。


请求报头举例:
GET /form.html HTTP/1.1 (CRLF)
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.guet.edu.cn (CRLF)
Connection:Keep-Alive (CRLF)
(CRLF)

GET /form.html HTTP/1.1 (CRLF)Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)Accept-Language:zh-cn (CRLF)Accept-Encoding:gzip,deflate (CRLF)If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)Host:www.guet.edu.cn (CRLF)Connection:Keep-Alive (CRLF)(CRLF)


响应报头
响应报头同意server传递不能放在状态行中的附加响应信息。以及关于server的信息和对Request-URI所标识的资源进行下一步訪问的信息。
经常使用的响应报头
Location
Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域经常使用在更换域名的时候。
Server
Server响应报头域包括了server用来处理请求的软件信息。

与User-Agent请求报头域是相相应的。以下是
Server响应报头域的一个样例:
Server:Apache-Coyote/1.1
WWW-Authenticate
WWW-Authenticate响应报头域必须被包括在401(未授权的)响应消息中,client收到401响应消息时候,并发送Authorization报头域请求server对其进行验证时,服务端响应报头就包括该报头域。
eg:WWW-Authenticate:Basic realm="Basic Auth Test!"  //能够看出server对请求资源採用的是基本验证机制。

二、Python3.4爬虫编程

1、第一个演示样例,我们要来进行简单的爬虫来爬别人的网页

#python3.4 爬虫教程
#一个简单的演示样例爬虫
#林炳文Evankaka(博客:http://blog.csdn.net/evankaka/)
import urllib.request
url = "http://www.douban.com/"
webPage=urllib.request.urlopen(url)
data = webPage.read()
data = data.decode('UTF-8')
print(data)
print(type(webPage))
print(webPage.geturl())
print(webPage.info())
print(webPage.getcode())
这是爬回来的网页输出:

这中间究竟发生了什么事呢?让我们打开Fiddler来看看吧:

左边标红的就表示我们本次訪问成功,为http 200

右边上方这是python生成 的请求报头。不清楚看以下:

非常easy的一个报头。然后再来看看响应回来的html

这里响应回来的就是我们上面在python的idle中打印出来的网页了!


2、伪装成浏览器来爬网页

有些网页,比方登录的。假设你不是从浏览器发起的起求,这就不会给你响应,这时我们就须要自己来写报头。然后再发给网页的server,这时它就以为你就是一个正常的浏览器。从而就能够爬了!

#python3.4 爬虫教程
#一个简单的演示样例爬虫
#林炳文Evankaka(博客:http://blog.csdn.net/evankaka/)
import urllib.request
weburl = "http://www.douban.com/"
webheader = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} 
req = urllib.request.Request(url=weburl, headers=webheader)  
webPage=urllib.request.urlopen(req)
data = webPage.read()
data = data.decode('UTF-8')
print(data)
print(type(webPage))
print(webPage.geturl())
print(webPage.info())
print(webPage.getcode())
来看看请求报头,就是和我们设置的一个样。


返回的是一样的:

再来一个复杂一点的请求报头:

#python3.4 爬虫教程
#一个简单的演示样例爬虫
#林炳文Evankaka(博客:http://blog.csdn.net/evankaka/)
import urllib.request
weburl = "http://www.douban.com/"
webheader1 = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
webheader2 = {
    'Connection': 'Keep-Alive',
    'Accept': 'text/html, application/xhtml+xml, */*',
    'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko',
    #'Accept-Encoding': 'gzip, deflate',
    'Host': 'www.douban.com',
    'DNT': '1'
    }
req = urllib.request.Request(url=weburl, headers=webheader2)  
webPage=urllib.request.urlopen(req)
data = webPage.read()
data = data.decode('UTF-8')
print(data)
print(type(webPage))
print(webPage.geturl())
print(webPage.info())
print(webPage.getcode())

看看生成 的结果:

返回还是:

3、爬取站点上的图片

前面我们能够爬网页了,下一步我们就能够批量的自己主动下载该网页上的各种数据了~,比方。这里我要下载该网页上的全部图片

#python3.4 爬虫教程
#爬取站点上的图片
#林炳文Evankaka(博客:http://blog.csdn.net/evankaka/)
import urllib.request  
import socket  
import re  
import sys  
import os  
targetDir = r"D:\PythonWorkPlace\load"  #文件保存路径
def destFile(path):  
    if not os.path.isdir(targetDir):  
        os.mkdir(targetDir)  
    pos = path.rindex('/')  
    t = os.path.join(targetDir, path[pos+1:])  
    return t  
if __name__ == "__main__":  #程序执行入口
    weburl = "http://www.douban.com/"
    webheaders = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} 
    req = urllib.request.Request(url=weburl, headers=webheaders)  #构造请求报头
    webpage = urllib.request.urlopen(req)  #发送请求报头
    contentBytes = webpage.read()  
    for link, t in set(re.findall(r'(http:[^\s]*?

(jpg|png|gif))', str(contentBytes))): #正則表達式查找全部的图片 print(link) try: urllib.request.urlretrieve(link, destFile(link)) #下载图片 except: print('失败') #异常抛出

这是正在执行的过程:

打开电脑上相应的目录,然后来看看图片。这里仅仅是一部分哦!!

。。

真实的网页上的图片

4、保存爬取回来的报文

def saveFile(data):
    save_path = 'D:\\temp.out'
    f_obj = open(save_path, 'wb') # wb 表示打开方式
    f_obj.write(data)
    f_obj.close()
 
# 这里省略爬虫代码
# ...
 
# 爬到的数据放到 dat 变量里
# 将 dat 变量保存到 D 盘下
saveFile(dat)

比方:

#python3.4 爬虫教程
#一个简单的演示样例爬虫
#林炳文Evankaka(博客:http://blog.csdn.net/evankaka/)
import urllib.request
def saveFile(data):
    save_path = 'D:\\temp.out'
    f_obj = open(save_path, 'wb') # wb 表示打开方式
    f_obj.write(data)
    f_obj.close()
weburl = "http://www.douban.com/"
webheader1 = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
webheader2 = {
    'Connection': 'Keep-Alive',
    'Accept': 'text/html, application/xhtml+xml, */*',
    'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko',
    #'Accept-Encoding': 'gzip, deflate',
    'Host': 'www.douban.com',
    'DNT': '1'
    }
req = urllib.request.Request(url=weburl, headers=webheader2)  
webPage=urllib.request.urlopen(req)
data = webPage.read()
saveFile(data)# 将data变量保存到 D 盘下
data = data.decode('UTF-8')
print(data)
print(type(webPage))
print(webPage.geturl())
print(webPage.info())
print(webPage.getcode())


然后看看D盘:

用NotePad打开:


嗯嗯。

是对的。网页已经被爬下来了。

三、Python3.x 自己主动登录

一般情况下我们输入邮箱和密码后,登录。

来看看。

这就是提交表单的内容

python3.4代码编写:

import gzip
import re
import http.cookiejar
import urllib.request
import urllib.parse
#解压函数
def ungzip(data):
    try:        # 尝试解压
        print('正在解压.....')
        data = gzip.decompress(data)
        print('解压完毕!')
    except:
        print('未经压缩, 无需解压')
    return data
#获取_xsrf 
def getXSRF(data):
    cer = re.compile('name=\"_xsrf\" value=\"(.*)\"', flags = 0)
    strlist = cer.findall(data)
    return strlist[0]
#构造文件头
def getOpener(head):
    #设置一个cookie处理器,它负责从server下载cookie到本地。而且在发送请求时带上本地的cookie
    cj = http.cookiejar.CookieJar()
    pro = urllib.request.HTTPCookieProcessor(cj)
    opener = urllib.request.build_opener(pro)
    header = []
    for key, value in head.items():
        elem = (key, value)
        header.append(elem)
    opener.addheaders = header
    return opener
#构造header,一般header至少要包括一下两项。

这两项是从抓到的包里分析得出的。 header = { 'Connection': 'Keep-Alive', 'Accept': 'text/html, application/xhtml+xml, */*', 'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko', 'Accept-Encoding': 'gzip, deflate', 'Host': 'www.zhihu.com', 'DNT': '1' } url = 'http://www.zhihu.com/' opener = getOpener(header) op = opener.open(url) data = op.read() data = ungzip(data) # 解压 _xsrf = getXSRF(data.decode()) #post数据接收和处理的页面(我们要向这个页面发送我们构造的Post数据) url += 'login/email' id = '这里写自己的邮箱' password = '这里写自己的密码' #构造Post数据,他也是从抓大的包里分析得出的。 postDict = { '_xsrf':_xsrf, #特有数据。不同站点可能不同 'email': id, 'password': password, 'rememberme': 'y' } #须要给Post数据编码 postData = urllib.parse.urlencode(postDict).encode() op = opener.open(url, postData) data = op.read() data = ungzip(data) print(data.decode())


来看看结果:

这时执行返回的

发送出去的请求头

接收回来 的报头

返回的数据是什么意思呢:

非常easy, 我们转码下:



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3.x爬虫教程:爬网页、爬图片、自己主动登录 的相关文章

  • 官网下载mysql源码

    官网下载mysql源码 xff0c 如下为具体步骤 xff1a 1 进入官网点击download页https www mysql com downloads 2 点击MySQL Community Edition进入mysql社区版下载页面
  • Vue设置button的disable属性

    表单元素有一个disable属性 xff0c 用来控制该元素是否可用 1 这个属性在HTML里只有1个值 xff0c 用法就是 lt button disable 61 34 disable 34 gt 点击 lt button gt 经实
  • 用C++进行简单的文件I/O操作

    序论 我曾发表过文件输入输出的文章 xff0c 现在觉得有必要再写一点 文件 I O 在C 43 43 中比烤蛋糕简单多了 在这篇文章里 xff0c 我会详细解释ASCII和二进制文件的输入输出的每个细节 xff0c 值得注意的是 xff0
  • VC++鼠标画圈

    int r 61 100 int x0 61 gameRect left 43 pt x int y0 61 gameRect top 43 pt y int x y double n 61 0 MoveTo x0 y0 while n l
  • matlab练习程序(求向量间的旋转矩阵与四元数)

    问题是这样 xff0c 如果我们知道两个向量v1和v2 xff0c 计算从v1转到v2的旋转矩阵和四元数 xff0c 由于旋转矩阵和四元数可以互转 xff0c 所以我们先计算四元数 我们可以认为v1绕着向量u旋转 角度到v2 xff0c u
  • 用lighttpd搭建一个简易的http服务器

    1 安装lighttpd 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 cd wget http download lighttpd net lighttpd releases
  • 结构体(对齐规则及举例)

    概念 一种数据结构 xff1b C语言中聚合数据类型的一类 xff1b 可以被声明为变量 数组 指针等 xff0c 用以实现比较复杂的数据结构 xff1b 是一系列元素的集合 xff0c 这些元素被称为结构体成员 xff1b 结构体成员需要
  • C++解析头文件-Qt自动生成信号定义

    目录 一 概述二 实现思路三 代码讲解 1 类图2 QtCppDescription3 测试四 源代码 一 概述 上一篇文章C 43 43 解析头文件 Qt自动生成信号声明我们主要讲解了怎么去解析C 43 43 头文件 xff0c 然后在指
  • VC++6.0与VS2010的区别

    区别1 字符串的表达 void CMy123Dlg OnBnClickedButton1 MessageBox 34 你好 34 以前VC6 0写法 现在用不了 老版本用的多字节字符集 MessageBox L 34 你好 34 L 是 u
  • 存储过程出现ORA-06508错误

    一个存储过程平时执行正常 xff0c 刚才执行出ORA 06508错误 百思不得其解 xff0c 好像没有什么不正常的地方啊 xff01 后来找到了答案 重现这个错误如下 xff1a 执行一个存储过程 xff0c 其运行时间比较长 刚开始运
  • 从零构建TCP/IP协议

    从零构建TCP IP协议 这次叫PCT协议 这篇博客是读完 图解TCP IP协议 和 TCP IP协议详解卷一 xff1a 协议 之后的总结 我从0构建了一个可靠的双工的有序的基于流的协议 xff0c 叫做PCT协议 OSI七层模型和TCP
  • c语言 checksum,crc校验方法,用c语言实现源代码(CRC checksum method, using C language source code).doc...

    crc校验方法 用c语言实现源代码 CRC checksum method using C language source code crc校验方法 用c语言实现源代码 CRC checksum method using C languag
  • arm: 使用结构体操作寄存器

    使用结构体操作 寄存器 xff1a 寄存器赋值和取值的时候 xff0c 要注意寄存器的长度 xff0c 有的寄存器的值只有8位 还要注意 xff0c 使用volatile修饰寄存器变量 volatile 参考http www cnblogs
  • 基于嵌入式操作系统VxWorks的多任务并发程序设计(5)――中断与任务

    基于嵌入式操作系统 VxWorks 的多任务并发程序设计 xff08 5 xff09 中断与任务 作者 xff1a 宋宝华 e mail email 21cnbao 64 21cn com email 出处 xff1a 软件报 中断处理是整
  • 四旋翼电池、电机、螺旋桨选型与搭配(转)

    源 xff1a 四旋翼电池 电机 螺旋桨选型与搭配
  • 《C++ Primer Plus》第3章 处理数据 学习笔记

    C 43 43 的基本类型分为两组 xff1a 一组由存储为证书的值组成 xff0c 另一组由存储为浮点格式的值组成 整型之间通过存储键值时使用的呢存及有无符号来区分 整型从最小到最大依次是 xff1a bool char signed c
  • Microbit  Turnipbit  孩子也能做的声光控开关

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 最近一直在研究Turnipbit这块板子 xff0c 之前也做了几个小实验 xff0c 研究了下针脚 xff0c 发现光敏传感器和声音传感器针脚能对的上 xff0c 就做了
  • 串口通信的三种方式(查询、中断、DMA)

    PC机串口定义如下图 xff1a 一般的单片机串口应用只需3根信号线 xff1a 3脚TXD xff08 发送数据 xff09 2脚RXD xff08 接收数据 xff09 5脚SG xff08 信号地 xff09 其中单片机的TXD对应连
  • SQL SERVER 大小写敏感问题

    SQL SERVER大小写敏感问题 xff0c 其实是两个问题 xff1a 标识符 xff0c 例如表名和字段名 xff0c 是否区分大小写 xff1b 字符型字段进行比较时 xff0c 是否区分大小写 第一个问题 与SQL SERVER数
  • tcpreplay,tcprewrite

    安装指南 tcpreplay官方提供的下载地址为 http tcpreplay synfin net trac wiki Download 由于tcpreplay依赖libpcap库 所以安装tcpreplay之前必须先安装libpcap

随机推荐

  • 本文详解5G是个什么鬼,程序员都准备好了吗?

    无线移动通讯发展历史 最近5G的概念炒的如火如荼 xff0c 为此 xff0c 华为和高通还干了一仗 这篇文章从技术层面给大家分析 xff0c 什么是5G xff0c 它和4G比 xff0c 高级在哪里 xff1f 我们来看看移动互联网的技
  • python 调用 shell 时 设置环境变量

    2019独角兽企业重金招聘Python工程师标准 gt gt gt python调用shell 不设置shell的环境变量时 xff0c 对于中文等特殊字符会处理失败 xff0c 这时需要设置环境变量 调用shell xff0c 这里使用
  • 常用的ROS命令

    在这里记一下 xff0c 以免以后忘记了 打开ros master xff1a roscore 查看topic列表 xff1a rostopic list v 打印topic内容 xff1a rostopic echo topic 将bag
  • Rational Rose正逆向工程(类图转Java代码,Java代码转类图)

    xfeff xfeff 一 xff0c 正向工程 1 设置默认语言为Java xff0c Tools gt Options gt Notation gt default xff1a 选择Java 2 设置环境变量ClassPath xff0
  • Linux 下编译安装OpenCV

    Cmake的安装 OpenCV 2 2以后版本需要使用Cmake生成makefile文件 xff0c 因此需要先安装cmake ubuntu下安装cmake比较简单 xff0c apt get install cmake 如果觉得自带的版本
  • Python模块整理(三):子进程模块subprocess

    本来收集整理网络上相关资料后整理 xff1a 从python2 4版本开始 可以用subprocess这个模块来产生子进程 并连接到子进程的标准输入 输出 错误中去 xff0c 还可以得到子进程的返回值 subprocess意在替代其他几个
  • access$000方法和JAVA内部类的反编译

    反编译了几个内部类 xff0c 看到有对外部类access 000 access 100 access 200等方法的调用代码 xff0c 但反编译外部类时 xff0c 却看不到这些代码 这涉及到JAVA编译器中对内部类的处理方式 为了让内
  • c语言中寄存器设置方法,C 编程之——寄存器赋值操作

    通过这段时间的工作和学习 xff0c 我感觉在嵌入式硬件编程中 xff0c 大多数情况下都是对相应硬件的功能寄存器进行设置和操作 一 寄存器的设置和操作特性 1 xff0c 一个寄存器的每个位有其不同的意义 xff0c 进行不同的设置会使硬
  • 室内无人机全自动巡逻系统,或比固定摄像头省钱

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 两家欧洲公司开发了世界上第一款室内无人机监视自动巡逻系统 xff0c 可以实时转播录像 xff0c 并在发现入侵者时发出警报 无人机会在它所监测的建筑物的走廊和房间按照预定
  • 电子设计大赛可以用linux开发板嘛,【一转再转】电子设计大赛应该怎么准备?...

    最主要的是学习什么课程 电工电路基础 低频电子线路 数字电路 高频电子线路 电子测量 智能仪器原理及应用 传感器技术 电机与电气控制 信号与系统 单片机接口原理及应用 等等 所要学习的科目当然不能定局 xff0c 知识面越广越好 xff0c
  • px4固定翼无人机姿态控制理解

    学习px4代码也有一段时间了 xff0c 所以想写一写 xff0c 自己的一些学习心得吧 xff0c 也算是笔记吧 在px4这套代码中 xff0c 每一个功能都是一个模块 xff0c 例如姿态控制 xff0c 也就是一个应用程序 xff0c
  • PHP 模拟 HTTP 摘要认证(Digest )

    lt php header 34 Content type text html charset 61 utf 8 34 php摘要认证 users 61 39 dee 39 61 gt 39 123456 39 39 admin 39 61
  • c语言中strcat函数的作用,strcat函数的作用是什么?

    strcat函数的作用是复制一个字符串 xff0c 将这个字符串拼接在另一个字符串后面 strcat 函数接受两个字符串作为参数 xff0c 会把第二个字符串的备份附加在第一个字符串末尾 xff0c 并把拼接后形成的新字符串作为第一个字符串
  • 带参数宏定义和函数的区别

    define S a b a b area 61 S 3 2 int S int a int b int s s 61 a b return s 这两个有什么区别 define S a b a b area 61 S 3 2 尽量少使用宏定
  • http协议调试代理工具Fiddler

    Fiddler是一款WEB调试工具 它可以记录所有客户端到服务器端的HTTP请求 Fiddler启动时 会默认代理IE浏览器的127 0 0 1 8888 其它浏览器则要手动设置 工作原理 Fiddler是以代理WEB服务器的形式工作的 它
  • Windows脚本中等待几秒的替代方法

    用ping命令实现等待 等待的秒数可以用 n 参数来控制 如果要等待10秒 xff0c 参数是 n 11 ping n 11 127 0 0 1 gt nul 64 more 64 来自 ITPUB博客 xff0c 链接 xff1a htt
  • http协议之digest认证实现

    参考 http blog csdn net jszj article details 8918967 https wenku baidu com view 22be2dcf83d049649b6658ff html http blog cs
  • 请求头authorization_postman教程-08-认证(Authorization)

    这又是一个非常实用的功能 对我们做接口测试来说 经常要处理登录认证的情况 如果不用这个Authorization其实也能解决认证的问题 无非就是把要认证的数据按照要求在指定位置传入参数即可 比如我们之前测试的系统 登录后返回的token要在
  • 字符串连接函数strcat

    C 43 43 宝典 第6章数组与字符串 xff0c 本章将介绍一种数据集合类型 数组 与结构体不同 xff0c 数组是同一类型数据的集合 而且在内存中 xff0c 数组中的元素依次排列 xff0c 一个紧邻一个 本节为大家介绍字符串连接函
  • Python3.x爬虫教程:爬网页、爬图片、自己主动登录

    林炳文Evankaka原创作品 转载请注明出处http blog csdn net evankaka 摘要 xff1a 本文将使用Python3 4爬网页 爬图片 自己主动登录 并对HTTP协议做了一个简单的介绍 在进行爬虫之前 xff0c