首页
关于
友链
留言
Search
1
安装Docker Desktop报错WSL 2 installation is incomplete
76 阅读
2
震惊!杭州应届生工作免费领2w元
31 阅读
3
我的世界紫禁之巅纯净生存服务器
25 阅读
4
python3网络爬虫开发实战pdf
22 阅读
5
火车头采集问题:Void Proc(System.Net.HttpWebRequest)
20 阅读
技术分享
日常学习
我的世界
Search
标签搜索
python
博客
javascript
ce
web
织梦
html
按键精灵
php
游戏
css
typescript
jquery
日常
数据库
vue
ubuntu
Datehoer
累计撰写
178
篇文章
累计收到
10
条评论
首页
栏目
技术分享
日常学习
我的世界
页面
关于
友链
留言
搜索到
138
篇与
技术分享
的结果
2020-12-31
JavaScript 递增递减运算符前置后置的区别
JavaScript的递增递减运算符前置和后置,我一开始其实是以为没区别的,但是当时老师出了个这个题,做起来很难受。。。for ( var a = 1 , b = 0 ; a < b ; a ++ ){ b = a ; } console . log ( b );大概题就是这么个题,现在看应该是我错了,我当时以为老师出错题了。后来发现还是我太年轻。所以来说一下递增递减运算符前置和后置都有什么区别,其实一般来说,没有什么区别。。。我们可以先定义a = 1;然后分别输出++a和a++,看一下效果。var a = 1 ; console . log ( ++ a ); var a = 1 ; console . log ( a ++ );可以看到,他们是有区别的,这是为什么呢?按照我的理解,应该是它如果读取的是+号会向后继续读取,而读取的是a的话,那么会直接输出a而不管后面的内容了。前置型简单理解就是 先计算再赋值 后置型简单理解就是 先赋值再计算之所以他们有区别,究其根本还是因为运算符的优先级有区别。 优先级 运算类型 关联性 运算符 21 圆括号 n/a(不相关) ( … ) 20 成员访问 从左到右 … . … 需计算的成员访问 从左到右 … [ … ] new (带参数列表) n/a new … ( … ) 函数调用 从左到右 … ( … ) 可选链(Optional chaining) 从左到右 ?. 19 new (无参数列表) 从右到左 new … 18 后置递增(运算符在后) n/a … ++ 后置递减(运算符在后) … -- 17 逻辑非 从右到左 ! … 按位非 ~ … 一元加法 + … 一元减法 - … 前置递增 ++ … 前置递减 -- … typeof typeof … void void … delete delete … await await … 16 幂 从右到左 … ** … 15 乘法 从左到右 … * … 除法 … / … 取模 … % … 14 加法 从左到右 … + … 减法 … - … 13 按位左移 从左到右 … << … 按位右移 … >> … 无符号右移 … >>> … 12 小于 从左到右 … < … 小于等于 … <= … 大于 … > … 大于等于 … >= … in … in … instanceof … instanceof … 11 等号 从左到右 … == … 非等号 … != … 全等号 … === … 非全等号 … !== … 10 按位与 从左到右 … & … 9 按位异或 从左到右 … ^ … 8 按位或 从左到右 … | … 7 逻辑与 从左到右 … && … 6 逻辑或 从左到右 … || … 5 空值合并 从左到右 … ?? … 4 条件运算符 从右到左 … ? … : … 3 赋值 从右到左 … = … … += … … -= … … **= … … *= … … /= … … %= … … <<= … … >>= … … >>>= … … &= … … ^= … … |= … … &&= … … ||= … … ??= … 2 yield 从右到左 yield … yield* yield* … 1 展开运算符 n/a ... … 0 逗号 从左到右 … , … 我们可以看到后置运算的优先级是大于前置的,所以前置是先运算再传值,而后置是先传值再运算。其实也就是我前面所说的,++在前面,所以我们先运算然后再传值,而++在后面的话,我们就先传值再运算。并且其实后置的话,并非不进行运算了 ,只是如果想要看到效果的话,需要改一下前面的代码。 var a = 1 ;console . log ( a ++ ); console . log ( ++ a );可以看到结果为第二个结果为3,所以其实只是不显示而已,并非不执行。
2020年12月31日
3 阅读
0 评论
0 点赞
2020-12-31
JavaScript 布尔值和数值比较大小
简单介绍一下JavaScript中的布尔型和数值型的比较把。今天在今年的最后一天中,我决定多发几篇文章纪念一下,哈哈,主要是有好多话想说,所以准备多发几篇文章。其实这个我在当时做题的时候哦没有什么感觉。但是事后同学讨论的时候,说怎么怎么样,让我很是疑惑。我记得当时的题时while(a<b<c)然后执行数值转换a给b,b给a,c自减。大概重现一下的话。 a = 1 ; b = 2 ; c = 2 ; while ( a < b < c ){ e = a ; a = b ; b = e ; c = c - 1 ; } console . log ( "" + a + b + c ) 大概题目就是这么个题目,其实我一开始确实是想错了,因为当时想的是只执行一遍循环,但是第二次想的时候发现其实应该如果按照我想的,应该是一遍循环都不执行啊,因为a虽然小于b但是b跟c是相等的啊,后来仔细一想,发现其实true是1而false是0,我们比较完之后应该是返回的是true和false啊。所以我当时就这么写的,但是后俩同学非跟我犟。。。于是在console面板调试了一下。不过其实这个在自己输入的时候就能看到下面的结果了。 所以其实可以总结一下: 我们如果是多个数值进行比较大小的话,应该是从左到右开始的,而且应该除了第一个比较的是想要的比较结果,后面的都是数值跟1或者0进行比较大。然后我们其实看JavaScript中的true或者false,其实可以看作是1或者0的,而不是冷冰冰的布尔值。
2020年12月31日
5 阅读
0 评论
0 点赞
2020-12-30
html 文字水平垂直居中
其实大概在许多初学html5的人,都会有一个疑惑,我怎么将文字在div内水平垂直居中呢?下面讲解一下如何水平垂直居中。简单看一个具体的效果吧。其实一般来说,我们做到水平居中是很容易的,那么垂直居中呢?html如何做到文字垂直居中?首先看一下如何做到水平居中----->我们通过一个简单的css属性来做到,text-align:center;其实说到这个属性,我们就不得不说一下align属性了,这个可以直接在行内写上,类似于class等。不过其实这个属性已经废弃了,我们现在还是推荐使用css属性来达到想要的效果。做到了水平居中的效果,然后我们再来看一下垂直居中。这个其实是利用div的height来做到,我们首先给div定义一个height,比如说我上面的案例给的是60px,然后我们给它一个关于height的属性--line-height属性,我们给div的高度是多少,那么给line-height的高度就是多少,我们给它加上一个line-height:60px:然后就得到了上面的效果了。其实居中这个效果很容易做到,比如说我们还可以利用margin:0 auto;来做到,当然只是该属性的居中,比如说给div居中。简单看一下这个html文字水平垂直居中的代码吧。.footer { line-height: 60px; text-align: center; clear: both; height: 60px; background-color: #6cf; } <footer class="footer"> <p>网站设计案例 2020年12月</p> </footer>其实还是非常简单的,利用行内高度来做到,line-height。如果有什么疑问,可以在评论区留言,我会在看到的第一时间进行回复的。
2020年12月30日
2 阅读
0 评论
0 点赞
2020-12-29
JavaScript switch case语句
JavaScript中的switch case语句,在实际操作中是非常好用的。我们平常使用选择条件控制语句,大多数都是if else if以及else,如果我们有许多判断的话,要写许多段的else if语句,而我们通过使用switch case语句,就会使得过程变得非常简单易懂。switch(n) { case 1: 执行代码块 1 break; case 2: 执行代码块 2 break; default: 与 case 1 和 case 2 不同时执行的代码 }其实关于switch case语句最常用的例子就是选择日期了,比如说输入月份然后输出该月份的天数。然后再比如说输出今天是星期几,都是一些比较常见的例子。举一个获取今天是星期几的例子吧,其实这个需要利用JavaScript内置的函数Date(),这个是有关日期的函数,前面其实有一篇文章讲过,也就是我们首页下面的那个运行时间,就是利用Date()函数来获取时间然后进行计算的。----JavaScript实现网站运行时间首先我们通过getDay()来获取今天的日期,然后再导入到switch进行判断即可。var Today=new Date().getDay(); switch (Today) { case 0: x="今天是星期日"; break; case 1: x="今天是星期一"; break; case 2: x="今天是星期二"; break; case 3: x="今天是星期三"; break; case 4: x="今天是星期四"; break; case 5: x="今天是星期五"; break; case 6: x="今天是星期六"; break; } console.log(x);其实如果想要验证的话,是非常容易的,我们只需要定义一下然后直接输出即可。var Today=new Date().getDay(); alert(Today);switch case语句是一个非常适合在选择条件很多的时候进行使用。不过其实说真的,switch case的作用完全可以用if else if els替代,但是实际情况下怎么使用完全看代码编写者的喜好了,当然其实更多的还是要根据实际情况,毕竟我们如果使用switch case语句会非常简单的话,为何不用呢?然后再说一下switch case中类似于if中的else,default,这个类似于else,具体使用可以看下面的例子,判断今天是否是工作日。var Today=new Date().getDay(); switch (Today) { case 0: x="今天是星期日"; break; case 6: x="今天是星期六"; break; default: x="今天是工作日"; break; } console.log(x);具体的作用其实就是else的作用,除了上面的case的情况外,default代表着其余的所有情况。对了,其实大多数,不应该说所有的JavaScript代码都可以通过f12中的console面板进行操作的。好了,今天的JavaScript的switch case语句介绍到这里了,如果有什么疑问,请在评论区留言,我会在看到的第一时间进行回复的。
2020年12月29日
2 阅读
0 评论
0 点赞
2020-12-28
Cheat Engine 修改gta5线下钱数
其实这个我好早以前就发现了,用ce修改钱数的话容易出现负值,然后后来有一次突发奇想,就把ce修改gta5线下钱数的方法想出来了。其实非常简单,我们修改股票。首先随便购买市场上的随意一个的股票,买入随机数量,之后我们ce搜索这个值,然后不断修改持有的股票数量,直到最后找到只剩下一个值。然后我们修改这个值就好了,注意不要修改的太大。。。。否则会出现问题的。如有有什么不懂的可以看往期的文章。 ce教程汇总当然,有疑问也可以在评论区留言,我会在看到的第一时间进行回复的。
2020年12月28日
2 阅读
0 评论
0 点赞
2020-12-27
php 考试编程题详解
明天就要开始本学期的php期末考试了,感觉其实学的并没有多少,难度不是很大,唯一的难点其实就是笔试。。。用笔来写代码,确实很难。由于平常的作业大多数都是选择,填空,判断。而编程题其实并不多,所以准备在这里总结一下平常遇到的一些php编程题,一边复习一遍编辑。php编程题--九九乘法表首先最早的一道编程题其实大家都应该见过,不止是php,其余的语言也都见过,那就是打印九九乘法表。我们如果使用php或者JavaScript的话,还是要依赖于html的标签的。比如说table,比如说td,tr。我们首先要有一个html的概念,那就是table里套着tr,tr里套着td。首先先来简单的编写一下表格吧。呃呃,本来其实想由浅入深的,但是这个属实没有难度,就不浪费大家时间了,php代码直接奉上。<?php $i = 9; echo "<table border='1'>"; for ($b = 1;$b <= $i;$b++){ echo '<tr>'; for($c = 1;$c <=$b;$c++){ echo "<td>"."$b*$c=".$b*$c."</td>"; } echo "</tr>"; } echo "</table>"; ?>其实也就是一个简单的for循环的嵌套,再加上标签就行了。php编程题--输出1-100的素数首先解释一下素数,素数其实就是除了1和自己以外,没有其他因数的自然数。也就是 本身/除本身或1以外其余的都非整数。这个其实难度也就是怎么只输出一个结果。目前来说有两个方法。分别介绍一下php求1-100内的素数的两种方法吧。<?php for ($b = 2;$b<=100;$b++){ for($c = 2;$c<$b;$c++){ if ($b%$c==0){ break; } } if($b==$c){ echo $b; } } ?>这是第一种,因为我们在if里进行判断,然后如果取余为0的话代表了整除,这样子我们直接break出去,然后我们的$c就会停在那个可以被整除的数上,然后再判断两个值是否相等就行了。因为如果是素数的话,第二个for循环应该是一直进行的,然后$c就会等于$b。其实第二种思路跟第一种类似吧,就是取一个记录值,我们再开头取一个值,让他等于true,之后如果有因数的话,那么将这个值更改为false,然后后面跟上类似于前面的if判断就行了。不过其实还是有一个问题的,就是我们在前面更改为false后,一定要在if后将它改为true,否则的话,那个标准值就一直是false了。<?php $bz = true; for ($b = 2;$b<=100;$b++){ for($c = 2;$c<$b;$c++){ if ($b%$c==0){ $bz = false; break; } } if($bz){ echo $b; } $bz = true; } ?>php编程题--求黑红白球各多少个很简单的一道题。for+if的运用,直接上PHP代码吧<?php for($hong = 1;$hong<=25;$hong++){ for($hei = 1;$hei<=31;$hei++){ if($hong + $hei ==28){ $bai = 25-$hong; if($bai + $hei == 31){ echo "hei".$hei,"bai",$bai,"hong",$hong; } } } } ?>很简单吧,其实。。。php编程题--猴子摘桃 <?php function tao($day){ if($day==10) { return 1; } return 2*(tao($day+1)+1); } echo tao(0); ?>这个是通过递归来解决的,不过不知道是不是vscode的问题,一直显示有错误,但是可以正常运行。为什么要return 1 是因为最后猴子只剩下1个桃了,然后我们算一下第九天的 1+1然后再乘2以此类推,就是一个递归了。php编程题--输入整数输出4次方这个书上的写的是16的四次方,但实际上应该是它的4次方吧。。。很简单,没难度。<?php function cifang($c){ return pow($c,4); } echo cifang(2); ?>php编程题简单介绍到这里吧,如果有什么疑问可以在评论区留言,我会在看到的第一时间进行回复的。当然如果有错误也欢迎指出。
2020年12月27日
2 阅读
0 评论
0 点赞
2020-12-26
浅谈php 取余
相信各位其实对php取余应该没有什么问题了,不过其实对于初学者来说,取余这个运算符还是有难度的。在我当时刚学编程的时候,一直想不明白取余到底是什么,为什么9%3结果为0,而9%2结果却是1呢。其实之所以一开始想不明白就是懒。。。。多看几个式子就明白了。不过今天之所以发一篇关于php取余的文章,是因为有个同学问我,(-9)%3和9%(-3)相等吗,一眼就能看出来相等,不过其实也有人会有疑惑,为什么?前面是9是负的,后面是3是负的,按理说结果应该不一样啊,但是实际上这个题的点就在这里了,就是让你关注正负而不去关注结果,我们想一下0有负数吗?有人写0写成-0么?不过其实我当时并没有这么说,我说的是这种题最好做了,只需要把不会的代码放进编译器里,然后运行一下查看结果即可。。。。后面想了一下,这样有点过分了,所以准备详细说一下,其实也详细不到哪去。其实取余,就是算前面的数除后面的数,剩下的余数。比如说9%2就是1,而9%3是0,这都是根据9/3,9/2来算的。然后我们来看一下正负,这个就跟9/3,9/2不太一样了,虽然结果是一样的,但是关于正负是不一样的。正数%(不管正负)=正负数%(不管正负)=负这个正负主要是看被取余数的正负,跟后面的没啥关系。可以简单的看一下代码:<?php echo '(-9)'.'%2='.(-9)%2; echo "<br>"; echo '9'.'%2='.(9)%2; echo "<br>"; echo '9'.'%(-2)='.(9)%(-2); echo "<br>"; echo '(-9)'.'%(-2)='.(-9)%(-2);输出 结果 肯定跟我们前面的一样啦,要不我在写文章的时候就会改了,嘿嘿。其实初学者应该会有疑惑,但是如果已经学了好久的人应该是没有什么问题的,不过有问题看了上面的内容也应该没有问题了。
2020年12月26日
3 阅读
0 评论
0 点赞
2020-12-25
python 递归函数
其实说白了,就是写递归写上瘾了,昨天写了 JavaScript的递归函数 ,今天写一下python递归函数。如果看过昨天的文章的话,今天的就很容易理解了,递归函数,其实虽然名字看着高大上,但实际上就是自己调用自己而已。在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。在函数内部调用其他函数不是函数的嵌套,而在函数内部定义子函数才是函数的嵌套。简单的看一下在python中递归函数的特性吧: 1、递归函数必须有一个明确的结束条件。 2、每进入更深一层的递归时,问题规模相对于上一次递归都应减少 3、相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。 4、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)def f(n): if n==1: return 1 else: return (f(n-1)+1)*2 print(f(10))简单看一个小例子,我们计算 f(n) = (f(n-1) + 1)*2 这个的值,如果平常写的话,不使用哦个递归,那么就需要一直调用这个函数来进行计算,而我们使用递归的话,就是在函数内部不断调用,然后返回函数结果,我们来看一下python中递归函数的优缺点。优点其实很明确了,就是定义简单,篇幅少,本来需要很多行的代码,只需要几行就可以了。而缺点其实也很明显,如果我们设置的最终结束条件不是很好的话,那么会占用很多的资源来进行计算。很容易导致栈的溢出。但实际上其实递归函数的思路是非常明确的, 递归值的返回时返回到上一层,而其他的层在执行的过程中,均处于等待答案的过程中。其实简单来说,就是一个自己不断调用自己的过程。
2020年12月25日
2 阅读
0 评论
0 点赞
2020-12-24
JavaScript 递归函数
浅谈JavaScript中的递归函数,递归函数,其实就是函数调用自身,然后通过条件来进行返回值。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。通俗来说,JavaScript中递归函数就是为了减少代码数量,举个例子。算阶乘,我们如果不适用递归的话,要写很长一串的代码,不断进行调用就行了,而我们写递归,则只需要写一次。function aaa () { xxxxxxx }然后不断aaa(1)aaa(2)aaa(3)aaa(4)来进行运算。而我们使用递归的话,也就是function aaa(){ if (xxx){ aaa(xxx) } else { return xxxx } } 举一个真实的例子 function f(num) { if(num <= 1) { return 1 } else { return f(num-1)*num } } console.log('10!= '+ f(10)) // 10!= 3628800其实也就是利用函数不断调用,来进行代码的重复利用。本来如果不适用递归函数的话,那么我们不是写循环就是写一个函数然后不断调用,而我们如果使用递归函数的话,就会变成函数里面调用函数,然后调用的函数再调用函数,直到满足条件之后return回去即可。但实际上实际开发中,递归用到的还是比较少的,因为它很占资源。我们平常的代码,都是从上到下执行的,一个执行完JavaScript会利用垃圾回收机制来进行回收内存,然后执行下一个代码,而递归则会使这个函数保留下来,然后等待下个函数,周而复始,一直到满足return条件才开始挨个结束运行。所以我们在运用递归函数的时候,要保证一定要有结束的语句,并且一定可以满足,否则会陷入死循环中,一直调用。。。然后再就是在函数中要调用本函数,要不那里是递归呢?
2020年12月24日
3 阅读
0 评论
0 点赞
2020-12-23
javascript 运算符+=和-=
浅谈JavaScript中运算符+=以及-=遇到的问题。本来其实我觉得我对这个运算符之类的应该是没有什么问题的,但是没想到做题的时候发现还是有问题的,问题就出在了运算符+=以及-=。具体题目:这道题首先答案是D,但是其实打眼一看的话,感觉CD其实是一样的,但是由于这是一道单选题,所以只能选一个。。我当时其实是以为题出错了,没想到仔细了解发现C确实是有问题的。首先大家都知道+-都是运算符,但是他们还是有区别的,不仅仅是一个是加一个是减。+号运算符除了两个数相加以外,还能做到两个字符串相连,或者别的数据类型和字符串相连。比如说1+“a”会编程1a,而-号运算符呢?则会编程NaN。。所以+=其实正确的写法应该是表示相加或相连并赋值。这样就对了,可以说这道题其实出的不太严谨,也可以说就是故意的。。。。不过我猜这道题如果AB中改对一个然后改成多选,可能大多数人都会直接选A/B然后跟上CD。。简单说一下我当时的思路,既然JavaScript运算符的题,那么我首先就是去百度查询了一下JavaScript运算符,发现其实应该是没啥问题的啊,然后去52发帖子问了一下,大佬还是很快就给了解答。。。其实问题就是出在了+号不光可以相加还可以相连。我当时是通过f12在console测试的,然后首先定义一个a=1,之后再测试a+=1,结果为2,然后测试a-=“a”发现结果为NaN,之后再测试a+=“a”发现结果为NaNa。所以 其实当+号运算符两边为数字的话,那么结果就为数字,但是如果有一方为字符串,那么+号运算符则会变成连接符 。但是假如我一边是数字,一边是字符串,但是字符串的内容为数字呢?哈哈,结果其实还是字符串相连,并没有出现想象中的相加。 总结一下,如果+号的左右都为数字,那么结果为相加,但是如果有一方为字符串的话,就会变成字符串的相连。有什么疑问的话,可以在评论区留言,我会在看到的第一时间进行回复的。
2020年12月23日
2 阅读
0 评论
0 点赞
2020-12-22
浅谈javascript的标识符
浅谈JavaScript中标识符的一些规则,其实说到这个,还是因为之前做的题的缘故,所以才在这里说一下JavaScript中的标识符。看过昨天发的文章,应该都知道最近在与传智进行作业的爬取, python 爬取传智播客作业题目然后呢,因为只能爬出来自己的答案,害怕出问题,所以没有保存起来,然后爬出来的数据自己挨个先做后查的,不过当时做到关于标识符的时候,还是有点疑惑的。6.以下属于合法标识符的是()。A.varB.77nameC.__name__D.$name其实我有疑惑的就是A选项var了,之所以有疑问,是因为最近在写python爬虫嘛,而python其实可以用一些关键字命名的,比如说我当时用str命名,然后就一直报错。。。。。不过是因为我在写循环,如果不循环的话没问题。所以我当时觉得A也行。结果没想到不行。后来自己尝试了一下发现报错了。。。。。很尴尬,所以好好看了一下关于标识符的知识。首先, JavaScript中标识符可以有数字,字母,_和$四种。而虽然标识符可以由这四个组成,但是并不是每一个都能当作开头的,其实也就是数字不能当作开头罢了。然后再就是不能是JavaScript中的保留字和关键字,比如说var之类的 。其实最容易的办法就是自己想一个名字, 全部都是自己想的一般就不会出错了,特别是使用拼音,绝对不会出错 。。。。不过其实为了好看,所以标识符还是有命名规则的( 非强制 ),驼峰命名法,首字母小写,然后每个单词的首字母大写,比如说myUserName,myBaby等,不过其实也就是为了好看而已,你如果喜欢全大写全小写也是没人管你的。不过JavaScript其实也是大小写敏感的,不要想出一出是一出。如果有什么不懂的,可以在评论区留言,我会在看到的第一时间进行回复的。
2020年12月22日
3 阅读
0 评论
0 点赞
2020-12-21
python 爬取传智播客作业题目
今天发一下我之前写了一会的关于爬取传智播客习题的爬虫。目前来说,其实是因为最近期末,然后想要爬取一下题库里的题,然后做一个题库出来,之所以这样,是因为老师并没有公布答案!不过没想到传智播客居然是用JavaScript渲染的页面,而非普通的html,难度很大对于初学者。目前找到了想要的内容但是并不知道该如何爬取。首先在这里右键查看一下源代码,之所以如此,是因为我本来以为可以直接通过这里获取链接跳转的内容,然后爬取出来,但是没想到并没有,并且其实传智里面的页面代码是通过js渲染的,所以应该通过header请求来获取数据。然后使用f12查看Network,刷新页面,在寻找请求获取内容的时候,发现请求名为list?status=&name=&pageNumber=1&pageSize=10&courseId=5b1d1d6e854e408b89043bb29c604313&type=1&t=1608267215390这个的请求,里面的preview中,有想要获取到的内容{"code":null,"errorMessage":null,"resultObject":{"items":[{"paper_tpl_name":"第七章DOM主观题","start_time":"2020-12-08 20:09:00","end_time":"2020-12-31 20:09:00","status":2,"busyworkId":"655d240321db424ea37f4b55c2f132d2","studentId":"e7b9174113e84748a996adeca8e67cef","score":null,"startEndStatusText":"进行中"},{"paper_tpl_name":"第七章DOM 客观题","start_time":"2020-12-08 20:08:00","end_time":"2020-12-31 20:08:00","status":3,"busyworkId":"2b5062135cf84e8f9dfe2a77e06d2123","studentId":"e7b9174113e84748a996adeca8e67cef","score":null,"startEndStatusText":"进行中"},{"paper_tpl_name":"第四章 函数 客观题","start_time":"2020-11-29 10:43:00","end_time":"2020-12-31 10:43:00","status":3,"busyworkId":"da8bd6ad0a63474e9fff0b5310d942b1","studentId":"e7b9174113e84748a996adeca8e67cef","score":null,"startEndStatusText":"进行中"},{"paper_tpl_name":"第四章 主观题","start_time":"2020-11-29 10:41:00","end_time":"2020-12-31 10:41:00","status":2,"busyworkId":"408aacdac7da41038fbc13ce327d43ce","studentId":"e7b9174113e84748a996adeca8e67cef","score":null,"startEndStatusText":"进行中"},{"paper_tpl_name":"第三章数组主观题","start_time":"2020-11-02 14:36:00","end_time":"2021-01-03 14:36:00","status":2,"busyworkId":"247a6f8b309b4e9c8fe7880b5b30198f","studentId":"e7b9174113e84748a996adeca8e67cef","score":null,"startEndStatusText":"进行中"},{"paper_tpl_name":"第三章数组客观题","start_time":"2020-11-02 14:35:00","end_time":"2021-01-02 14:35:00","status":3,"busyworkId":"663eee4dbe5e4705923d89519461610a","studentId":"e7b9174113e84748a996adeca8e67cef","score":null,"startEndStatusText":"进行中"},{"paper_tpl_name":"第二章js第二章主观题","start_time":"2020-10-12 15:11:00","end_time":"2021-01-02 15:11:00","status":2,"busyworkId":"f47eea78f49c4682bb80b24f99fa6ea9","studentId":"e7b9174113e84748a996adeca8e67cef","score":null,"startEndStatusText":"进行中"},{"paper_tpl_name":"第二章js语法客观题","start_time":"2020-10-12 15:03:00","end_time":"2021-01-02 15:03:00","status":3,"busyworkId":"43aaa769160e4396b5be93f422e793c4","studentId":"e7b9174113e84748a996adeca8e67cef","score":null,"startEndStatusText":"进行中"},{"paper_tpl_name":"第一章习题","start_time":"2020-09-13 20:59 :00","end_time":"2020-12-31 20:59:00","status":2,"busyworkId":"166955876c3b4bcf8ef39976dfe60e76","studentId":"e7b9174113e84748a996adeca8e67cef","score":null,"startEndStatusText":"进行中"}],"totalCount":9,"totalPageCount":1,"pageSize":10,"currentPage":1},"success":true}然后发现这里面的内容是一个id,然后发现下面的题目的链接就是这个页面加上id即可。所以其实通过header请求头,然后提取出来的josn文件,再进行解析即可。之后再获取题目里的内容即可。其实这个我想了好久,因为当时不知道获取到的内容是json,以为是字符串,然后通过正则来获取数据的时候,发现只能获取第一个匹配的,然后后来问了大佬才知道这是json的数据。其实他这个 是通过json传递的数据,然后里面是字典的镶嵌。importrequests_html importre importjson url="http://stu.ityxb.com/back/bxg/my/busywork/findStudentBusywork?busyworkId=166955876c3b4bcf8ef39976dfe60e76&t=1608445306731" url2='http://stu.ityxb.com/lookPaper/busywork/166955876c3b4bcf8ef39976dfe60e76' headers={ 'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/87.0.4280.88Safari/537.36', 'Cookie':'' } res=requests_html.HTMLSession() r=res.get(url,headers=headers) #withopen("js.txt",'r',encoding='utf-8')asj: #neirong=j.read() text=json.loads(r.text) text_xz=text['resultObject']["danxuan"]['lists'] neirong={} #print(len(text_xz)) changdu=len(text_xz) foriinrange(1,len(text_xz)+1): wenzi=text_xz.pop(0) text_xx=wenzi["questionOptionList"] #id=changdu-i+1 text_tm=str(i)+'.'+wenzi["questionContentText"] print(text_tm) withopen('jsdx.text','a',encoding='utf-8')asf: f.write('\n'+text_tm) fornuminrange(len(text_xx)): xx_dan=text_xx.pop(0) xx_nei=xx_dan['text'] withopen('jsdx.text','a',encoding='utf-8')asf: f.write('\n'+xx_nei)这里就能提取单选的内容了,然后再就是获取全部的内容就行了,但是发现有的作业里面只有单选或者只有判断之类的,然后我们可以通过try来进行报错处理,这样即使没有这个选项,也能运行下去。importrequests_html importre importjson url="http://stu.ityxb.com/back/bxg/my/busywork/findStudentBusywork?busyworkId=166955876c3b4bcf8ef39976dfe60e76&t=1608445306731" url2='http://stu.ityxb.com/back/bxg/my/busywork/findStudentBusywork?busyworkId=655d240321db424ea37f4b55c2f132d2&t=1608476055939' headers={ 'User-Agent':'', 'Cookie':'' } res=requests_html.HTMLSession() r=res.get(url2,headers=headers) #withopen("js.txt",'r',encoding='utf-8')asj: #neirong=j.read() text=json.loads(r.text) text_xz=text['resultObject']["danxuan"]['lists'] neirong={} #print(len(text_xz)) foriinrange(1,len(text_xz)+1): wenzi=text_xz.pop(0) text_xx=wenzi["questionOptionList"] #id=changdu-i+1 text_tm=str(i)+'.'+wenzi["questionContentText"] print(text_tm) withopen('jsdx.text','a',encoding='utf-8')asf: f.write('\n'+text_tm) fornuminrange(len(text_xx)): xx_dan=text_xx.pop(0) xx_nei=xx_dan['text'] withopen('jsdx.text','a',encoding='utf-8')asf: f.write('\n'+xx_nei) withopen('jsdx.text','a',encoding='utf-8')asf: f.write('\n'+'答案:') try: text_xz=text['resultObject']["duoxuan"]['lists'] foriinrange(1,len(text_xz)+1): wenzi=text_xz.pop(0) text_xx=wenzi["questionOptionList"] #id=changdu-i+1 text_tm=str(i)+'.'+wenzi["questionContentText"] print(text_tm) withopen('jsdx.text','a',encoding='utf-8')asf: f.write('\n'+text_tm) fornuminrange(len(text_xx)): xx_dan=text_xx.pop(0) xx_nei=xx_dan['text'] withopen('jsdx.text','a',encoding='utf-8')asf: f.write('\n'+xx_nei) withopen('jsdx.text','a',encoding='utf-8')asf: f.write('\n'+'答案:') except: pass try: text_pd=text['resultObject']["panduan"]['lists'] foriinrange(1,len(text_pd)+1): wenzi=text_pd.pop(0) #id=changdu-i+1 text_tm=str(i)+'.'+wenzi["questionContentText"] print(text_tm) withopen('jsdx.text','a',encoding='utf-8')asf: f.write('\n'+text_tm+'\n'+'答案:') except: pass try: text_tk=text['resultObject']["tiankong"]['lists'] foriinrange(1,len(text_tk)+1): wenzi=text_tk.pop(0) text_tm=str(i)+'.'+wenzi["questionContentText"] print(text_tm) withopen('jsdx.text','a',encoding='utf-8')asf: f.write('\n'+text_tm+'\n'+'答案:') except: pass try: text_jd=text['resultObject']["jianda"]['lists'] foriinrange(1,len(text_jd)+1): wenzi=text_jd.pop(0) text_tm=str(i)+'.'+wenzi["questionContentText"] print(text_tm) withopen('jsdx.text','a',encoding='utf-8')asf: f.write('\n'+text_tm+'\n'+'答案:') except: pass这就是python爬取传智播客的作业题目的完整代码了,不过问题是需要复制链接,不过还算可以吧,以后如果改进的话会贴出来的。不过其实很容易,就是解析前一页的数据,把里面包含链接的内容提取出来,然后再传入for循环即可,如果想要尝试的话可以自行测试,有不懂的随时问我。如果有什么不会的可以在评论区留言,我会在看到的第一时间回复的。
2020年12月21日
2 阅读
0 评论
0 点赞
1
...
5
6
7
...
12