安全矩阵

 找回密码
 立即注册
搜索
楼主: only

曾玉芳学习日记

[复制链接]

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-3-1 20:17:37 | 显示全部楼层
本帖最后由 only 于 2020-3-1 21:00 编辑

3月1日:
单向链表的操作




       这个礼拜学习了数据结构中的单链表,突然想起在寒假的任务当中老师有布置这个任务,而我当时却只是用python完成了这项任务,既然我这个礼拜刚学了,于是我决定趁热打铁,用c语言实现对单向链表的“查找,删减,插入以及对它长度的计算”


计算长度

  1. int length (List L)
  2. {
  3.         List p = L;/*p指向表的第一个结点*/
  4.         int j=0;
  5.         while(p)
  6.         {
  7.                 p = p->Next;
  8.                 j++;/*当前P指向的是第j个结点*/
  9.         }
  10.         return j;
复制代码


查找

我使用了两种查找方式

第一种是按序号查找

  1. List FindKth(int K,List L)
  2. {
  3.         List p =L;
  4.         int i=1;
  5.         while(p!=Null&&i<K)
  6.         {
  7.                 p = p->Next;
  8.                 i++;
  9.         }
  10.         if(i==K)
  11.         return p;/*找到第K个,返回指针*/
  12.         else return NUll;/*否则返回空*/
  13. }
复制代码
第二种是按值查找

  1. List Find(ElementType X,List L)
  2. {
  3.         List p =L;
  4.         while(p!=NULL&&p->Data!=X)
  5.         {
  6.                 p =p->Next;
  7.          }
  8.          return p;
  9.   }
复制代码


插入
(在第i-1(1≤i≤n-1)个结点后插入一个值为X的新结点)

1.构造一个新的结点,用s指向

2.再找到链表的第i-1个结点,用p指向

3.然后修改指针,插入结点

  1. List Insert(ElementType X,int i,List L)
  2. {
  3.         List p,s;
  4.         if(i==1)/*新结点插入在表头*/
  5.         {
  6.                 s= (List)malloc(sizeof(struct LNode));/*申请,填装结点*/
  7.                 s->Data=X;
  8.                 s->Next=L;
  9.                 return s;/*返回新表头指针*/
  10.          }
  11.          p =FindKth(i-1,L);/*查找第i-1个结点*/
  12.          if(p==Null)/*第i-1个不存在,不能插入*/
  13.          {
  14.                  printf("参数i错误");
  15.                  return Null;
  16.          }
  17.          else
  18.          {
  19.                  s= (List)malloc(sizeof(struct LNode));/*申请,填装结点*/
  20.                  s->Data=X;
  21.                  s->Next=p->Next;/*新结点插入在第i-1个结点的后面*/
  22.                  p->Next=S;
  23.                  return L;
  24.          }
  25.   }
复制代码
删除(删除链表的第i(1≤i≤n)个位置上的结点)

1.先找到链表的第i-1个结点,用p指向

2.再用指针s指向被删除的结点(p的下一个结点)

3.然后修改指针,删除s所知结点

  1. List Delete(int i,List L)
  2. {
  3.         List p,s;
  4.         if (i==1)/*如果要删除的是表的第一个结点*/
  5.         {
  6.                 s=L;/*s指向第1个结点*/
  7.                 if(L!=NULL) L=L->Next;/*从链表中删除*/
  8.                 else return NULL;
  9.                 free(s);/*释放被删除结点/
  10.                 return L;
  11.         }
  12.           p =FindKth(i-1,L);/*查找第i-1个结点*/
  13.          if(p==NULL)
  14.          {
  15.                  printf("第%d个结点不存在",i-1);
  16.          }
  17.          else if(p->Next==NULL)
  18.          {
  19.                  printf("第%d个结点不存在",i);
  20.          }
  21.          else
  22.          {
  23.                  s=p->Next;/*s指向第i个结点*/
  24.                  p->Next=s->Next;/*从链表中删除*/
  25.                  free(s);/*释放被删除结点*/
  26.                  return L;
  27.          }
  28.   }
复制代码




回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-3-2 23:00:39 | 显示全部楼层
3月2日:正在努力学习课内知识...
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-3-3 21:02:35 | 显示全部楼层
本帖最后由 only 于 2020-3-3 21:41 编辑

3月3日:今天又是努力学习数据结构的一天
之前学习了单向链表的操作,今天做了一道应用题
题目如下:求A&B两个线性表的并集,并存储到线性表A中
代码:
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. void UnionList(int *pa,int na,int *pb,int nb,int *pc,int *numc);//求集合函数
  4. int ListCheck(int *pa,int na,int x);//检测线性表中是否有x
  5. int CheckSame(int *p,int n);//检测链表中是否有重复数字

  6. #define FALSE 0;
  7. #define TRUE 1;

  8. int main()
  9. {
  10.         int i;
  11.         int *pa,*pb,*pc,*numc;
  12.         int na,nb,nc;

  13.         printf("how many numbers does LA have? \n");
  14.         scanf("%d",&na);//输入A线性表的大小
  15.         printf("how many numbers does LB have? \n");
  16.         scanf("%d",&nb);//输入B线性表的大小
  17.         nc=na+nb;//暂定C的大小为A+B的和
  18.         numc=&nc;//用numc指向nc

  19.         pa=(int *)malloc(na*sizeof(int));
  20.         pb=(int *)malloc(nb*sizeof(int));
  21.         pc=(int *)malloc(nc*sizeof(int));
  22.         //分配A、B、C线性表的内存(C线性表未必有na+nb个元素,但为了保证空间足够,直接分配na+nb大小)

  23.         do
  24.         {
  25.         printf("please input A array number:\n");
  26.         for(i=0;i<na;i++)
  27.                 scanf("%d",pa+i);
  28.         }while(!CheckSame(pa,na));
  29.         //给A线性表赋值,若存在相同数字,则重新输入

  30.         do
  31.         {
  32.         printf("please input B array number:\n");
  33.         for(i=0;i<nb;i++)
  34.                 scanf("%d",pb+i);
  35.         }while(!CheckSame(pb,nb));
  36.         //给A线性表赋值,若存在相同数字,则重新输入

  37.         UnionList(pa,na,pb,nb,pc,numc);//求A、B并集,存放到C
  38.        
  39.         printf("the union array is :\n");//输出C线性表
  40.         for(i=0;i<*numc;i++)
  41.         {
  42.                 printf("%d\t",*(pc+i));
  43.         }
  44.         printf("\n");
  45.         return 0;
  46. }

  47. void UnionList(int *pa,int na,int *pb,int nb,int *pc,int *numc)//求A、B集合,存放到C
  48. {
  49.         int i,j,k=0;
  50.         for(i=0;i<na;i++,k++)
  51.         {
  52.                 *(pc+k)=*(pa+i);
  53.         }
  54.         //先将A线性表中内容存放到C线性表中
  55.         for(j=0;j<nb;j++)//遍历B线性表中的元素
  56.         {
  57.                 if(ListCheck(pa,na,*(pb+j)))//当前B线性表的元素未在A中出现,将该元素插入到C线性表
  58.                 {
  59.                         *(pc+k)=*(pb+j);
  60.                         k++;
  61.                 }
  62.                 if(!ListCheck(pa,na,*(pb+j)))//当前B线性表的元素在A中出现,nc自减,这样可以保证nc最后的大小就是并集元素的数量
  63.                 {
  64.                         (*numc)--;//numc指向nc;
  65.                 }
  66.         }
  67. }

  68. int ListCheck(int *pa,int na,int x)
  69. {
  70.         int i=0;
  71.         while(i<na)
  72.         {
  73.                 if(*(pa+i)==x)
  74.                         return 0;
  75.                 i++;
  76.         }
  77.         return 1;
  78. }


  79. int CheckSame(int *p,int n)//检测是否有重复数字
  80. {
  81.         int i,j;
  82.         for(i=0;i<n;i++)
  83.         {
  84.                 for(j=0;j<n;j++)
  85.                 {
  86.                         if(i==j)
  87.                                 continue;
  88.                         if(*(p+i)==*(p+j))
  89.                         {
  90.                                 printf("there are same numbers in the array.\n");
  91.                                 return FALSE;
  92.                         }
  93.                 }
  94.         }
  95.         return TRUE;
  96. }
复制代码
运行结果:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-3-5 17:45:50 | 显示全部楼层
本帖最后由 only 于 2020-3-5 18:18 编辑

3月5日:
线性表

今天主要对学过的线性表的知识点进行了梳理总结:



1.线性表是由n≥0个数据元素组成的有限序列。
2.n=0是空表;非空表,只能有一个开始结点,有且只能有一一个终端结点。
3.线性表上定义的基本运算:
     构造空表: Initlist (L )
     求表长: Listlength (L)
     取结点: GetNode (L, 1)
     查找: LocateNode (L, x)
     插入: InsertList (L, x,i)
     删除: Delete (L, i)
4.顺序表是按线性表的逻辑结构次序依次存放在一组地址连续的存储单元中。在存储单元中的各元素的物理位贯和 逻辑结构中各结点相邻关系是一致的。地址计算: LOCa (i) =LOCa (1)+ (i1) *d; (首地址为1) 5.在顺序表中实现的基本运算:
     插入:平均移动结点次数为n/2;平均时间复杂度均为0 (n)。
     删除:平均移动结点次数为(n-1) /2;平均时间复杂度均为0 (n)。
6.线性表的链式存储结构中结点的逻辑次序和物理次序不一定相同,为了能正确表示结点间的逻辑关系,在存储每个 结点值的同时,还存储了其后继结点的地址信息(即指针或链)。这两部分信息组成链表中的结点结构。
7.一个 单链表由头指针的名字来命名。
单链表运算:
     建立单链表.
     头插法: s->next- head; head=s; 生成的顺序与输入顺序相反。平均时间复杂度均为0 (n)。
     尾插法: head=rear null; if (head=null) head=s; else r->next-s; FS;平均时间复杂度均为O (n)
8.加头结点的算法:对开始结点的操作无需特殊处理,统一了空表和非空表。
9.查找.
按序号:与查找位置有关,平均时间复杂度均为。(n)。
按值:与输入实例有关,平均时间复杂度均为O (n)。
10.插入运算: p=GetNode (L, 1-1); s->nex=p->next; p->next=s;平均时间复杂度均为0 (n)
11.删除运算: p=GetNode (L, 1-1); rp>next; p-next->nx; free ()平均时间复杂度均为0(n)
12.单循环链表是一种首尾相接的单链表,终端结点的指针域指向开始结点或头结点。链表终止条件是以指针等于头指针或 尾指针。
13.采用单循环链表在实用中多采用尾指针表示单循环链表。优点是查找头指针和尾指针的时间都是0(1), 不用 遍历整个链表。
14.双链表就是双向链表,就是在单链表的每个结点里再增加一个指向其直接前趋的指针域prior,形成两条不同方 向的链。由头指针head惟- -确定。双链表也可以头尾相链接构成双(向) 循环链表。
15.双链表上的插入和删除时间复杂度均为。O(1)。
16.顺序表和链表的比较:
基于空间:
顺序表的存储空间是静态分配,存储密度为1;适于线性表事先确定其大小时采用。 链表的存储空间是动态分配,存储密度< 1;适于线性表长度变化大时采用。
基于时间:
顺序表是随机存储结构,当线性表的操作主要是查找时,宜采用。
以插入和删除操作为主的线性表宜采用链表做存储结构。
17.若插入和删除主要发生在表的首尾两端,则宜采用尾指针表示的单循环链表。




回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-3-7 19:48:04 | 显示全部楼层
本帖最后由 only 于 2020-3-7 20:05 编辑

3月7日:
PHP cookie

在学这个之前,首先我们得了解一下什么是cookie。

Cookie 并不是它的原意“甜饼”的意思,它常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,我们能够创建并取回 cookie 的值。

那么我们应该如何创建cookie呢?

在PHP中,setcookie() 函数用于设置 cookie。

注释
:setcookie() 函数必须位于 <html> 标签之前。
语法:
  1. setcookie(name, value, expire, path, domain);
复制代码
例子:
在下面的例子中,我们将创建名为 "user" 的 cookie,把为它赋值 "Alex Porter"。我们也规定了此 cookie 在一小时后过期:
  1. <?php
  2. setcookie("user", "Alex Porter", time()+3600);
  3. ?>

  4. <html>
  5. <body>

  6. </body>
  7. </html>
复制代码
注:在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码(为防止 URL 编码,应该使用 setrawcookie() 取而代之我们应该如何取回cookie的值呢?
PHP 的 $_COOKIE 变量用于取回 cookie 的值。
我们取回了名为 "user" 的 cookie 的值,并把它显示在了页面上:
  1. <?php
  2. // Print a cookie
  3. echo $_COOKIE["user"];

  4. // A way to view all cookies
  5. print_r($_COOKIE);
  6. ?>
复制代码
我们使用 isset() 函数来确认是否已设置了 cookie,如下:
  1. <html>
  2. <body>

  3. <?php
  4. if (isset($_COOKIE["user"]))
  5.   echo "Welcome " . $_COOKIE["user"] . "!<br />";
  6. else
  7.   echo "Welcome guest!<br />";
  8. ?>

  9. </body>
  10. </html>
复制代码
如何删除 cookie?
当删除 cookie 时,我们应当使过期日期变更为过去的时间点。
删除的例子:

  1. <?php
  2. // set the expiration date to one hour ago
  3. setcookie("user", "", time()-3600);
  4. ?>
复制代码
如果浏览器不支持 cookie 该怎么办?
如果我们的应用程序涉及不支持 cookie 的浏览器,我们就不得不采取其他方法在应用程序中从一张页面向另一张页面传递信息。一种方式是从表单传递数据
下面的表单在用户单击提交按钮时向 "welcome.php" 提交了用户输入:

  1. <html>
  2. <body>

  3. <form action="welcome.php" method="post">
  4. Name: <input type="text" name="name" />
  5. Age: <input type="text" name="age" />
  6. <input type="submit" />
  7. </form>

  8. </body>
  9. </html>
复制代码
取回 "welcome.php" 中的值:
  1. <html>
  2. <body>

  3. Welcome <?php echo $_POST["name"]; ?>.<br />
  4. You are <?php echo $_POST["age"]; ?> years old.

  5. </body>
  6. </html>
复制代码



回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-3-10 21:56:31 | 显示全部楼层
本帖最后由 only 于 2020-3-10 22:06 编辑

3月10日:
PHP Sessions

什么是PHP Session 变量?

当我们运行一个应用程序时,我们会打开它,做些更改,然后关闭它。这很像一次会话。计算机清楚你是谁。它知道你何时启动应用程序,并在何时终止。但是在因特网上,存在一个问题:服务器不知道你是谁以及你做什么,这是由于 HTTP 地址不能维持状态。
通过在服务器上存储用户信息以便随后使用,PHP session 解决了这个问题(比如用户名称、购买商品等)。不过,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久储存信息,可以把数据存储在数据库中。
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。
开始 PHP Session
在我们把用户信息存储到 PHP session 中之前,首先必须启动会话。
代码如下:
  1. <?php session_start(); ?>

  2. <html>
  3. <body>

  4. </body>
  5. </html>
复制代码
注:session_start() 函数必须位于 <html> 标签之前
以上代码会向服务器注册用户的会话,让我们可以开始保存用户信息,同时会为用户会话分配一个 UID。
存储 Session 变量
存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量:
  1. <?php
  2. session_start();
  3. // store session data
  4. $_SESSION['views']=1;
  5. ?>

  6. <html>
  7. <body>

  8. <?php
  9. //retrieve session data
  10. echo "Pageviews=". $_SESSION['views'];
  11. ?>

  12. </body>
  13. </html>
复制代码
输出:
  1. Pageviews=1
复制代码
在下面的例子中,我们创建了一个简单的 page-view 计数器。isset() 函数检测是否已设置 "views" 变量。如果已设置 "views" 变量,我们累加计数器。如果 "views" 不存在,则我们创建 "views" 变量,并把它设置为 1:
  1. <?php
  2. session_start();

  3. if(isset($_SESSION['views']))
  4.   $_SESSION['views']=$_SESSION['views']+1;

  5. else
  6.   $_SESSION['views']=1;
  7. echo "Views=". $_SESSION['views'];
  8. ?>
复制代码
终结 Session

当我们希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。
unset() 函数用于释放指定的 session 变量:
  1. <?php
  2. unset($_SESSION['views']);
  3. ?>
复制代码
我们也可以通过 session_destroy() 函数彻底终结 session

  1. <?php
  2. session_destroy();
  3. ?>
复制代码
注:session_destroy() 将重置 session,我们将失去所有已存储的 session 数据

回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-3-11 20:48:50 | 显示全部楼层
本帖最后由 only 于 2020-3-11 20:55 编辑

3月11日:
PHP MySQL 数据库连接

连接到一个 MySQL 数据库
在我们能够访问并处理数据库中的数据之前,我们必须创建到达数据库的连接。
在 PHP 中,这个任务通过 mysql_connect() 函数完成
语法:
  1. mysql_connect(servername,username,password);
复制代码
servername:可选。规定要连接的服务器。默认是 "localhost:3306"。
username:可选。规定登录所使用的用户名。默认值是拥有服务器进程的用户的名称。
password:可选。规定登录所用的密码。默认是 ""。
在下面的例子中,我们在一个变量中 ($con) 存放了在脚本中供稍后使用的连接。如果连接失败,将执行 "die" 部分:
  1. <?php
  2. $con = mysql_connect("localhost","peter","abc123");
  3. if (!$con)
  4.   {
  5.   die('Could not connect: ' . mysql_error());
  6.   }

  7. // some code

  8. ?>
复制代码
关闭连接
脚本一结束,就会关闭连接。如需提前关闭连接,请使用 mysql_close() 函数。

  1. <?php
  2. $con = mysql_connect("localhost","peter","abc123");
  3. if (!$con)
  4.   {
  5.   die('Could not connect: ' . mysql_error());
  6.   }

  7. // some code

  8. mysql_close($con);
  9. ?>
复制代码




回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-3-12 21:06:39 | 显示全部楼层
本帖最后由 only 于 2020-3-12 21:20 编辑

3月12 日:
PHP create
创建数据库
CREATE DATABASE 语句用于在 MySQL 中创建数据库。
语法:
  1. CREATE DATABASE database_name
复制代码

为了让 PHP 执行上面的语句,我们必须使用 mysql_query() 函数。此函数用于向 MySQL 连接发送查询或命令。



创建表
CREATE TABLE 用于在 MySQL 中创建数据库表。
语法:
  1. CREATE TABLE table_name
  2. (
  3. column_name1 data_type,
  4. column_name2 data_type,
  5. column_name3 data_type,
  6. .......
  7. )
复制代码

为了执行此命令,我必须向 mysql_query() 函数添加 CREATE TABLE 语句。
PHP MySQL Insert Into
向数据库表插入数据
INSERT INTO 语句用于向数据库表添加新记录。
语法
  1. INSERT INTO table_name
  2. VALUES (value1, value2,....)
复制代码
我们还可以规定希望在其中插入数据的列:
  1. INSERT INTO table_name (column1, column2,...)
  2. VALUES (value1, value2,....)
复制代码
注:SQL 语句对大小写不敏感。INSERT INTO 与 insert into 相同。
为了让 PHP 执行该语句,我们必须使用 mysql_query() 函数。该函数用于向 MySQL 连接发送查询或命令。
PHP MySQL Select
SELECT 语句用于从数据库中选取数据。
从数据库表中选取数据
SELECT 语句用于从数据库中选取数据。
语法:
  1. SELECT column_name(s) FROM table_name
复制代码

注:SQL 语句对大小写不敏感。SELECT 与 select 等效。
为了让 PHP 执行上面的语句,我们必须使用 mysql_query() 函数。该函数用于向 MySQL 发送查询或命令。
PHP MySQL Where 子句
WHERE 子句
如需选取匹配指定条件的数据,请向 SELECT 语句添加 WHERE 子句。
语法
  1. SELECT column FROM table
  2. WHERE column operator value
复制代码
注:SQL 语句对大小写不敏感。WHERE 与 where 等效。
为了让 PHP 执行上面的语句,我们必须使用 mysql_query() 函数。该函数用于向 SQL 连接发送查询和命令。
PHP MySQL Order By 关键词
ORDER BY 关键词
ORDER BY 关键词用于对记录集中的数据进行排序。
语法:
  1. SELECT column_name(s)
  2. FROM table_name
  3. ORDER BY column_name
复制代码

:SQL 对大小写不敏感。ORDER BY 与 order by 等效。
PHP MySQL Update
更新数据库中的数据
UPDATE 语句用于在数据库表中修改数据。
语法:
  1. UPDATE table_name
  2. SET column_name = new_value
  3. WHERE column_name = some_value
复制代码

注:SQL 对大小写不敏感。UPDATE 与 update 等效。
为了让 PHP 执行上面的语句,我们必须使用 mysql_query( 函数。该函数用于向 SQL 连接发送查询和命令。

PHP MySQL Delete From
删除数据库中的数据
DELETE FROM 语句用于从数据库表中删除记录。
语法:
  1. DELETE FROM table_name
  2. WHERE column_name = some_value
复制代码

注:SQL 对大小写不敏感。DELETE FROM 与 delete from 等效。
为了让 PHP 执行上面的语句,我们必须使用 mysql_query( 函数。该函数用于向 SQL 连接发送查询和命令。








回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-3-15 21:54:54 | 显示全部楼层

jin

本帖最后由 only 于 2020-3-15 23:00 编辑

3月15日:
ctf题型小题

今天心血来潮,想到之前学过的burp suite和php语法知识,着实想要巩固一下。于是想到之前做ctf题型的时候好像遇到过,当时并没有完成,而在有了小小的基础之后,我想,再次面对这些入门题我应该可以勉强写出几个吧

有了想法就应该立即付出行动,于是迎来了第一题:单身二十年


当我打开题目地址,发现了一句提示:


到这找到key,咦,这么简单吗?我立马点了进去


这里真的没有KEY,土土哥哥说的,土土哥哥从来不坑人,pS土土是闰土,不是谭神???这不是坑我吗?于是,我查看源码,尝试获得flag



好吧,只是一个普通的HTML代码,我突然想到了用bp抓包




我找到了一个url链接,用浏览器打开


发现跳转到另一个界面,于是我将这个包放在repeater里面再跑一遍,点击GO后,我们成功获得Flag


做完这个题之后,我看见了一个和他十分类似的题目:


于是我同样用bp抓包,成功获得flag


紧接着,由于这几天简单学习学习了php,所以我决定做一下和PHP相关的题:


看到这道题,我端详了代码很久,当我将代码复制运行时,发现报错,看了很久之后,我还是决定求助百度,于是将eval改成了echo


结果成功找到flag!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-3-17 20:28:45 | 显示全部楼层

jin

本帖最后由 only 于 2020-3-17 21:07 编辑

3月17日:
python爬虫之requests库

request库是python的第三方库,它也是目前公认的爬取网页最好的第三方库,它十分简单便捷,甚至可以让我们用一行代码就能爬取网页上的相关资源,今天,我把request库的几个方法进行了总结

首先,我们需要通过在命令行中输入如下命令来安装request库:

  1. pip install requests
复制代码

request库的主要方法大概有如下七种:

  1. requests.request() :  构造一个请求,支撑以下各方法的基础方法
  2. requests.get() :        获取HTML网页的主要方法,对应于HTTP的GET
  3. requests.head() :      获取HTML网页头信息的方法,对应于HTTP的HEAD
  4. requests.post() :       向HTML网页提交POST请求的方法,对应于HTTP的POST
  5. requests.put() :          向HTML网页提交PUT请求的方法,对应于HTTP的PUT
  6. requests.patch():        向HTML网页提交局部修改请求,对应于HTTP的PATCH
  7. requests.delete():       向HTML页面提交删除请求,对应于HTTP的DELETE
复制代码


其实,也可以说requests库只有request一种方法,其余六种都是通过调用request的方法而实现的

requests.get()

它的完整的使用方法如下:

  1. requests.get(url, params=None, **kwargs)
复制代码
url : 拟获取页面的url链接
params : url中的额外参数,字典或字节流格式,可选
**kwargs: 12个控制访问的参数
该方法包涵两个重要对象:response对象和request对象

以下是response对象的几个属性:

  1. r.status_code               HTTP请求的返回状态,200表示连接成功,404表示失败
  2. r.text                          HTTP响应内容的字符串形式,即,url对应的页面内容
  3. r.encoding                  从HTTP header中猜测的响应内容编码方式
  4. r.apparent_encoding    从内容中分析出的响应内容编码方式(备选编码方式)
  5. r.content                     HTTP响应内容的二进制形式
复制代码
requests.head()

它的完整的使用方法如下:

  1. requests.head(url, **kwargs)
复制代码
url : 拟获取页面的url链接
**kwargs: 12个控制访问的参数

requests.post()
它的完整的使用方法如下:
  1. requests.post(url, data=None, json=None, **kwargs)
复制代码

url : 拟更新页面的url链接
data : 字典、字节序列或文件,Request的内容
json : JSON格式的数据,Request的内容
**kwargs: 12个控制访问的参数
requests.put()  
它的完整的使用方法如下:
  1. requests.put(url, data=None, **kwargs)
复制代码
url : 拟更新页面的url链接
data : 字典、字节序列或文件,Request的内容
**kwargs: 12个控制访问的参数

requests.patch()
它的完整的使用方法如下:
  1. requests.patch(url, data=None, **kwargs)
复制代码
url : 拟更新页面的url链接
data : 字典、字节序列或文件,Request的内容
**kwargs: 12个控制访问的参数
requests.delete()

它的完整的使用方法如下:

  1. requests.delete(url, **kwargs)
复制代码
url : 拟删除页面的url链接
**kwargs: 12个控制访问的参数

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 00:53 , Processed in 0.017839 second(s), 17 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表