变更
This commit is contained in:
Generated
+3
@@ -0,0 +1,3 @@
|
|||||||
|
# 默认忽略的文件
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
Generated
+58
@@ -0,0 +1,58 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CsvFileAttributes">
|
||||||
|
<option name="attributeMap">
|
||||||
|
<map>
|
||||||
|
<entry key="\C语言程序设计(上).北京理工大学.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\python爬虫\python爬虫练习\data.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value=":" />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\python爬虫\python爬虫练习\scrapy_practise\teachers.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="	" />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\python爬虫\python爬虫练习\wangyizhaopin\wyzp.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\python爬虫\python爬虫练习\wangyizhaopin\wyzp1.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\python爬虫\python爬虫练习\彩票网站\caipiao\双色球.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\python爬虫\scrapy\scrapy02\shuangseqiu.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
</map>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
Generated
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding">
|
||||||
|
<file url="file://$PROJECT_DIR$/python爬虫/python爬虫练习/data.csv" charset="GBK" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
+39
@@ -0,0 +1,39 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="PyCompatibilityInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
||||||
|
<option name="ourVersions">
|
||||||
|
<value>
|
||||||
|
<list size="2">
|
||||||
|
<item index="0" class="java.lang.String" itemvalue="2.7" />
|
||||||
|
<item index="1" class="java.lang.String" itemvalue="3.13" />
|
||||||
|
</list>
|
||||||
|
</value>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
<inspection_tool class="PyPep8Inspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||||
|
<option name="ignoredErrors">
|
||||||
|
<list>
|
||||||
|
<option value="W292" />
|
||||||
|
<option value="W605" />
|
||||||
|
<option value="E722" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||||
|
<option name="ignoredErrors">
|
||||||
|
<list>
|
||||||
|
<option value="N803" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
||||||
|
<option name="ignoredIdentifiers">
|
||||||
|
<list>
|
||||||
|
<option value="random.random.*" />
|
||||||
|
<option value="list.*" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
</profile>
|
||||||
|
</component>
|
||||||
Generated
+12
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.12 (base)" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_22" project-jdk-name="D:\ProgramTools\Anaconda" project-jdk-type="Python SDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
<component name="PythonCompatibilityInspectionAdvertiser">
|
||||||
|
<option name="version" value="3" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
Generated
+8
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/python.iml" filepath="$PROJECT_DIR$/python.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
Generated
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,928 @@
|
|||||||
|
mmdjiji,其实总体看老师讲得很棒,知识点涵盖全面,美中不足的是老师的代码规范性欠佳,例子里都直接写main(){}而不是int main(){}。其实这个返回值我们都知道与逻辑无关,是给操作系统的返回值。不过我有一个刚入门C的同学就直接把这个代码抄笔记上了,之后他的代码都是不带int和return0的,我后来让他加上的。其实这种习惯性的东西作为老师一定要规范。 另外,其实无论作业题和考试题,出题都不太规范,输入输出格式和输入输出样例不是一回事,在这里完全混淆。我做...,发表于 2019-11-18,第11次开课,123
|
||||||
|
|
||||||
|
澄碧钓徒,部分OJ测试用例不太靠谱,初学慎选,发表于 2019-02-27,第9次开课,27
|
||||||
|
|
||||||
|
无畏之灵,有的地方说错的呢,根本就没办法看,紧张啥?老师您,我作为一个小白很慌。,发表于 2019-03-07,第10次开课,13
|
||||||
|
|
||||||
|
zzti201715044230,去哪里下载编程程序,发表于 2019-01-19,第9次开课,9
|
||||||
|
|
||||||
|
HFUT2017210202黄壬癸,老师讲的很好,简明易懂,让我的许多问题都得到了解决,发表于 2018-06-03,第8次开课,7
|
||||||
|
|
||||||
|
newtime126,在线测试不靠谱!!!!!!!!!!!!!!!!搞死人,发表于 2019-09-28,第11次开课,6
|
||||||
|
|
||||||
|
mooc50792904130885260,老师讲的好详细啊,当初我们的老师就只照着PPT讲,我们一脸懵, 现在被C l老师训斥,就只有来学习了,恰巧老师这么详细,有救了,发表于 2019-03-25,第10次开课,6
|
||||||
|
|
||||||
|
wuli大叔,老师讲的很好,但是我觉的不适合初学者学习,,发表于 2019-03-13,第10次开课,6
|
||||||
|
|
||||||
|
bit1120181384郭昊东,嗯,老师讲的很细致,对于一些细节讲得很到位,但对于初学者还是有一点吃力,希望能加入一些关于程序各个部分的讲解。,发表于 2018-10-07,第9次开课,5
|
||||||
|
|
||||||
|
BIT63011926-1120192816陆佳琦,我累了,我真的累了,发表于 2019-11-17,第11次开课,4
|
||||||
|
|
||||||
|
HFUT2017217302冷,很好很棒C语言好难,发表于 2018-04-29,第8次开课,4
|
||||||
|
|
||||||
|
HFUT2018217501,老师讲的很好,理解的很到位,通俗易懂。,发表于 2019-05-21,第10次开课,2
|
||||||
|
|
||||||
|
BIT09041802郑倩倩1120180858,老师讲课很详细,听得也很明白,发表于 2019-01-12,第9次开课,2
|
||||||
|
|
||||||
|
HFUT2017214056耿丽,老师讲的很详细,通俗易懂,发表于 2018-05-12,第8次开课,2
|
||||||
|
|
||||||
|
2022010912027-陈阳,虽然老师课程讲的并不完美,但胜在细致、耐心,我们老师一节课能讲一章多的知识点,还在我没怎么听懂的情况下布置作业。要不是老师讲课的顺序和我们老师重合度高,我还真不知道怎么在知识点都没记住的前提下写作业。老师还留下了课件,注重例题的讲解,我很满意。,发表于 2022-09-23,第17次开课,1
|
||||||
|
|
||||||
|
BIT1120212815杨巡岳,通过学习C语言程序设计这门学科,我感觉自身的逻辑思维能力得到了提高,同时也对C语言这门面向过程的高级语言有了更深刻的了解。,发表于 2022-03-05,第16次开课,1
|
||||||
|
|
||||||
|
BIT1120203185张艺林,都很好,支持,发表于 2021-05-23,第14次开课,1
|
||||||
|
|
||||||
|
BIT-1320201043,非常好,很有进步,发表于 2021-05-16,第14次开课,1
|
||||||
|
|
||||||
|
BIT-1120192310,课程很不错,给了我很大大的启发,发表于 2019-11-17,第11次开课,1
|
||||||
|
|
||||||
|
BIT1120191170陈羿30011904,课程讲解很详细,能够很好的理解,特别好的方法教程,发表于 2019-11-16,第11次开课,1
|
||||||
|
|
||||||
|
依夢光輝,总的来说还可以,就是讲授ppt时没有鼠标光标指示,有些时候会有点乱。,发表于 2019-07-24,第10次开课,1
|
||||||
|
|
||||||
|
HFUT2018218551leng,老师讲得很好,细致且清晰明了。,发表于 2019-05-26,第10次开课,1
|
||||||
|
|
||||||
|
jason_cen,这是个好课程,就是做题的时候有点不太懂题意。,发表于 2019-05-12,第10次开课,1
|
||||||
|
|
||||||
|
BIT潘康1120180539,感觉非常不错,发表于 2018-11-20,第9次开课,1
|
||||||
|
|
||||||
|
SEU-研76班-九-212473-陈驰,66666666,发表于 2018-05-01,第8次开课,1
|
||||||
|
|
||||||
|
学员0de9kada78085893681339789,课件内容与题目结合在一起,发表于 2023-02-16,第18次开课,0
|
||||||
|
|
||||||
|
bit1120221392刘永鑫,课程非常好,发表于 2023-01-09,第17次开课,0
|
||||||
|
|
||||||
|
bit1120221540赵思凯,非常nice!,发表于 2023-01-07,第17次开课,0
|
||||||
|
|
||||||
|
bit1120223118窦安桐,我觉得很好,发表于 2023-01-06,第17次开课,0
|
||||||
|
|
||||||
|
bit1120222301罗翔宇,6666666哇!超出预期了,发表于 2023-01-02,第17次开课,0
|
||||||
|
|
||||||
|
bit1120222879康政宇,学习很有收获,发表于 2022-12-31,第17次开课,0
|
||||||
|
|
||||||
|
bit1120221263陈若冰,课程内容很好。,发表于 2022-12-31,第17次开课,0
|
||||||
|
|
||||||
|
软工猎犬,在寒假期间自己想学习一下C语言就非常不错,发表于 2022-12-23,第17次开课,0
|
||||||
|
|
||||||
|
bit1120221084吴雨泽,课讲的很好,发表于 2022-12-14,第17次开课,0
|
||||||
|
|
||||||
|
汐卿浣晟,很详细!!!,发表于 2022-11-28,第17次开课,0
|
||||||
|
|
||||||
|
BIT30622201高伊彤1120222890,可以扫除很多知识盲区,发表于 2022-11-27,第17次开课,0
|
||||||
|
|
||||||
|
bit1120222701王嘉炜,由浅入深,精辟透彻,发表于 2022-11-27,第17次开课,0
|
||||||
|
|
||||||
|
bit1120221091李琰泽,教的特别好,发表于 2022-11-27,第17次开课,0
|
||||||
|
|
||||||
|
bit1120221974朱文敏,很好!深入浅出!,发表于 2022-11-26,第17次开课,0
|
||||||
|
|
||||||
|
bit1120222770彭园媛,感谢老师们的指导,受益匪浅,让我在学校线下课程之余可以通过这个课程进行预习和复习。,发表于 2022-11-26,第17次开课,0
|
||||||
|
|
||||||
|
Tyust202214150704范朝兴,很好,特别好,发表于 2022-11-25,第17次开课,0
|
||||||
|
|
||||||
|
bit1120221075吴晗晗,北理工的C语言比我预想的要好!内容覆盖也比较全面,不过需要结合书一起看!,发表于 2022-11-25,第17次开课,0
|
||||||
|
|
||||||
|
bit1120220904贺健恒,非常好,学到了很多,发表于 2022-11-22,第17次开课,0
|
||||||
|
|
||||||
|
BIT1120221255应宋超,收获很多,解决了无数疑难杂症,发表于 2022-11-21,第17次开课,0
|
||||||
|
|
||||||
|
bit20223269张浩哲,太好了!!,发表于 2022-11-20,第17次开课,0
|
||||||
|
|
||||||
|
bit1120222292曾玉婷,系统有条理,老师授课很清晰!,发表于 2022-11-20,第17次开课,0
|
||||||
|
|
||||||
|
bit1120201315张园园,特别好,很有收获,发表于 2022-11-13,第13次开课,0
|
||||||
|
|
||||||
|
bit1120223428夏露语,至少输入5个字,发表于 2022-10-30,第17次开课,0
|
||||||
|
|
||||||
|
削肾客的救赎k1258413075254379917,讲的很清楚,要是能纠正题目里的错误就更好了,发表于 2022-10-20,第17次开课,0
|
||||||
|
|
||||||
|
爱我所爱ykt14582913825245196,课程很多好,继续学习中,谢谢北京理工大学的老师。,发表于 2022-10-16,第17次开课,0
|
||||||
|
|
||||||
|
刘骏燊,ppt上的代码经常有很多错误,发表于 2022-10-14,第17次开课,0
|
||||||
|
|
||||||
|
bit1120222302郭文涛,通过视频学习和课后练习的巩固,我认为这门课程对我学习计算机有很大的帮助,发表于 2022-10-11,第17次开课,0
|
||||||
|
|
||||||
|
renfei0325,百年工程 精品工程,发表于 2022-10-04,第17次开课,0
|
||||||
|
|
||||||
|
bit1120221082 谢冀豪,我认为这期C语言学习对巩固基础很有帮助,教学进度不快,题目不难,但循序渐进,容易上手,虽说是8年前的视频,放在现在也可称之为精品,发表于 2022-09-26,第17次开课,0
|
||||||
|
|
||||||
|
BIT1120222882刘烁,好的很好得很,发表于 2022-09-18,第17次开课,0
|
||||||
|
|
||||||
|
BIT1120222828吴东洋,十分有用,很好,发表于 2022-09-17,第17次开课,0
|
||||||
|
|
||||||
|
bit1120223120左思博,可真的很好,发表于 2022-09-16,第17次开课,0
|
||||||
|
|
||||||
|
bit1120223550温诗琛,授课内容非常好,发表于 2022-09-11,第17次开课,0
|
||||||
|
|
||||||
|
庶影庭,老师讲的很清晰,发表于 2022-09-03,第17次开课,0
|
||||||
|
|
||||||
|
洛师21地信张宇星,课程结构内容非常好,老师讲授逻辑性强,发表于 2022-08-25,第15次开课,0
|
||||||
|
|
||||||
|
BIT1120211672,非常的有用,发表于 2022-06-27,第16次开课,0
|
||||||
|
|
||||||
|
Insistencek1260042046499972473,老师讲得很好,发表于 2022-06-27,第12次开课,0
|
||||||
|
|
||||||
|
mooc50843742491079360,很详细是不错的课,发表于 2022-06-23,第16次开课,0
|
||||||
|
|
||||||
|
BIT1120212701,总体说来我还是觉得不错的,发表于 2022-06-11,第16次开课,0
|
||||||
|
|
||||||
|
唐少鹏吖,还行吧哈哈哈哈哈哈,发表于 2022-06-07,第16次开课,0
|
||||||
|
|
||||||
|
BIT 2125 1120213138 于茜,He Hal,发表于 2022-05-29,第16次开课,0
|
||||||
|
|
||||||
|
BIT1120211809黄睿勤,高 好 简 精 妙,发表于 2022-05-29,第16次开课,0
|
||||||
|
|
||||||
|
bit23122101-1120211049,方式丰富,内容精致,发表于 2022-05-26,第16次开课,0
|
||||||
|
|
||||||
|
bit2110-1120213498蒋孟汐,非常好的课程,发表于 2022-05-25,第16次开课,0
|
||||||
|
|
||||||
|
bit23122101-1120212732-李响,希望可以把课上的程序用文本放出来,发表于 2022-05-11,第16次开课,0
|
||||||
|
|
||||||
|
tzu210345121周佳玟,GOOD!,发表于 2022-04-06,第16次开课,0
|
||||||
|
|
||||||
|
BIT06012102-1120211178-杨祖威,题目较多,内容充实,发表于 2022-04-03,第16次开课,0
|
||||||
|
|
||||||
|
、 ︶多重人格 〃殤ペ叻°,非常非常的nice,发表于 2022-04-02,第16次开课,0
|
||||||
|
|
||||||
|
BIT86071201-1820211046-2021谢升融,老师不知道,我们看不到她鼠标指的位置,发表于 2022-03-31,第16次开课,0
|
||||||
|
|
||||||
|
BIT张弛楷1120211652,还教你迅速和毒素护卫队,发表于 2022-03-29,第16次开课,0
|
||||||
|
|
||||||
|
tzu210345111徐天骏,hhhhh,发表于 2022-03-26,第16次开课,0
|
||||||
|
|
||||||
|
BIT-63012117-1120213595-林翔,真的很不错,发表于 2022-03-26,第16次开课,0
|
||||||
|
|
||||||
|
BIT1120213243甄利帆,1654165,发表于 2022-03-14,第15次开课,0
|
||||||
|
|
||||||
|
mooc108747115809546083,知识含量高,老师讲的好,发表于 2022-03-10,第16次开课,0
|
||||||
|
|
||||||
|
智道三株,老师讲的很详细.,发表于 2022-03-05,第16次开课,0
|
||||||
|
|
||||||
|
Eddyiy,Good!,发表于 2022-03-05,第16次开课,0
|
||||||
|
|
||||||
|
tzu210341344王思思,可以学到更多知识,发表于 2022-03-04,第16次开课,0
|
||||||
|
|
||||||
|
BIT-1120211800-龙驰睿,牛牛牛牛牛,发表于 2022-03-03,第16次开课,0
|
||||||
|
|
||||||
|
tzu朱文萱210345114,老师讲的很好,发表于 2022-03-03,第16次开课,0
|
||||||
|
|
||||||
|
BIT-钟逸-1120210651,好好好好好,发表于 2022-03-02,第16次开课,0
|
||||||
|
|
||||||
|
唐健,老师讲解得很好,发表于 2022-03-01,第16次开课,0
|
||||||
|
|
||||||
|
bit1120212444岑心怡,great,发表于 2022-02-27,第15次开课,0
|
||||||
|
|
||||||
|
火龙火马,哇!超出预期了,发表于 2022-02-14,第1次开课,0
|
||||||
|
|
||||||
|
mooc118107729644999170,非常nice 4.7以前的知识我都在B站上看过了,在这又重新看一遍,收获满满!通俗易懂,老师十分认真。,发表于 2022-01-22,第15次开课,0
|
||||||
|
|
||||||
|
mooc113526491927405569,内容详细,非常棒,发表于 2022-01-20,第15次开课,0
|
||||||
|
|
||||||
|
BIT1120211723陈久宸,视频画质太差了,发表于 2022-01-11,第15次开课,0
|
||||||
|
|
||||||
|
bit1120213565杨恒,很好的课程,发表于 2022-01-10,第15次开课,0
|
||||||
|
|
||||||
|
bit1120212157张书维,感谢各位老师的倾心教学!,发表于 2022-01-10,第15次开课,0
|
||||||
|
|
||||||
|
bit1120212534蔺锦鸿,老师讲的很好,我收获颇丰,发表于 2022-01-10,第15次开课,0
|
||||||
|
|
||||||
|
bit徐若嘉1120212439,技巧性提高了,发表于 2022-01-09,第15次开课,0
|
||||||
|
|
||||||
|
BIT30622101李祉瑶1120210647,课程很精彩,发表于 2022-01-09,第15次开课,0
|
||||||
|
|
||||||
|
bit1120211355方杨婧雯,学到了很多,发表于 2022-01-09,第15次开课,0
|
||||||
|
|
||||||
|
BIT1120213279刘佳群,特别好!继续加油!,发表于 2022-01-06,第15次开课,0
|
||||||
|
|
||||||
|
mooc97803830463577348,很好 很喜欢 有帮助很大,发表于 2022-01-04,第15次开课,0
|
||||||
|
|
||||||
|
大海1977,讲得明白易懂!举例形象!过程清晰!,发表于 2021-12-29,第15次开课,0
|
||||||
|
|
||||||
|
ykt75867076565554914,非常喜欢。,发表于 2021-11-24,第15次开课,0
|
||||||
|
|
||||||
|
荔苏芯,很好,很棒,很厉害,发表于 2021-11-20,第15次开课,0
|
||||||
|
|
||||||
|
1546585734,学到了不少,发表于 2021-11-17,第15次开课,0
|
||||||
|
|
||||||
|
mooc106527291584286384,上课内容非常的充分,有问题,很好,发表于 2021-11-12,第15次开课,0
|
||||||
|
|
||||||
|
左晔化能A2005-2020010346,我可太爱这个老师了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!真的不错,实名推荐!,发表于 2021-11-08,第15次开课,0
|
||||||
|
|
||||||
|
CUIT2021051136董晋胜,服了,测验不给正确答案不说,每次做完都不告诉哪个错了,让学生像无头苍蝇一样乱碰有意义吗?,发表于 2021-10-25,第15次开课,0
|
||||||
|
|
||||||
|
小丑³,好评,老师教的挺好。,发表于 2021-10-17,第15次开课,0
|
||||||
|
|
||||||
|
BIT1120212084方业皓,下次开课加个字幕,带助听器难受的要死,发表于 2021-10-12,第15次开课,0
|
||||||
|
|
||||||
|
独眼霹雳,很细致,适合初学者。,发表于 2021-09-16,第15次开课,0
|
||||||
|
|
||||||
|
东子20190704,深入浅出地讲解,非常容易理解。,发表于 2021-09-06,第15次开课,0
|
||||||
|
|
||||||
|
张莉华,很好,老师讲的很细!,发表于 2021-08-31,第15次开课,0
|
||||||
|
|
||||||
|
BJFU物联网20文美尧,老师讲的很好,发表于 2021-08-18,第12次开课,0
|
||||||
|
|
||||||
|
carry啊,很好 循序渐进,发表于 2021-07-28,第12次开课,0
|
||||||
|
|
||||||
|
BIT-2027-1120202432,希望永远不要关闭这个学期,发表于 2021-07-19,第14次开课,0
|
||||||
|
|
||||||
|
21377153-李卓远,清晰直白,受益良多,发表于 2021-07-04,第14次开课,0
|
||||||
|
|
||||||
|
游戏人生88,精品课程,从未被超越!,发表于 2021-07-03,第14次开课,0
|
||||||
|
|
||||||
|
Jeffery-Van,超级棒的课程,发表于 2021-06-28,第14次开课,0
|
||||||
|
|
||||||
|
bit-1120201540-张程-63012020,好!!!!,发表于 2021-06-26,第14次开课,0
|
||||||
|
|
||||||
|
BIT1820201054朱沅泽,内容简单易懂 非常棒,发表于 2021-06-25,第14次开课,0
|
||||||
|
|
||||||
|
BIT-1120202135-李宇寰-63012020,挺好的,有收获,发表于 2021-06-15,第14次开课,0
|
||||||
|
|
||||||
|
BIT1820201040 黎雍卉,老师授课方式间接易懂,很喜欢老师的教学方式。,发表于 2021-06-08,第14次开课,0
|
||||||
|
|
||||||
|
BIT 1320201121 臧仁楷,哈哈哈哈哈哈哈哈,发表于 2021-06-07,第14次开课,0
|
||||||
|
|
||||||
|
B-1089,老师讲的太好了,发表于 2021-05-20,第14次开课,0
|
||||||
|
|
||||||
|
司南sn,弥补我的不足,发表于 2021-05-18,第14次开课,0
|
||||||
|
|
||||||
|
BIT1120170404,考试截止时间与通告上不一样,发表于 2021-05-17,第14次开课,0
|
||||||
|
|
||||||
|
BIT-1120200567-旷嘉骏,111111,发表于 2021-05-16,第14次开课,0
|
||||||
|
|
||||||
|
BIT-1820201064-尚荣,不适合留学生而且complier很烦人,发表于 2021-05-16,第14次开课,0
|
||||||
|
|
||||||
|
BIT1820201074杨龙,我对教学材料和老师的教学方法很满意,发表于 2021-05-16,第14次开课,0
|
||||||
|
|
||||||
|
BIT-1120203089-邹宜秀,老师很负责,发表于 2021-05-16,第14次开课,0
|
||||||
|
|
||||||
|
BIT1320201112姜昱玮,讲授清楚明了,发表于 2021-05-15,第14次开课,0
|
||||||
|
|
||||||
|
BIT1320201046王金帅,时间紧真的,发表于 2021-05-15,第14次开课,0
|
||||||
|
|
||||||
|
BIT1820201046刘乐也,挺好的呀!,发表于 2021-05-15,第14次开课,0
|
||||||
|
|
||||||
|
BIT1320201045李宇卿,非常棒,有很大的帮助,发表于 2021-05-15,第14次开课,0
|
||||||
|
|
||||||
|
BIT 1320201048,好失望呦呦,发表于 2021-05-15,第14次开课,0
|
||||||
|
|
||||||
|
BIT_1120202934,学习很有收获,发表于 2021-05-15,第14次开课,0
|
||||||
|
|
||||||
|
BIT1820201035黄诗亿,这些材料被分成几小块,令学生可以在有趣的氛围中轻松地学习它。,发表于 2021-05-15,第14次开课,0
|
||||||
|
|
||||||
|
xdyzwq126com,english,发表于 2021-05-14,第14次开课,0
|
||||||
|
|
||||||
|
bit_63012013_1120200977,收获很大,老师讲的特别好!,发表于 2021-05-14,第14次开课,0
|
||||||
|
|
||||||
|
BIT-1120200988-孟彦辰-07162001,好好好好好好好好,发表于 2021-05-09,第14次开课,0
|
||||||
|
|
||||||
|
BIT-黄昱欣-1120200807,真不错耶,收获很大,发表于 2021-04-21,第14次开课,0
|
||||||
|
|
||||||
|
咸鱼鱼🐟,内容老了。。。。,发表于 2021-04-11,第14次开课,0
|
||||||
|
|
||||||
|
BIT1120200731方辰,课程使我对于C语言一些运算符、语句的原理结构有了更深刻的了解,发表于 2021-04-02,第14次开课,0
|
||||||
|
|
||||||
|
BIT1820201078-韩非,Good teaching.,发表于 2021-04-01,第14次开课,0
|
||||||
|
|
||||||
|
BIT-张智博-1120201891,爱了爱了!,发表于 2021-03-29,第14次开课,0
|
||||||
|
|
||||||
|
bit1120203297鲍睿智,课程讲解完整,能和课堂内容互相补充。,发表于 2021-03-29,第14次开课,0
|
||||||
|
|
||||||
|
BIT 罗亚文 1120200983,真的蛮好的,发表于 2021-03-25,第14次开课,0
|
||||||
|
|
||||||
|
BIT1120203029丁致远,感觉也许还行,发表于 2021-03-23,第13次开课,0
|
||||||
|
|
||||||
|
3-1120201979蒋志涛,okokok,发表于 2021-03-20,第14次开课,0
|
||||||
|
|
||||||
|
BIT-1120201507-63012027,哇!超出预期了,发表于 2021-03-18,第14次开课,0
|
||||||
|
|
||||||
|
BIT1120201997张李竣飞,????//?,发表于 2021-03-04,第14次开课,0
|
||||||
|
|
||||||
|
BIT1120200670窦骥桐,好好好好好,发表于 2021-03-04,第14次开课,0
|
||||||
|
|
||||||
|
BIT1120202565胡耀中,老师讲得非常详细,而且重点突出,太爱北理工的老师了!!,发表于 2021-03-03,第14次开课,0
|
||||||
|
|
||||||
|
BIT1120202080张博涵,讲解生动,条理清晰,发表于 2021-03-02,第14次开课,0
|
||||||
|
|
||||||
|
殇璃猫眼石,课程很棒。,发表于 2021-02-03,第12次开课,0
|
||||||
|
|
||||||
|
BIT1120201175郭宇轩,妙啊 我爱了这课程,发表于 2021-01-28,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120201175郭宇轩,妙啊 我爱了这课程,发表于 2021-01-28,第13次开课,0
|
||||||
|
|
||||||
|
百优解丶,要是有每个课程的作业详解就好了,发表于 2021-01-22,第13次开课,0
|
||||||
|
|
||||||
|
bit-1120201658-阳晓辉,好好好好好,发表于 2021-01-21,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120202401李亮廷,内容丰富,适合初学者,发表于 2021-01-21,第13次开课,0
|
||||||
|
|
||||||
|
成型200520204164羡秭琪,还挺细致的,发表于 2021-01-19,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120200286彭霄,作为课后的补充挺不错。,发表于 2021-01-14,第13次开课,0
|
||||||
|
|
||||||
|
BIT-1120203486-李俊,党纪国法解放军歌迷会感慨感慨感慨,发表于 2020-12-30,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120203021骆彦萌,很有收获。,发表于 2020-12-26,第13次开课,0
|
||||||
|
|
||||||
|
司梦k1265338009900752384,很好,讲的很清晰,不过也要结合书本,还是得看平时看书的量,发表于 2020-12-21,第13次开课,0
|
||||||
|
|
||||||
|
Bit鳳凰涅槃mooc,老师授课方式独具一格,上课的内容精细化,对于比较难理解的知识点,适当举例,达到事半功倍的效果,适合大一新生学习C语言,是选择入门最佳的课程。,发表于 2020-12-20,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120202522陈晨波,nice nice nice nice nice,发表于 2020-12-08,第13次开课,0
|
||||||
|
|
||||||
|
bit07022002-1120201171张博雅,非常好,老师讲的很详细,发表于 2020-12-06,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120202124倪浩哲,好好好好好,发表于 2020-12-05,第13次开课,0
|
||||||
|
|
||||||
|
bit1120202291朱荣江,真滴很不错,发表于 2020-12-05,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120203143龚俊超,不错啊啊啊,发表于 2020-12-05,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120201671张迅,内容丰富,课程有趣,发表于 2020-12-05,第13次开课,0
|
||||||
|
|
||||||
|
BIT-1120202058-陈一飞,学到了许多编程的内容,发表于 2020-12-05,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120203235黄叶红,老师讲课思路很清晰,希望课后练习可以有解析,发表于 2020-12-05,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120202623田果,课是真的多 作业也多,发表于 2020-12-04,第13次开课,0
|
||||||
|
|
||||||
|
BIT-12112004-1120201056,azazaz,发表于 2020-12-04,第13次开课,0
|
||||||
|
|
||||||
|
Bit18332001-1120201472,很棒棒棒棒棒,发表于 2020-12-04,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120201731,好好好好好,发表于 2020-12-03,第13次开课,0
|
||||||
|
|
||||||
|
BIT沈业飚1120202024,讲的详细透彻,发表于 2020-12-02,第13次开课,0
|
||||||
|
|
||||||
|
BIT-1120201533-黄睿,对编程有了初步的了解,发表于 2020-12-01,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120200622-刘庚鑫,老师讲的很清晰,发表于 2020-11-29,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120201810吴骁,老师讲解清晰,习题难度中上!,发表于 2020-11-28,第13次开课,0
|
||||||
|
|
||||||
|
一丝空气k1267835062520631702,希望能多将些重点知识点,点到即可。,发表于 2020-11-25,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120202118于睿果,wow amazing,发表于 2020-11-23,第13次开课,0
|
||||||
|
|
||||||
|
bit1120201307姜兹瑞k12104529032684553578,好有用啊啊,发表于 2020-11-22,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120202038吕森炜,李老师yyds,发表于 2020-11-22,第13次开课,0
|
||||||
|
|
||||||
|
bit1120201726刘骜,c语言的实用入门教程,发表于 2020-11-19,第13次开课,0
|
||||||
|
|
||||||
|
BlackShadowS,很棒的课!,发表于 2020-11-19,第13次开课,0
|
||||||
|
|
||||||
|
BIT30012014-1120201034,Excellent and inspiring!,发表于 2020-11-18,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120202529陈勇斌,让我可以在课余时间自学,挺好的,发表于 2020-11-18,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120201105,课程很好,唯一的缺点就是灯光太暗有时看不清,发表于 2020-11-18,第13次开课,0
|
||||||
|
|
||||||
|
从零开始527,很棒,内容容易让人理解,发表于 2020-11-18,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120200936庞新宇,作业时间太短,发表于 2020-11-16,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120201054何嘉君,niubi,发表于 2020-11-14,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120203009邱昱力,讲得挺好,作为北理 工人我十分满意,发表于 2020-11-13,第13次开课,0
|
||||||
|
|
||||||
|
bit1120200704潘悦然,123455,发表于 2020-11-12,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120203423张皓钧,不喜欢网课,发表于 2020-11-09,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120200951张雲赫10,非常好,学到了许多东西,发表于 2020-11-09,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120202119赖厚俊,nlihihnhlhikhnnvnbn,发表于 2020-11-06,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120202119赖厚俊,nlihihnhlhikhnnvnbn,发表于 2020-11-06,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120202034汪奕,非常好,我通过这门课感受到了C语言的乐趣,发表于 2020-11-06,第13次开课,0
|
||||||
|
|
||||||
|
mooc68359314642602333,不知道是基于哪一本书来讲的,我买的就是李凤霞主编的c语言程序设计教程,虽然与书中内容差不多,但是找不到讲的内容在书上的哪里,每次都找半天,发表于 2020-11-04,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120200693李梓涵,课程非常容易掌握!,发表于 2020-10-31,第13次开课,0
|
||||||
|
|
||||||
|
青春无敌美少女战士,很喜欢,,,,,发表于 2020-10-29,第12次开课,0
|
||||||
|
|
||||||
|
p192426407马进英,厉害,老师解析清晰,发表于 2020-10-29,第12次开课,0
|
||||||
|
|
||||||
|
bit 1120202521 李雄,老师讲课是用到的例子很形象,对我们编程时的细节问题也有很多提示,发表于 2020-10-24,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120202620 杨涵,感觉这个课程讲课框架很好,很有逻辑,发表于 2020-10-24,第13次开课,0
|
||||||
|
|
||||||
|
颍颎,挺好的,讲的也挺清晰的,发表于 2020-10-23,第11次开课,0
|
||||||
|
|
||||||
|
邓自海,很好,令我满足,发表于 2020-10-23,第13次开课,0
|
||||||
|
|
||||||
|
mooc60775193867070359,老师讲的非常棒,一点都不拖泥带水,发表于 2020-10-22,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120200610钱璟诚,老师讲的很详细,发表于 2020-10-16,第13次开课,0
|
||||||
|
|
||||||
|
BIT1120202410刘朴岳,课程讲解很清晰,发表于 2020-10-15,第13次开课,0
|
||||||
|
|
||||||
|
年轻的模样mooc11582872223648,非常不错的课程!,发表于 2020-10-04,第3次开课,0
|
||||||
|
|
||||||
|
君临天下丶初,讲授内容深入浅出,讲解细致有规律,适合编程小白学习,发表于 2020-09-21,第13次开课,0
|
||||||
|
|
||||||
|
阴阳怪调井,可以从不同的角度认识所学习的知识。挺好的!,发表于 2020-09-20,第13次开课,0
|
||||||
|
|
||||||
|
hs201819828符茂桓,1145564,发表于 2020-09-14,第11次开课,0
|
||||||
|
|
||||||
|
陈文杰AND1,hhhhhh,发表于 2020-09-07,第1次开课,0
|
||||||
|
|
||||||
|
南城mooc11581774653288,棒!!!!,发表于 2020-08-21,第12次开课,0
|
||||||
|
|
||||||
|
mooc1485434467257,好极了,比学校讲课好多了,发表于 2020-08-17,第12次开课,0
|
||||||
|
|
||||||
|
mooc51998652700223702,学习多用心,总会有收获,老师上课上的很好,发表于 2020-08-06,第12次开课,0
|
||||||
|
|
||||||
|
林国昕,老师讲得很好,细致且清晰明了。,发表于 2020-07-30,第12次开课,0
|
||||||
|
|
||||||
|
2018171026张建华,得到了很大帮助,发表于 2020-07-28,第12次开课,0
|
||||||
|
|
||||||
|
千度mooc7,很不错的啊,发表于 2020-07-25,第12次开课,0
|
||||||
|
|
||||||
|
k1256427996198049421,讲解非常详细,印象深刻,引用例子明确,发表于 2020-07-17,第12次开课,0
|
||||||
|
|
||||||
|
Florence_Lan,哇!超出预期了,发表于 2020-07-14,第12次开课,0
|
||||||
|
|
||||||
|
林鸱mooc11582981478209,"#include <stdio.h> int main(){ printf(""其实还不错!""); return 0; }",发表于 2020-07-07,第12次开课,0
|
||||||
|
|
||||||
|
浔汐吖,HAO HAO,发表于 2020-07-06,第12次开课,0
|
||||||
|
|
||||||
|
地卓1801杨伟光dzs,非常的不错,发表于 2020-07-04,第12次开课,0
|
||||||
|
|
||||||
|
明灯mooc19,这也太贵了吧,发表于 2020-06-30,第12次开课,0
|
||||||
|
|
||||||
|
BIT03061914连楷煊1120192060,课程十分详细,测试也让我很好地回顾了各周所学。,发表于 2020-06-29,第12次开课,0
|
||||||
|
|
||||||
|
LYUN2018091540,对我很有帮助,发表于 2020-06-28,第12次开课,0
|
||||||
|
|
||||||
|
1005844873qqcom,老师讲的很详细很好理解,受益匪浅。,发表于 2020-06-28,第12次开课,0
|
||||||
|
|
||||||
|
zscccendi,内容很不错,内容广泛。,发表于 2020-06-26,第2次开课,0
|
||||||
|
|
||||||
|
LYUN2018091530王文彬,吼吼吼吼吼吼吼吼吼吼吼吼吼吼吼吼,发表于 2020-06-25,第12次开课,0
|
||||||
|
|
||||||
|
27闫微微,有些时候无字幕,并且测试截止时间太快了,会时常卡,发表于 2020-06-19,第12次开课,0
|
||||||
|
|
||||||
|
BIT03061916朱宇轩1320191019,66666666,发表于 2020-06-18,第12次开课,0
|
||||||
|
|
||||||
|
gyosuke,好好好好好,发表于 2020-06-18,第12次开课,0
|
||||||
|
|
||||||
|
BIT1120192988张灵博,非常好的一门课!,发表于 2020-06-16,第12次开课,0
|
||||||
|
|
||||||
|
电商192库尔班江如则,很不错了吧,发表于 2020-06-16,第12次开课,0
|
||||||
|
|
||||||
|
LYUN2018091531吴宝洋,让我明白了怎么编程,发表于 2020-06-14,第12次开课,0
|
||||||
|
|
||||||
|
失格者k1268038377166344981,超出预想,仔细,优质,发表于 2020-06-11,第12次开课,0
|
||||||
|
|
||||||
|
摆渡人369,老师讲的太好了,发表于 2020-06-10,第12次开课,0
|
||||||
|
|
||||||
|
HBEU018301314144,好好好好好好,发表于 2020-06-07,第12次开课,0
|
||||||
|
|
||||||
|
BIT哈力哈买-1120190190,非常超级nice,发表于 2020-06-06,第12次开课,0
|
||||||
|
|
||||||
|
幽灵哟,很棒的平台,发表于 2020-06-01,第12次开课,0
|
||||||
|
|
||||||
|
晓晓晴非,循序渐进的入门课程,发表于 2020-05-28,第12次开课,0
|
||||||
|
|
||||||
|
mju3192705119,有点儿难,具体怎么书写代码要是能教授就更好了!,发表于 2020-05-27,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120190885张天奕,很好,讲的很透彻,发表于 2020-05-26,第12次开课,0
|
||||||
|
|
||||||
|
Wangmooc11583119308224,666666666666,发表于 2020-05-26,第12次开课,0
|
||||||
|
|
||||||
|
鲁伯特泪痕,题目都没给出答案,发表于 2020-05-23,第12次开课,0
|
||||||
|
|
||||||
|
mooc54244197784067965,这是我听过的讲的最好的老师,发表于 2020-05-21,第12次开课,0
|
||||||
|
|
||||||
|
LYUN2018091523,好棒棒哒。,发表于 2020-05-19,第12次开课,0
|
||||||
|
|
||||||
|
BIT19161903曲奕宣1320191154,感觉还不错,发表于 2020-05-19,第12次开课,0
|
||||||
|
|
||||||
|
网工1802张宇飞yyf,老师的逻辑清晰讲的很清楚,已很好理解的方式讲述了出来,发表于 2020-05-16,第12次开课,0
|
||||||
|
|
||||||
|
万叶飞花mooc,可以很好的知道学生对c语言的学习,老师的指导也很细致认真,发表于 2020-05-14,第12次开课,0
|
||||||
|
|
||||||
|
LYUN2018091533,挺好的课程,发表于 2020-05-13,第12次开课,0
|
||||||
|
|
||||||
|
Sinian虔诚,内容有些地方很新颖,设计巧,发表于 2020-05-12,第12次开课,0
|
||||||
|
|
||||||
|
西安恒烽源,非常感谢李老师的讲解,帮我解开很久的疑惑。,发表于 2020-05-12,第1次开课,0
|
||||||
|
|
||||||
|
坚强的小白白mooc149,挺好的,,,发表于 2020-05-11,第12次开课,0
|
||||||
|
|
||||||
|
24彭文,都还可以的,发表于 2020-05-11,第12次开课,0
|
||||||
|
|
||||||
|
bit63011929-1120191790,很好地帮助我复习了相关内容,发表于 2020-05-10,第12次开课,0
|
||||||
|
|
||||||
|
04291901-范佳乐,很有收获,非常仔细,发表于 2020-05-10,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120192469席浚源,一切都挺好的,发表于 2020-05-10,第12次开课,0
|
||||||
|
|
||||||
|
教技19-2刘芸,很好,很优秀,发表于 2020-05-10,第12次开课,0
|
||||||
|
|
||||||
|
lyun采矿工程2018091504,不错好厉害,发表于 2020-05-10,第12次开课,0
|
||||||
|
|
||||||
|
BIT03061915牟纪珂1120192,非常棒收益良多,发表于 2020-05-09,第12次开课,0
|
||||||
|
|
||||||
|
BIT1120191788周旭,666666,发表于 2020-05-09,第12次开课,0
|
||||||
|
|
||||||
|
BIT1120190211单子骞,应该增加一些习题讲解。,发表于 2020-05-09,第12次开课,0
|
||||||
|
|
||||||
|
教技19-2张静,真的很不错,发表于 2020-05-09,第12次开课,0
|
||||||
|
|
||||||
|
教技19-2王创,我觉得还可以,发表于 2020-05-09,第12次开课,0
|
||||||
|
|
||||||
|
Tomhank20,老师讲的通俗易懂,发表于 2020-05-09,第12次开课,0
|
||||||
|
|
||||||
|
教技19-2卢睿哲,很好,很好很好,发表于 2020-05-09,第12次开课,0
|
||||||
|
|
||||||
|
水中州,老师讲的很好,即使不是相关专业也能获益良多,发表于 2020-05-08,第12次开课,0
|
||||||
|
|
||||||
|
长春大学张迪,非常好 好好,发表于 2020-05-08,第12次开课,0
|
||||||
|
|
||||||
|
豫财大201934070345王国志,老师的讲解很精彩,让我对于C语言有了更加系统化的认识。,发表于 2020-05-08,第12次开课,0
|
||||||
|
|
||||||
|
养生mooc11582537155942,感觉讲的蛮全面的,发表于 2020-05-06,第12次开课,0
|
||||||
|
|
||||||
|
FJNU135012019076张邦远,一星给解说,发表于 2020-05-05,第12次开课,0
|
||||||
|
|
||||||
|
电子19-2靳言超,。。。。。,发表于 2020-05-05,第12次开课,0
|
||||||
|
|
||||||
|
2019214170110,棒棒的!!!,发表于 2020-05-05,第12次开课,0
|
||||||
|
|
||||||
|
生不逢杰,完美,自律者强,发表于 2020-05-03,第12次开课,0
|
||||||
|
|
||||||
|
4659594,非常nice,发表于 2020-05-02,第12次开课,0
|
||||||
|
|
||||||
|
ZNMZDX201821076070,很差劲 ,知道为什,发表于 2020-04-30,第12次开课,0
|
||||||
|
|
||||||
|
潇潜mooc,老师很棒,但还是结合书一起看比较好,发表于 2020-04-29,第12次开课,0
|
||||||
|
|
||||||
|
mooc48038546813701569,还可以,比我的老师讲得好,发表于 2020-04-29,第12次开课,0
|
||||||
|
|
||||||
|
haojiemooc6,李老师讲课通俗易懂,很有帮助。谢谢,发表于 2020-04-27,第12次开课,0
|
||||||
|
|
||||||
|
FJNU135012019115赵英金,课程内容丰富 容易理解,发表于 2020-04-26,第12次开课,0
|
||||||
|
|
||||||
|
电子19-2张瑞镝,很有帮助,谢谢,发表于 2020-04-25,第12次开课,0
|
||||||
|
|
||||||
|
BIT1120191960冯乐为,感觉这个mooc对我的帮助很大,发表于 2020-04-24,第12次开课,0
|
||||||
|
|
||||||
|
教技19-2靳丽花,学习课程有点难,发表于 2020-04-24,第12次开课,0
|
||||||
|
|
||||||
|
狼堡你焦哥,66666666666,发表于 2020-04-23,第12次开课,0
|
||||||
|
|
||||||
|
做最好的自已,站位高,讲解到位。,发表于 2020-04-23,第12次开课,0
|
||||||
|
|
||||||
|
GEMmooc64,讲的不适合我,发表于 2020-04-21,第12次开课,0
|
||||||
|
|
||||||
|
BIT-1120191611-樊事成,老师讲的很详细,发表于 2020-04-21,第12次开课,0
|
||||||
|
|
||||||
|
--092477,好的一批。,发表于 2020-04-21,第12次开课,0
|
||||||
|
|
||||||
|
LYUN2018091526,好好好好或或或,发表于 2020-04-21,第12次开课,0
|
||||||
|
|
||||||
|
BIT1120191608赵跃然03111901,课程讲的非常好,发表于 2020-04-19,第12次开课,0
|
||||||
|
|
||||||
|
BIT03061912徐飞洋1120192584,C语言真的很奇妙,能节省很多人力物力,就是不太好学哈哈哈哈哈,发表于 2020-04-19,第12次开课,0
|
||||||
|
|
||||||
|
2191300423,GOOD!,发表于 2020-04-16,第12次开课,0
|
||||||
|
|
||||||
|
ykt59104042300786144,老师讲的很好。,发表于 2020-04-15,第12次开课,0
|
||||||
|
|
||||||
|
00596-199054439,很好,详细清楚,发表于 2020-04-13,第11次开课,0
|
||||||
|
|
||||||
|
hs201820410邢珂,学的很深刻,发表于 2020-04-09,第12次开课,0
|
||||||
|
|
||||||
|
BIT1120182292王子豫,非常非常好,发表于 2020-04-08,第12次开课,0
|
||||||
|
|
||||||
|
漛,测试题填空答案范围太小 答案无法与标准答案完全吻合,发表于 2020-04-08,第12次开课,0
|
||||||
|
|
||||||
|
水果捞123,66666,发表于 2020-04-07,第1次开课,0
|
||||||
|
|
||||||
|
教育技术学19-2班陈若彤,很喜欢这门课程,发表于 2020-04-07,第12次开课,0
|
||||||
|
|
||||||
|
广东轻工机器人182严俊涛,有些视频的画质有点模糊,偶尔会有点花,老师讲的挺好的。,发表于 2020-04-03,第12次开课,0
|
||||||
|
|
||||||
|
凡凡在学习,特别好,听得懂,发表于 2020-04-01,第12次开课,0
|
||||||
|
|
||||||
|
FJNU135012019094傅啦啦,"very good,the teacher is very smart",发表于 2020-03-27,第12次开课,0
|
||||||
|
|
||||||
|
医信一班李雪2019260017,老师讲课很认真,不仅学到了理论知识而且也参与了实践,发表于 2020-03-25,第12次开课,0
|
||||||
|
|
||||||
|
DaringWoo,真的讲的很好,很详细啊!谢谢老师!,发表于 2020-03-24,第12次开课,0
|
||||||
|
|
||||||
|
19机自1班15熊振杰,我感觉学到了很多,发表于 2020-03-21,第12次开课,0
|
||||||
|
|
||||||
|
短发少女55,老师讲课很详细,发表于 2020-03-19,第12次开课,0
|
||||||
|
|
||||||
|
蓝海银湾t,好喜欢这个老师!,发表于 2020-03-16,第12次开课,0
|
||||||
|
|
||||||
|
电气141-秦根朝,帮助我补了知识,谢谢老师,发表于 2020-03-15,第12次开课,0
|
||||||
|
|
||||||
|
ZNMZDX201921070127,感觉还好啦!,发表于 2020-03-15,第12次开课,0
|
||||||
|
|
||||||
|
mooc47969599582745510,长的很详细,也非常不错,发表于 2020-03-14,第12次开课,0
|
||||||
|
|
||||||
|
21一战上岸,哈哈哈哈哈,发表于 2020-03-14,第12次开课,0
|
||||||
|
|
||||||
|
FJNU116012019030吴黎明,难!特别是小测,明明程序是可以算出来的,格式也没错,就是不给分,发表于 2020-03-13,第12次开课,0
|
||||||
|
|
||||||
|
反效果,啊啊啊啊啊啊啊啊啊啊,发表于 2020-03-13,第12次开课,0
|
||||||
|
|
||||||
|
网络662程金丽,有不收费的真的很不错,发表于 2020-03-13,第12次开课,0
|
||||||
|
|
||||||
|
若明丶,希望还可以简化下流程,有些讲得还是太复杂了。作业还不错,就是要认真审题,防不胜防。,发表于 2020-03-13,第12次开课,0
|
||||||
|
|
||||||
|
Hanspc,李教授讲得很细,完全没基础,基本上都听得懂,但外语不行记不住。加油!,发表于 2020-03-11,第12次开课,0
|
||||||
|
|
||||||
|
millerteng,老师讲的很清晰,学习效果超级好,发表于 2020-03-08,第12次开课,0
|
||||||
|
|
||||||
|
凉凉mooc67,1111111,发表于 2020-03-08,第12次开课,0
|
||||||
|
|
||||||
|
魄幽,提交作业时对输出结果的格式要求太坑,太死板,关键是题目要求也没说清楚,发表于 2020-03-07,第12次开课,0
|
||||||
|
|
||||||
|
19工商管理13甘国栋,感觉效果非常好,发表于 2020-03-06,第12次开课,0
|
||||||
|
|
||||||
|
BIT周子焜1120192523(车辆2班),一些基本的内容没有讲到位,要不是我之前有点底子我都听不明白。,发表于 2020-02-19,第12次开课,0
|
||||||
|
|
||||||
|
mooc84313889003852918,课程讲的非常详细,非常喜欢,发表于 2020-02-19,第12次开课,0
|
||||||
|
|
||||||
|
GIS_201931024111_刘培,挺好的,先基本了解了c 语言,发表于 2020-02-19,第12次开课,0
|
||||||
|
|
||||||
|
中南民大-赵妍溪201921070064,还不错 不懂的可以暂停反复看,发表于 2020-02-18,第12次开课,0
|
||||||
|
|
||||||
|
宸星吖,在?为什么我找不到我的学习时间??我看了半天视频也不显示个时间??你让我怎么给老师交差??为啥我室友都有学习时间而我没有??是不是针对我??还有,为啥我室友说看了一个半小时视频只显示半小时???给个说法呗???,发表于 2020-02-18,第12次开课,0
|
||||||
|
|
||||||
|
爪巴233,可以可以可以,发表于 2020-02-18,第12次开课,0
|
||||||
|
|
||||||
|
清湖白雪,教的还不错,就是有些东西不能连贯,发表于 2020-02-18,第12次开课,0
|
||||||
|
|
||||||
|
石山峻,感谢老师,我一定坚持到底。,发表于 2020-02-18,第12次开课,0
|
||||||
|
|
||||||
|
mooc3108364758940821,非常好,便于理解,发表于 2020-02-17,第12次开课,0
|
||||||
|
|
||||||
|
Luther寻雁,.......,发表于 2020-02-16,第12次开课,0
|
||||||
|
|
||||||
|
Sherrymooc11581835659968,老师讲的太棒啦,受益匪浅!,发表于 2020-02-16,第12次开课,0
|
||||||
|
|
||||||
|
mooc14926687274878342,还不错,加油,发表于 2020-02-16,第12次开课,0
|
||||||
|
|
||||||
|
张欢mooc11581591243041,还可以吧,听得懂,发表于 2020-02-13,第12次开课,0
|
||||||
|
|
||||||
|
MNUST182033236高学炽,老师讲解的比较细致。,发表于 2020-02-13,第10次开课,0
|
||||||
|
|
||||||
|
mooc15649234915006156,认真详细,有启发性,发表于 2020-02-11,第12次开课,0
|
||||||
|
|
||||||
|
songchuyi,老师讲得真好!,发表于 2020-02-11,第12次开课,0
|
||||||
|
|
||||||
|
我们mooc350,我觉得非常好的一门课程,发表于 2020-02-10,第12次开课,0
|
||||||
|
|
||||||
|
mooc83713259906461249,好好好好好,发表于 2020-02-10,第12次开课,0
|
||||||
|
|
||||||
|
你不必长高因为我会弯腰mooc1,不错不错。,发表于 2020-02-10,第12次开课,0
|
||||||
|
|
||||||
|
mooc52287399790443187,内容挺好的,发表于 2020-02-10,第12次开课,0
|
||||||
|
|
||||||
|
ykt8700499150732307,可惜不是直播,发表于 2020-02-10,第12次开课,0
|
||||||
|
|
||||||
|
19063205王训志,蛮不错 我爱北理工,发表于 2020-02-05,第11次开课,0
|
||||||
|
|
||||||
|
201504060126,老师讲的很详细,学习效果很帮,发表于 2020-01-29,第10次开课,0
|
||||||
|
|
||||||
|
bit-1120192168-徐之玺,很不错的课程,收获良多。,发表于 2020-01-18,第9次开课,0
|
||||||
|
|
||||||
|
19级软件工程五班汤梓恒,这门课程很棒!,发表于 2020-01-17,第11次开课,0
|
||||||
|
|
||||||
|
心如花木向阳而生mooc7,太难了,前面勉强能跟上,第六周就跟不上了,发表于 2020-01-16,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120191867马云祥30041901,非常好,真心推荐!,发表于 2020-01-12,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120190099-杨殿一-63011922,可以学到很多,发表于 2020-01-10,第11次开课,0
|
||||||
|
|
||||||
|
绝不退出了,very good,发表于 2020-01-10,第11次开课,0
|
||||||
|
|
||||||
|
7-1320191098陈炳毓,不错很不错,发表于 2020-01-09,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120192534-陈彦达,那个编程题贼傻逼,发表于 2020-01-06,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120193397刘佳文,好好好好好好,发表于 2020-01-05,第11次开课,0
|
||||||
|
|
||||||
|
周孟范,老师教授的很好,发表于 2020-01-04,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120190724,北京理工大学真的牛,比某航强多了,发表于 2020-01-04,第11次开课,0
|
||||||
|
|
||||||
|
1-1120190750王文润,很好!!!,发表于 2020-01-04,第11次开课,0
|
||||||
|
|
||||||
|
6-1120193217-孔德堃,太好了太棒了,发表于 2020-01-03,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120191929-张然,课程非常棒!,发表于 2020-01-03,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120190498,本课程讲解详细,收获良多,发表于 2020-01-02,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120191280-郑灵杰,超级棒的!,发表于 2019-12-31,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120191997,非常非常好,发表于 2019-12-31,第11次开课,0
|
||||||
|
|
||||||
|
5班-1120192812张书名,老师讲得非常好,发表于 2019-12-29,第11次开课,0
|
||||||
|
|
||||||
|
一杯Java半糖,坚持了一个学期,感觉收获蛮大的,发表于 2019-12-29,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120192537-周博武,此课程非常适合初学者的学习,发表于 2019-12-21,第11次开课,0
|
||||||
|
|
||||||
|
airmooc657,很好,发表于 2019-12-18,第11次开课,0
|
||||||
|
|
||||||
|
6班-1120193654,嗯,挺牛逼,就是有点慢,发表于 2019-12-15,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120192189-张至鑫,这课程给我提供了很多我不会的题。,发表于 2019-12-14,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120192466,学校的课程,超级棒,发表于 2019-12-14,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120190474李宇航,真的是非常棒呀,发表于 2019-12-14,第11次开课,0
|
||||||
|
|
||||||
|
bit03061907陈旭1120192391,帮助真的很大,发表于 2019-12-12,第11次开课,0
|
||||||
|
|
||||||
|
飛mooc202,课程进度有点快了,课余时间没有那么多,发表于 2019-12-11,第11次开课,0
|
||||||
|
|
||||||
|
Shaunmooc34,非常不错的课程,发表于 2019-12-09,第11次开课,0
|
||||||
|
|
||||||
|
bit1120192150洪玙林,haoaaaaaa,发表于 2019-12-08,第11次开课,0
|
||||||
|
|
||||||
|
mcli1000,题目不错,视频有些会看,并不是全看。因为本身在学校会学习,会上课。整体很好把。。。,发表于 2019-12-07,第11次开课,0
|
||||||
|
|
||||||
|
XYY电子信息类5班张雪峰,非常优秀,特别有帮助,发表于 2019-12-02,第11次开课,0
|
||||||
|
|
||||||
|
bit-1120193586杨祎泉,我从中学到了C语言的基础知识,收获很多,发表于 2019-11-28,第11次开课,0
|
||||||
|
|
||||||
|
04291901李双双1320191031,噜啦啦噜啦啦,发表于 2019-11-26,第11次开课,0
|
||||||
|
|
||||||
|
马根利,飞船有帮助、,发表于 2019-11-25,第11次开课,0
|
||||||
|
|
||||||
|
da大辉,课程很棒,但是挑选的题目并没有相应讲解,发表于 2019-11-24,第11次开课,0
|
||||||
|
|
||||||
|
4-1120192295王帅,有较大的收获,发表于 2019-11-19,第11次开课,0
|
||||||
|
|
||||||
|
张小贱mooc8,内容详实,循序渐进。关于编程题用例能否给予简单提示,很多时候编译不通过,不是主体逻辑的问题,而是小细节考虑不到。,发表于 2019-11-18,第11次开课,0
|
||||||
|
|
||||||
|
桂敏锐,内容简洁详细,好,发表于 2019-11-18,第11次开课,0
|
||||||
|
|
||||||
|
mooc5933677362434792,很有启发!,发表于 2019-11-18,第11次开课,0
|
||||||
|
|
||||||
|
刘永娟,平时作业没法提交,郁闷,格式搞不清楚。没法完成学习了。,发表于 2019-11-18,第11次开课,0
|
||||||
|
|
||||||
|
BIT-30011901-毛书沛-1120193392,感觉非常好,发表于 2019-11-18,第11次开课,0
|
||||||
|
|
||||||
|
mooc39449782320486771,好久不用c语言了 基础快忘了 特来复习一遍 老师讲得很好 通俗易懂,发表于 2019-11-17,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120192846刘威诚,题非常有趣,让我学会了很多,老师也很棒,讲课非常好(,发表于 2019-11-17,第11次开课,0
|
||||||
|
|
||||||
|
mooc1509678619895,在线的编译器很奇怪,我自己的电脑上能够编译成功输出,在线这个编译器测试用例就一个也过不了,就很神奇,发表于 2019-11-17,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120191777,课程内容组织,授课方式 好!,发表于 2019-11-17,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120193602-蒙思洁-63011906,特别好!!!作业很有针对性呢!!!,发表于 2019-11-17,第11次开课,0
|
||||||
|
|
||||||
|
BIT63011933李喜龙1320191051,。。。。。,发表于 2019-11-17,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120193222,超出预期了,发表于 2019-11-17,第11次开课,0
|
||||||
|
|
||||||
|
bit-1909-张翔宇-1320191093,使我受益匪浅,发表于 2019-11-17,第11次开课,0
|
||||||
|
|
||||||
|
mooc7782366965919485,学无止境,继续加油!,发表于 2019-11-17,第11次开课,0
|
||||||
|
|
||||||
|
bit1120192390曹梦婕,感觉讲解很详细,刚开始学习的学生,发表于 2019-11-17,第11次开课,0
|
||||||
|
|
||||||
|
郑林宇,难啊,希望能简单点,发表于 2019-11-17,第11次开课,0
|
||||||
|
|
||||||
|
bit07121903-1320191127-任纪源,课程讲解十分的好。,发表于 2019-11-17,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120192392杨翔宇,学习了这些对我帮助很大。,发表于 2019-11-17,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120192149周一冲30041902,无无无无无,发表于 2019-11-17,第11次开课,0
|
||||||
|
|
||||||
|
BIT30041902-1120192254-成苒博,学到了很多东西 点赞,发表于 2019-11-16,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120191564王博为63011926,mooc真好,发表于 2019-11-16,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120192285-胡梦君,我爱死慕课,发表于 2019-11-16,第11次开课,0
|
||||||
|
|
||||||
|
BIT63011926-1120190383,认真的看了视频,结果编程时还是不会。很烦恼。,发表于 2019-11-16,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120192140李林瀚,不错,很满意,发表于 2019-11-16,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120173311,非常棒..,发表于 2019-11-16,第11次开课,0
|
||||||
|
|
||||||
|
2-1120190871张乐怡,excellent,发表于 2019-11-16,第11次开课,0
|
||||||
|
|
||||||
|
bit30041902-1120192844,课程很细致,发表于 2019-11-16,第11次开课,0
|
||||||
|
|
||||||
|
mooc6998038811472907,还可以吧慢慢学,发表于 2019-11-16,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120192934-张文通,6666666,发表于 2019-11-16,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120192154-毛瑞-63011927,可以和大家讨论问题,及时解决不懂的问题,很好,发表于 2019-11-15,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120191382贾宇博30021901,好 ,很好,很有收获,发表于 2019-11-15,第11次开课,0
|
||||||
|
|
||||||
|
BIT+1320191134+张帅,iiiii,发表于 2019-11-15,第11次开课,0
|
||||||
|
|
||||||
|
mooc1566812513607250,学会了C语言的基础,发表于 2019-11-15,第11次开课,0
|
||||||
|
|
||||||
|
4-1120192278杨欣妮,还不错,挺好的!,发表于 2019-11-15,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120191074,通过对C语言符号结构的讲解,并配套具体的C语言程序作业让我受益匪浅,发表于 2019-11-15,第11次开课,0
|
||||||
|
|
||||||
|
6-1120193570-赵宇帆,好,内容充实!,发表于 2019-11-14,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120190496张兆麟,老师讲的很好,发表于 2019-11-14,第11次开课,0
|
||||||
|
|
||||||
|
mooc2257549460184733,热爱它 也热爱生活,发表于 2019-11-14,第11次开课,0
|
||||||
|
|
||||||
|
ykt2422787520856094,dggbh,发表于 2019-11-14,第11次开课,0
|
||||||
|
|
||||||
|
bit30041901-1120191694,"#include <stdio.h> int main() { int a[7],m,n=0,i,p=0; for (i=0;i<7;i ) break;",发表于 2019-11-14,第11次开课,0
|
||||||
|
|
||||||
|
6班-1120193180,很有启发呢,发表于 2019-11-13,第11次开课,0
|
||||||
|
|
||||||
|
bit30041901-1120190682,课程内容很合适,老师讲的超认真,发表于 2019-11-13,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120192292,老师讲的好,发表于 2019-11-13,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120191864晋泽轩30041901,学到了不少知识,发表于 2019-11-12,第11次开课,0
|
||||||
|
|
||||||
|
小川0719,很好 非常好,发表于 2019-11-12,第11次开课,0
|
||||||
|
|
||||||
|
BIT630119261120192170陈廷星,非常好的学习体验,发表于 2019-11-12,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120193710-刘嘉敏-63011906,非常好,很满意,发表于 2019-11-12,第11次开课,0
|
||||||
|
|
||||||
|
bit63011923-1120192913,收获很大。,发表于 2019-11-10,第11次开课,0
|
||||||
|
|
||||||
|
06111907-1320191089李欣玥,123445,发表于 2019-11-09,第11次开课,0
|
||||||
|
|
||||||
|
中俄03821901-1120192610周瑞莹,非常好。。,发表于 2019-11-09,第11次开课,0
|
||||||
|
|
||||||
|
04291901 郭欣然,课上听不懂可以来慕课上看,发表于 2019-11-08,第11次开课,0
|
||||||
|
|
||||||
|
追星星的孩子mooc4,课程不错,有所帮助,发表于 2019-11-07,第11次开课,0
|
||||||
|
|
||||||
|
mooc6703490854857879,想靠老师来挽救我的c语言,发表于 2019-11-07,第11次开课,0
|
||||||
|
|
||||||
|
BIT63011928-1120191796秦善彬,3 3333,发表于 2019-11-05,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120182592刘富饶16131802,11111122222,发表于 2019-11-05,第9次开课,0
|
||||||
|
|
||||||
|
Blissk1292687350708443643,对我的编程学习挺有效的!,发表于 2019-11-05,第11次开课,0
|
||||||
|
|
||||||
|
bit63011903-1120191137,啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦,发表于 2019-11-04,第11次开课,0
|
||||||
|
|
||||||
|
BIT63011928-1120192432陈天问,课程精彩,内容详细,真的很适合我这种菜鸡,有很大提升哦,谢谢mooc!,发表于 2019-11-03,第11次开课,0
|
||||||
|
|
||||||
|
bit30041902-1120193555马牧远,深入浅出,受益匪浅,发表于 2019-11-02,第11次开课,0
|
||||||
|
|
||||||
|
冰泠纷雪,很有价值的课程,发表于 2019-11-02,第10次开课,0
|
||||||
|
|
||||||
|
自渡良人,好像能懂了,发表于 2019-11-01,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120190714王韫川30021901,。。。。。。,发表于 2019-10-29,第11次开课,0
|
||||||
|
|
||||||
|
1-1120190729蒋刘赟,这个课程太棒了,发表于 2019-10-29,第11次开课,0
|
||||||
|
|
||||||
|
BIT-1120191906,课程内容有些重复 课程进度与学校进度不一致,学习难度较大,发表于 2019-10-26,第11次开课,0
|
||||||
|
|
||||||
|
BIT1320191104马骏梁,实用性很强!,发表于 2019-10-23,第11次开课,0
|
||||||
|
|
||||||
|
Amymooc215,老师讲的非常好,概念清晰,水平高! PS:有人说过老师您很像明星王丽云老师吗?,发表于 2019-10-21,第11次开课,0
|
||||||
|
|
||||||
|
逍遥老鬼,好棒棒的哟,发表于 2019-10-21,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120192247王崧乔,感觉好嗨哦,发表于 2019-10-18,第11次开课,0
|
||||||
|
|
||||||
|
南花开mooc1,先五星好评,朋友推荐,看来是相当经典的!,发表于 2019-10-16,第11次开课,0
|
||||||
|
|
||||||
|
小李子mooc156,真好哈哈哈,发表于 2019-10-14,第11次开课,0
|
||||||
|
|
||||||
|
张钦汉,入门的语言,用于启蒙教育的作用,发表于 2019-10-13,第6次开课,0
|
||||||
|
|
||||||
|
55ley6y22e605ll9lls5s262sl9s9b09,十分的好!,发表于 2019-10-12,第11次开课,0
|
||||||
|
|
||||||
|
BIT1120193713杨泽浩63011928,课程内容充实,发表于 2019-10-12,第11次开课,0
|
||||||
|
|
||||||
|
徐延M91911315赵航,啥东西心疼。,发表于 2019-10-12,第11次开课,0
|
||||||
|
|
||||||
|
陈志明2021325110104,好,好,好。,发表于 2019-10-12,第10次开课,0
|
||||||
|
|
||||||
|
2-1120190853徐世安,很有帮助!,发表于 2019-10-10,第11次开课,0
|
||||||
|
|
||||||
|
阿喜mooc16,太好了,老师说的通俗易懂,例子也说得很详细,太棒了。,发表于 2019-09-28,第11次开课,0
|
||||||
|
|
||||||
|
FZU物信季晨霄111900806,王晓宇太强了,发表于 2019-09-25,第11次开课,0
|
||||||
|
|
||||||
|
科机191-191404180114师晓朋,真的不错,能够听懂,发表于 2019-09-21,第11次开课,0
|
||||||
|
|
||||||
|
花公子mooc5,老师讲得很细,越学越喜欢,发表于 2019-09-21,第10次开课,0
|
||||||
|
|
||||||
|
@@ -0,0 +1,16 @@
|
|||||||
|
import os,sys #导入模块
|
||||||
|
def add_prefix_files(): #定义函数名称
|
||||||
|
old_names = os.listdir( path ) #取路径下的文件名,生成列表
|
||||||
|
for old_name in old_names: #遍历列表下的文件名
|
||||||
|
# if old_name!= sys.argv[0]: #代码本身文件路径,防止脚本文件放在path路径下时,被一起重命名
|
||||||
|
if old_name.endswith('.mp4'): #当文件名以.txt后缀结尾时
|
||||||
|
old_name1=old_name.split(".")[0]
|
||||||
|
number = old_name1[-1]
|
||||||
|
name = old_name1[:1]
|
||||||
|
new_name =number+" "+name+".mp4"
|
||||||
|
os.rename(os.path.join(path,old_name),os.path.join(path,new_name)) #重命名文件
|
||||||
|
print (old_name,"has been renamed successfully! New name is: ",new_name) #输出提示
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
path = f'D:\Program File data\mp4\半音阶口琴' #运行程序前,记得修改主文件夹路径!
|
||||||
|
add_prefix_files() #调用定义的函数,注意名称与定义的函数名一致
|
||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/python爬虫/python爬虫练习/彩票网站/caipiao" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/python爬虫/scrapy/scrapy02" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/python爬虫/scrapy/meinv" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/python爬虫/scrapy/scrapy03" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/python爬虫/scrapy/scrapy04" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/python爬虫/python爬虫练习/wangyizhaopin" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/python爬虫/python爬虫练习/douban" isTestSource="false" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/python爬虫/python爬虫练习/novel" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Python 3.12 (base)" jdkType="Python SDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
# type()
|
||||||
|
|
||||||
|
# String_type=type("黑马");
|
||||||
|
# print(String_type);
|
||||||
|
# print("黑马")
|
||||||
|
# print(type("黑马"))
|
||||||
|
|
||||||
|
# 数据类型转换
|
||||||
|
|
||||||
|
# print(int(12.23))
|
||||||
|
# print(float(12))
|
||||||
|
# print(str("黑马"))
|
||||||
|
|
||||||
|
# 运算符 ** 指数 //取整数
|
||||||
|
|
||||||
|
# print(13//2)#13除2取整
|
||||||
|
# print(2**5)#2的5次幂
|
||||||
|
# num = 2;
|
||||||
|
# num += 1;
|
||||||
|
# print(num)
|
||||||
|
|
||||||
|
# 字符串
|
||||||
|
# 使用转义字符\取消引号效用
|
||||||
|
# print("heima\" ")
|
||||||
|
|
||||||
|
# 字符串拼接 字符串格式化
|
||||||
|
# a = 12
|
||||||
|
# b = 33
|
||||||
|
# message = "第%s期,平均工资%s元" % (a, b)
|
||||||
|
# print(message)
|
||||||
|
# 精度控制
|
||||||
|
# a=11.2
|
||||||
|
# b=22
|
||||||
|
# c="%5.1f期,%3d元"%(a,b)
|
||||||
|
# print(c)
|
||||||
|
# 快速格式化
|
||||||
|
# name="黑马"
|
||||||
|
# age=22
|
||||||
|
# price=19.9
|
||||||
|
# message=f"我叫{name},我今年{age}岁,我的股价{price}元"
|
||||||
|
# print(message)
|
||||||
|
# 表达式格式化
|
||||||
|
# print("1*1的结果是%d" % 1 * 1)
|
||||||
|
# print(f"1*2的结果是{1 * 2}")
|
||||||
|
# print("字符串的数据类型为%s " % type("字符串"))
|
||||||
|
|
||||||
|
# 数据输入
|
||||||
|
# print("请告诉我你是谁?")
|
||||||
|
# name=input()
|
||||||
|
# print("我知道了你是谁:"+name)
|
||||||
|
# name1 = input(
|
||||||
|
# "请告诉我银行卡密码\n"
|
||||||
|
# )
|
||||||
|
# print("我知道你的银行卡密码是:" + name1)
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# 布尔类型
|
||||||
|
# result = "dog"
|
||||||
|
# result1 = "cat"
|
||||||
|
# print(f"{result == result1}")
|
||||||
|
# print(result >= result1)#只比较首字母ascii值,不比较后续的值
|
||||||
|
|
||||||
|
# # if语句
|
||||||
|
# age=30
|
||||||
|
# if age >= 18:
|
||||||
|
# print("我已经成年了\n即将步入大学生活")
|
||||||
|
|
||||||
|
# if elif else多条件判断
|
||||||
|
# height=int(input("请输入你的身高(cm)"))
|
||||||
|
# VIP_level=int(input("请输入您的VIP等级(1-5)"))
|
||||||
|
#
|
||||||
|
# if height < 120:
|
||||||
|
# print("您的身高小于120cm,可以免费")
|
||||||
|
# elif VIP_level > 3:
|
||||||
|
# print("您的vip等级大于3,可以免费")
|
||||||
|
# else:
|
||||||
|
# print("需要请买票10元")
|
||||||
|
# 单次输入一行写法
|
||||||
|
# if int(input("请输入你的身高(cm)"))<120:
|
||||||
|
# print("您的身高小于120cm,可以免费")
|
||||||
|
# elif int(input("请输入您的VIP等级(1-5)"))>3:
|
||||||
|
# print("您的vip等级大于3,可以免费")
|
||||||
|
# else:
|
||||||
|
# print("需要请买票10元")
|
||||||
|
#嵌套方式
|
||||||
|
if int(input("请输入你的身高(cm)"))>120:
|
||||||
|
print("身高超出限制,不可以免费")
|
||||||
|
print("如果vip大于3则可以免费")
|
||||||
|
if int(input("请输入您的VIP等级(1-5)"))>3:
|
||||||
|
print("您的vip等级大于3,可以免费")
|
||||||
|
else:
|
||||||
|
print("对不起,您不能免费")
|
||||||
|
else:
|
||||||
|
print("身高未超出限制,可以免费")
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# while计算1-100和
|
||||||
|
# num=0
|
||||||
|
# i = 1
|
||||||
|
# while i <= 100:
|
||||||
|
# num = num + i
|
||||||
|
# i += 1
|
||||||
|
# print(num)
|
||||||
|
|
||||||
|
# while循环嵌套,参考99乘法表
|
||||||
|
|
||||||
|
# for语句演示
|
||||||
|
|
||||||
|
# name = "i_love_python"
|
||||||
|
# for x in name:
|
||||||
|
# print(x)
|
||||||
|
# i = 0
|
||||||
|
# name = "it_hema is a brand of it_cast"
|
||||||
|
#
|
||||||
|
# for x in name:
|
||||||
|
# if x == "a":
|
||||||
|
# i += 1
|
||||||
|
# print(i)
|
||||||
|
|
||||||
|
# range()语句使用
|
||||||
|
#
|
||||||
|
# for x in range(10):
|
||||||
|
# print(f"{x}\t", end='')
|
||||||
|
# print()
|
||||||
|
# for x in range(20, 30):
|
||||||
|
# print(f"{x}\t", end='')
|
||||||
|
# print()
|
||||||
|
# for x in range(10, 30, 3):
|
||||||
|
# print(f"{x}\t", end='')
|
||||||
|
|
||||||
|
# for 嵌套
|
||||||
|
|
||||||
|
# for i in range(101):
|
||||||
|
# print(f"表白地{i}天")
|
||||||
|
# for j in range(11):
|
||||||
|
# print(f"这是今天送的第{j}支花")
|
||||||
|
|
||||||
|
# 循环中断 continue/break
|
||||||
|
# for i in range(19):
|
||||||
|
# print(f"这是第{i}次")
|
||||||
|
# continue
|
||||||
|
# print("abc")#此代码无法访问
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
"""
|
||||||
|
演示JSON数据和Python字典相互转换
|
||||||
|
"""
|
||||||
|
# import json
|
||||||
|
#
|
||||||
|
# # 列表转换为json
|
||||||
|
# data = [{"name": "张三", "age": 11}, {"name": '李四', "age": 21}]
|
||||||
|
# json_str = json.dumps(data, ensure_ascii=False) # ensure_ascii=False,显示中文
|
||||||
|
# print(type(json_str)) # 类型为str
|
||||||
|
# print(json_str)
|
||||||
|
# # 字典转换为json
|
||||||
|
# d = {"name": "张三", "age": 13}
|
||||||
|
# json_str1 = json.dumps(d, ensure_ascii=False)
|
||||||
|
# print(json_str1)
|
||||||
|
#
|
||||||
|
# # json转为python数据类型
|
||||||
|
# s = '[{"name": "张三", "age": 11}, {"name": "李四", "age": 21}]'
|
||||||
|
# l = json.loads(s)
|
||||||
|
# print(l)
|
||||||
|
# print(type(l))
|
||||||
|
# d1 = '{"name": "张三", "age": 13}'
|
||||||
|
# l1 = json.loads(d1)
|
||||||
|
# print(d1)
|
||||||
|
# print(type(d1))
|
||||||
|
|
||||||
|
# pyecharts入门
|
||||||
|
# 导包,导入line功能构建折线图对象
|
||||||
|
# from pyecharts.charts import Line
|
||||||
|
# from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts
|
||||||
|
#
|
||||||
|
# # 得到折线图对象
|
||||||
|
# line = Line()
|
||||||
|
# # 添加x轴数据
|
||||||
|
# line.add_xaxis(['中国', '英国', '美国'])
|
||||||
|
# # 添加y轴数据
|
||||||
|
# line.add_yaxis("gdp", [30, 20, 10])
|
||||||
|
# # 生成图表
|
||||||
|
# # line.render()
|
||||||
|
#
|
||||||
|
# # 设置全局配置项
|
||||||
|
# line.set_global_opts(
|
||||||
|
# title_opts=TitleOpts("gdp展示", pos_left="center", pos_bottom="1%"),
|
||||||
|
# legend_opts=LegendOpts(is_show=True),
|
||||||
|
# toolbox_opts=ToolboxOpts(is_show=True)
|
||||||
|
#
|
||||||
|
# )
|
||||||
|
#
|
||||||
|
# line.render()
|
||||||
|
|
||||||
|
# 演示地图可视化的基本使用
|
||||||
|
from pyecharts.charts import Map
|
||||||
|
from pyecharts.options import VisualMapOpts
|
||||||
|
|
||||||
|
# 准备地图对象
|
||||||
|
map = Map()
|
||||||
|
# 准备数据
|
||||||
|
data = [
|
||||||
|
("北京", 99),
|
||||||
|
("上海", 199),
|
||||||
|
("湖南", 299),
|
||||||
|
("台湾", 399),
|
||||||
|
("广东", 499)
|
||||||
|
]
|
||||||
|
# 添加数据
|
||||||
|
map.add("测试地图", data, "china")
|
||||||
|
# 设置全局变量
|
||||||
|
map.set_global_opts(
|
||||||
|
visualmap_opts=VisualMapOpts(
|
||||||
|
is_show=True, # 显示颜色
|
||||||
|
is_piecewise=True, # 手动校准范围
|
||||||
|
pieces=[
|
||||||
|
{"min": 1, "max": 9, "label": "1-9", "color": "#CCFFFF"},
|
||||||
|
{"min": 10, "max": 99, "label": "10-99", "color": "#FF6666"},
|
||||||
|
{"min": 100, "max": 999, "label": "100-999", "color": "#990033"}
|
||||||
|
|
||||||
|
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
# 显示
|
||||||
|
map.render()
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
# 构造方法
|
||||||
|
# class Student:
|
||||||
|
# name = None
|
||||||
|
# age = None
|
||||||
|
# tel = None
|
||||||
|
#
|
||||||
|
# def __init__ (self, name, age, tel):
|
||||||
|
# self.name = name
|
||||||
|
# self.age = age
|
||||||
|
# self.tel = tel
|
||||||
|
# print("Student类创建了一个对象")
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# stu = Student("asd", 11, "123123")
|
||||||
|
#
|
||||||
|
# print(stu.tel)
|
||||||
|
# print(stu.age)
|
||||||
|
# print(stu.name)
|
||||||
|
import json
|
||||||
|
import random
|
||||||
|
|
||||||
|
# class Student:
|
||||||
|
# def __init__(self, name, age):
|
||||||
|
# self.name = name
|
||||||
|
# self.age = age
|
||||||
|
#
|
||||||
|
# # __str__魔术方法
|
||||||
|
# def __str__(self):
|
||||||
|
# return f"Student类对象.name:{self.name},age:{self.age}"
|
||||||
|
#
|
||||||
|
# # __lt__魔术方法
|
||||||
|
# def __lt__(self, other):
|
||||||
|
# return self.age < other.age
|
||||||
|
#
|
||||||
|
# # __le__魔术方法
|
||||||
|
# def __le__(self, other):
|
||||||
|
# return self.age <= other.age
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# stu = Student("joker", 32)
|
||||||
|
# stu2 = Student("lei", 34)
|
||||||
|
# stu3 = Student("fun", 34)
|
||||||
|
# print(stu) # str
|
||||||
|
# print(str(stu)) # str
|
||||||
|
# print(stu > stu2) # 比较
|
||||||
|
# print(stu3 >= stu2) # 比较
|
||||||
|
|
||||||
|
|
||||||
|
# 私有成员变量与方法
|
||||||
|
# class Phone:
|
||||||
|
# __current_voltage = 0.5 # 当前手机运行电压
|
||||||
|
#
|
||||||
|
# def __keep_single_core(self):
|
||||||
|
# print("让CPU以单核模式运行")
|
||||||
|
#
|
||||||
|
# def call_by_5g(self):
|
||||||
|
# if self.__current_voltage>=1:
|
||||||
|
# print("5g已开启")
|
||||||
|
# else:
|
||||||
|
# self.__keep_single_core()
|
||||||
|
# print("电量不足,已单核运行")
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# phone = Phone()
|
||||||
|
# phone.call_by_5g()
|
||||||
|
# # phone.keep_single_core()
|
||||||
|
|
||||||
|
|
||||||
|
# 类型注解
|
||||||
|
# 基础注解 变量:类型
|
||||||
|
var: int = 2
|
||||||
|
my_list: list = [1, 2, 3]
|
||||||
|
my_tuple: tuple[str, int, bool] = ("ithe", 2, False)
|
||||||
|
my_dict: dict[str, int] = {"sadf": 123}
|
||||||
|
|
||||||
|
var_2 = random.randint(1, 31) # type:int
|
||||||
|
var_3 = json.loads('{"name":"zhangsan"}') # type:dict[str,str]
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
from pymysql import Connection
|
||||||
|
|
||||||
|
conn = Connection(
|
||||||
|
host="localhost",
|
||||||
|
port=3306,
|
||||||
|
user="root",
|
||||||
|
password="123123",
|
||||||
|
autocommit=True # 自动确认
|
||||||
|
)
|
||||||
|
|
||||||
|
# print(conn.get_server_info())
|
||||||
|
|
||||||
|
# 执行非查询性质SQL
|
||||||
|
cursur = conn.cursor() # 获取游标对象
|
||||||
|
# 选择数据库
|
||||||
|
conn.select_db("world")
|
||||||
|
# 执行sql
|
||||||
|
# cursur.execute("create table test_pymysql(id int);")
|
||||||
|
|
||||||
|
# cursur.execute("select * from student")
|
||||||
|
# result = cursur.fetchall()
|
||||||
|
# print(result) # 返回类型为元组
|
||||||
|
|
||||||
|
# 提交数据
|
||||||
|
cursur.execute("insert into student values(1,'李白',34)")
|
||||||
|
# 提交数据
|
||||||
|
# conn.commit()
|
||||||
|
|
||||||
|
conn.close()
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
from pyspark import SparkConf, SparkContext
|
||||||
|
import os
|
||||||
|
|
||||||
|
os.environ["PYSPARK_PYTHON"] = "D:\programtool\conda\python"
|
||||||
|
|
||||||
|
# 创建SparcConf类对象
|
||||||
|
conf = SparkConf().setMaster("local[*]").setAppName("text_spark_app")
|
||||||
|
# 基于SparkConf类对象创建SparkContext类对象
|
||||||
|
sc = SparkContext(conf=conf)
|
||||||
|
# 打印版本
|
||||||
|
# print(sc.version)
|
||||||
|
|
||||||
|
# 通过parallelize 方法将python对象加载到Spark内,成为RDD对象
|
||||||
|
rdd1 = sc.parallelize([1, 2, 3, 4, 5])
|
||||||
|
rdd2 = sc.parallelize((1, 2, 4, 5, 6))
|
||||||
|
rdd3 = sc.parallelize("342sdf")
|
||||||
|
|
||||||
|
|
||||||
|
# print(rdd1.collect())
|
||||||
|
# print(rdd2.collect())
|
||||||
|
# print(rdd3.collect())
|
||||||
|
|
||||||
|
# rdd4 = sc.textFile("C语言程序设计(上).北京理工大学.csv")
|
||||||
|
# print(rdd4.collect())
|
||||||
|
|
||||||
|
def func(data):
|
||||||
|
return data * 10
|
||||||
|
|
||||||
|
|
||||||
|
# 通过map方法将rdd1全部数据乘以10
|
||||||
|
rdd5 = rdd1.map(func)
|
||||||
|
# print(rdd5.collect())
|
||||||
|
|
||||||
|
# 通过flatMap方法进行解除嵌套
|
||||||
|
rdd6 = sc.parallelize(["hello world 232", 'welcome learn python 233'])
|
||||||
|
rdd7 = rdd6.map(lambda x: x.split(" "))
|
||||||
|
rdd8 = rdd6.flatMap(lambda x: x.split(" "))
|
||||||
|
# print(rdd7.collect())
|
||||||
|
# print(rdd8.collect())
|
||||||
|
|
||||||
|
# reduceByKey两两计算
|
||||||
|
rdd9 = sc.parallelize([('男', 88), ("女", 68), ('男', 48), ('女', 38)])
|
||||||
|
rdd10 = rdd9.reduceByKey(lambda a, b: a + b)
|
||||||
|
print(rdd10.collect())
|
||||||
|
|
||||||
|
# 停止SparkContext对象运行
|
||||||
|
sc.stop()
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
# 定义函数,并输出信息
|
||||||
|
|
||||||
|
def say_hi():
|
||||||
|
print("hello world")
|
||||||
|
|
||||||
|
|
||||||
|
# say_hi()
|
||||||
|
|
||||||
|
# 演示函数传参
|
||||||
|
# def add(x, y):
|
||||||
|
# result = x + y
|
||||||
|
# print(f"{x}+{y}的结果是{result}")
|
||||||
|
|
||||||
|
|
||||||
|
# add(2,3)
|
||||||
|
|
||||||
|
# 函数返回值
|
||||||
|
# def add(x, y):
|
||||||
|
# result = x + y
|
||||||
|
# return result
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# a = add(32, 33)
|
||||||
|
# print(a)
|
||||||
|
|
||||||
|
# def say_i():
|
||||||
|
# print("i")
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# result = say_i()
|
||||||
|
# print(f"{result}")
|
||||||
|
|
||||||
|
# none 用于if判断
|
||||||
|
# def check_age(age):
|
||||||
|
# if age > 18:
|
||||||
|
# return "SUCCESS"
|
||||||
|
# else:
|
||||||
|
# return None
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# result = check_age(14)
|
||||||
|
# if not result:
|
||||||
|
# print("未成年")
|
||||||
|
|
||||||
|
# 函数说明文档
|
||||||
|
def add(x,y):
|
||||||
|
"""
|
||||||
|
add 函数可以接受两个参数,并实现两参数相加
|
||||||
|
:param x: 参数1
|
||||||
|
:param y: 参数2
|
||||||
|
:return: 返回两数相加的结果
|
||||||
|
"""
|
||||||
|
print(f"{x}+{y}={x+y}")
|
||||||
|
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
# # 列表 list()
|
||||||
|
# name_list = ['ab', 'bc', 'cd']
|
||||||
|
# print(name_list)
|
||||||
|
# print(type(name_list))
|
||||||
|
#
|
||||||
|
# name_list1=[['ba','bc'],'bab']
|
||||||
|
# print(name_list1)
|
||||||
|
|
||||||
|
# # 列表下标索引
|
||||||
|
# name_list = ['alex', 'tom', 'late']
|
||||||
|
# print(name_list[1])
|
||||||
|
# print(name_list[-3]) # 反向从-1开始
|
||||||
|
#
|
||||||
|
# name_list1 = ["alex", ['al', 'ex'], 'tom']
|
||||||
|
# print(name_list1[1][0])
|
||||||
|
# # 超出循环报错:IndexError: list index out of range
|
||||||
|
|
||||||
|
# # 列表查询
|
||||||
|
# my_list = ['alex','tom','jerry']
|
||||||
|
# index=my_list.index('alex')
|
||||||
|
# print(f"alex在列表中下表索引值为{index}")
|
||||||
|
# # 列表修改
|
||||||
|
# my_list[2]="cat"
|
||||||
|
# print(f"修改后的值为{my_list[2]}")
|
||||||
|
# # 指定位置插入数据
|
||||||
|
# my_list.insert(1,'mouse')
|
||||||
|
# print(my_list)
|
||||||
|
# # 追加元素
|
||||||
|
# my_list.append("monster")
|
||||||
|
# print(my_list)
|
||||||
|
# my_list1=['i','love','python']
|
||||||
|
# my_list.extend(my_list1)
|
||||||
|
# print(my_list)
|
||||||
|
#
|
||||||
|
# # 元素删除
|
||||||
|
# my_list = ['alex', 'tom', 'jerry']
|
||||||
|
# del my_list[1]
|
||||||
|
# print(my_list)
|
||||||
|
#
|
||||||
|
# my_list = ['alex', 'tom', 'jerry']
|
||||||
|
# element = my_list.pop(1)
|
||||||
|
# print(f"通过pop方法取出元素后列表内容{my_list},取出内容为{element}")
|
||||||
|
# # 删除元素第一个匹配项
|
||||||
|
# my_list = ['alex', 'tom','alex' ,'jerry']
|
||||||
|
# my_list.remove('alex')
|
||||||
|
# print(my_list)
|
||||||
|
# # 清空列表
|
||||||
|
# my_list = ['alex', 'tom', 'alex', 'jerry']
|
||||||
|
# my_list.clear()
|
||||||
|
# print(my_list)
|
||||||
|
|
||||||
|
# # 统计列表中指定元素数量
|
||||||
|
# my_list = ['alex', 'tom','alex' ,'jerry']
|
||||||
|
# num=my_list.count("alex")
|
||||||
|
# print(f'列表中alex元素共有{num}个')
|
||||||
|
# # 统计列表中所有元素个数
|
||||||
|
# count=len(my_list)
|
||||||
|
# print(f'列表中所有元素个数为{count}个')
|
||||||
|
|
||||||
|
# # 列表遍历
|
||||||
|
# def list_while_func():
|
||||||
|
# my_list = ["alex", "tom", "jerry"]
|
||||||
|
# index = 0
|
||||||
|
# while index < len(my_list):
|
||||||
|
# element = my_list[index]
|
||||||
|
# print(f"列表元素为{element}")
|
||||||
|
# index += 1
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# list_while_func()
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# def list_for_func():
|
||||||
|
# my_list = ["alex", "tom", "jerry"]
|
||||||
|
# for element in my_list:
|
||||||
|
# print(f"列表的元素有:{element}")
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# list_for_func()
|
||||||
|
|
||||||
|
# # 元组
|
||||||
|
# # 定义元组
|
||||||
|
# t1 = (1, "hello", True)
|
||||||
|
# t2 = ()
|
||||||
|
# t3 = tuple()
|
||||||
|
# print(f"{t1}\n{t2}\n{t3}\ntype(t1)类型{type(t1)}")
|
||||||
|
# # 定义单个元组
|
||||||
|
# t4 = ("hello",) # 单个元组加“,”
|
||||||
|
# print(f'{t4} {type(t4)}')
|
||||||
|
# # 嵌套元组
|
||||||
|
# t5 = ((1, 2, 3), (4, 5, 6))
|
||||||
|
# print(f"{type(t5)},{t5}")
|
||||||
|
# # 取出内容
|
||||||
|
# num = t5[0][2]
|
||||||
|
# print(num)
|
||||||
|
# # 元组操作 : index 查找
|
||||||
|
# t6 = ("alex", "tom", "jerry")
|
||||||
|
# index = t6.index("tom")
|
||||||
|
# print(index)
|
||||||
|
# num = t6.count("tom") # 统计单一元素数量
|
||||||
|
# print(num)
|
||||||
|
# num2 = len(t6) # 统计元组元素数量
|
||||||
|
# print(num2)
|
||||||
|
# # 元组遍历
|
||||||
|
# index = 0
|
||||||
|
# while index < len(t6):
|
||||||
|
# element = t6[index]
|
||||||
|
# print(f"{element}")
|
||||||
|
# index += 1
|
||||||
|
# for element in t6:
|
||||||
|
# print(f"{element}")
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,158 @@
|
|||||||
|
# # 字符串
|
||||||
|
# my_str = "tom and jerry"
|
||||||
|
# value = my_str[2]
|
||||||
|
# value1 = my_str[-12]
|
||||||
|
# print(f"字符串中取出下标为2的字符为{value},取出下标为-12的字符为{value1}")
|
||||||
|
# # 字符串常用方法index
|
||||||
|
# value2 = my_str.index("tom")
|
||||||
|
# print(f"字符串查找tom,其起始下标为{value2}")
|
||||||
|
# # 字符串常用方法,replace
|
||||||
|
# new_my_str = my_str.replace("jerry", "xi_mi")
|
||||||
|
# print(new_my_str)
|
||||||
|
# print(my_str)
|
||||||
|
# # 字符串常用方法 split
|
||||||
|
# my_str_list = my_str.split(" ")
|
||||||
|
# print(f"{my_str_list}")
|
||||||
|
# # 字符串规整操作 strip
|
||||||
|
# my_str1 = " hello world "
|
||||||
|
# new_my_str1 = my_str1.strip()
|
||||||
|
# print(f"{new_my_str1}")
|
||||||
|
# my_str2 = "12hello 12world21"
|
||||||
|
# new_my_str2 = my_str2.strip("12")
|
||||||
|
# print(f"字符串{my_str2}被strip(12)后结果为{new_my_str2}")
|
||||||
|
# # 字符串中某字符串出现的次数,count
|
||||||
|
# count = my_str.count("a")
|
||||||
|
# print(f"{count}")
|
||||||
|
# # 统计字符串长度 len()
|
||||||
|
# len1 = len(my_str)
|
||||||
|
# print(f"{len1}")
|
||||||
|
|
||||||
|
# 字符串遍历
|
||||||
|
# index = 0
|
||||||
|
# my_str = "Good morning"
|
||||||
|
# while index < len(my_str):
|
||||||
|
# element = my_str[index]
|
||||||
|
# index += 1
|
||||||
|
# print(f"{element}")
|
||||||
|
# my_str1 = "Good afternoon"
|
||||||
|
# for element in my_str1:
|
||||||
|
# print(f"{element}")
|
||||||
|
|
||||||
|
# # 序列切片
|
||||||
|
# # 对list切片,从1开始,4结束,步长1
|
||||||
|
# my_list = [0, 1, 2, 3, 4, 5, 6]
|
||||||
|
# result1 = my_list[1:4] # 步长为1,可省略
|
||||||
|
# print(f"{result1}")
|
||||||
|
# # 从头开始,到最后结束,步长为2
|
||||||
|
# result2 = my_list[::2]
|
||||||
|
# print(f"{result2}")
|
||||||
|
# # 对str切片,从头开始到最后结束,步长-1
|
||||||
|
# my_str = "01234567"
|
||||||
|
# result3 = my_str[::-1]
|
||||||
|
# print(f"{result3}")
|
||||||
|
# # 对元组切片,从头开始,到尾结束,步长-2
|
||||||
|
# my_tuple=(0,1,2,3,4,5,6,7)
|
||||||
|
# result4=my_tuple[::-2]
|
||||||
|
# print(f"{result4}")
|
||||||
|
|
||||||
|
# # 集合
|
||||||
|
# my_set = {"tom", "jerry", "python", "element", "tom"}
|
||||||
|
# my_set_empty = set()
|
||||||
|
# print(f"me_set的内容是:{my_set},类型是{type(my_set)}")
|
||||||
|
# print(f"me_set_empty的内容是:{my_set_empty},类型是{type(my_set_empty)}")
|
||||||
|
# # 添加元素
|
||||||
|
# my_set.add("heima")
|
||||||
|
# my_set.add("python")
|
||||||
|
# print(f"{my_set}")
|
||||||
|
# # 移除元素
|
||||||
|
# my_set.remove("jerry")
|
||||||
|
# print(f"{my_set}")
|
||||||
|
# # 随机取出一个元素
|
||||||
|
# element = my_set.pop() # 此操作为随机取出
|
||||||
|
# print(f"{my_set}")
|
||||||
|
# # 清空集合
|
||||||
|
# result= my_set.clear()
|
||||||
|
# print(f"{my_set}")
|
||||||
|
|
||||||
|
# # 取出两个集合的差集
|
||||||
|
# set1 = {1, 2, 3}
|
||||||
|
# set2 = {1, 4, 6}
|
||||||
|
# set3 = set1.difference(set2)
|
||||||
|
# print(set3)
|
||||||
|
# print(set1)
|
||||||
|
# # 消除差集
|
||||||
|
# set1.difference_update(set2)
|
||||||
|
# print(f"消除差集后,集合1的结果是{set1}")
|
||||||
|
# print(f"消除差集后,集合2的结果是{set2}") # 只对集合1消除,集合2不变
|
||||||
|
# 两集合合并
|
||||||
|
# set4=set1.union(set2)
|
||||||
|
# print(f"两集和合并结果为{set4}")
|
||||||
|
# print(f"合并后集合1为{set1}")
|
||||||
|
# print(f"合并后集合2为{set2}")#合并后原集合不变
|
||||||
|
# #集合统计
|
||||||
|
# num=len(set4)
|
||||||
|
# print(num)
|
||||||
|
|
||||||
|
# 集合的遍历
|
||||||
|
# 集合不支持下标索引,所以不能用while循环
|
||||||
|
# set1 = {1, 2,3,4,5,6}
|
||||||
|
# for element in set1:
|
||||||
|
# print(f"集合的元素有{element}")
|
||||||
|
|
||||||
|
# # 字典
|
||||||
|
# my_dict = {"王力宏": 99, "汤姆": 88, "林俊杰": 77}
|
||||||
|
# my_dict2 = dict() # my_dict2={}
|
||||||
|
# print(f"my_dict的内容是{my_dict},类型 为{type(my_dict)}")
|
||||||
|
# print(f"my_dict2的内容是{my_dict2},类型 为{type(my_dict2)}")
|
||||||
|
# # 定义重复字典
|
||||||
|
# my_dict1 = {"王力宏": 99, "王力宏": 88}
|
||||||
|
# print(f"重复定义的结果{my_dict1}")
|
||||||
|
# 从字典基于key获取value
|
||||||
|
# result = my_dict["王力宏"]
|
||||||
|
# result1 = my_dict["林俊杰"]
|
||||||
|
# print(f"王力宏的考试分数为:{result}")
|
||||||
|
# print(f"王力宏的考试分数为:{result1}")
|
||||||
|
|
||||||
|
# # 字典嵌套
|
||||||
|
# stu_score_dict = {
|
||||||
|
# "王力宏":{
|
||||||
|
# "语文":77,
|
||||||
|
# "数学":88,
|
||||||
|
# "英语":66,
|
||||||
|
# },
|
||||||
|
# "周杰伦":{
|
||||||
|
# "语文":99,
|
||||||
|
# "数学":99,
|
||||||
|
# "英语":99,
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# score = stu_score_dict["周杰伦"]["语文"]
|
||||||
|
# print(f"周杰伦的语文信息为{score}")
|
||||||
|
|
||||||
|
# # 字典常用操作
|
||||||
|
# my_dict = {"周杰伦": 33, "林俊杰": 24, "张学友": 88}
|
||||||
|
# my_dict["张信哲"] = 32
|
||||||
|
# print(f"更新后my_dict结果是{my_dict}")
|
||||||
|
# my_dict["周杰伦"] = 38
|
||||||
|
# print(f"更新后my_dict结果是{my_dict}")
|
||||||
|
# # 删除元素
|
||||||
|
# score = my_dict.pop("周杰伦")
|
||||||
|
# print(f"字典中被删除了一个元素,结果为{my_dict},周杰伦的考试分数为{score}")
|
||||||
|
# my_dict.clear()
|
||||||
|
# print(f"字典被清空了,内容是{my_dict}")
|
||||||
|
# 获取全部的key
|
||||||
|
my_dict = {"周杰伦": 33, "林俊杰": 24, "张学友": 88}
|
||||||
|
keys = my_dict.keys()
|
||||||
|
print(f"字典的全部key是{keys}")
|
||||||
|
# 遍历字典
|
||||||
|
# 方式1通过获取全部的key来完成遍历
|
||||||
|
for key in my_dict.keys():
|
||||||
|
print(f"字典的key是:{key}")
|
||||||
|
print(f"字典的value是:{my_dict[key]}")
|
||||||
|
# 方式2 直接对字典进行for循环,每次循环都是直接得到key
|
||||||
|
for key in my_dict:
|
||||||
|
print(f"字典的key是:{key}")
|
||||||
|
print(f"字典的value是:{my_dict[key]}")
|
||||||
|
# 统计字典的数量,len()
|
||||||
|
num = len(my_dict)
|
||||||
|
print(f"字典中的key数量为{num}")
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
# 函数的多返回值
|
||||||
|
# def test_return():
|
||||||
|
# return 1,"hello",True
|
||||||
|
#
|
||||||
|
# x,y,z=test_return()
|
||||||
|
# print(x)
|
||||||
|
# print(y)
|
||||||
|
# print(z)
|
||||||
|
|
||||||
|
# 函数的多种传参方式
|
||||||
|
def user_info(name, age, gender):
|
||||||
|
print(f"姓名是{name},年龄是{age},性别是{gender}")
|
||||||
|
|
||||||
|
|
||||||
|
# 位置参数
|
||||||
|
user_info('小明', 23, '男')
|
||||||
|
# 关键字参数
|
||||||
|
user_info(name='小王', age=33, gender='男')
|
||||||
|
user_info('小王', age=23, gender='女')
|
||||||
|
|
||||||
|
|
||||||
|
# 缺省参数
|
||||||
|
def user_info1(name, age, gender='男'):
|
||||||
|
print(f"姓名是{name},年龄是{age},性别是{gender}")
|
||||||
|
|
||||||
|
|
||||||
|
user_info1('小王', 23)
|
||||||
|
|
||||||
|
|
||||||
|
# 不定长参数
|
||||||
|
def user_info2(*args):
|
||||||
|
print(f"{args},{type(args)}")
|
||||||
|
|
||||||
|
|
||||||
|
user_info2(1, 2, 3, '小王')
|
||||||
|
|
||||||
|
|
||||||
|
def user_info3(**kwargs):
|
||||||
|
print(kwargs)
|
||||||
|
print(type(kwargs))
|
||||||
|
|
||||||
|
|
||||||
|
user_info3(姓名='小王', age=11, gender=23)
|
||||||
|
|
||||||
|
# 匿名函数
|
||||||
|
# 函数作为参数传递
|
||||||
|
def test_func(computer):
|
||||||
|
result=computer(1,2)
|
||||||
|
print(result)
|
||||||
|
|
||||||
|
|
||||||
|
def computer(x,y):
|
||||||
|
return x+y
|
||||||
|
|
||||||
|
|
||||||
|
test_func(computer)
|
||||||
|
#lambad匿名函数
|
||||||
|
def test_func1(computer):
|
||||||
|
result=computer(1,2)
|
||||||
|
print(result)
|
||||||
|
|
||||||
|
test_func1(lambda x,y:x*y)
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# 文件读取
|
||||||
|
# 文件打开
|
||||||
|
# import time
|
||||||
|
|
||||||
|
# f = open("d:program/测试.txt", "r", encoding='UTF-8')
|
||||||
|
# print(type(f))
|
||||||
|
# # 文件读取
|
||||||
|
# print(f.read(3))
|
||||||
|
# print(f.read()) # 第二次read会接着上次的读取
|
||||||
|
# readlines()读取
|
||||||
|
# print(f.readlines())
|
||||||
|
# print(type(f.readlines()))
|
||||||
|
# readline()读取
|
||||||
|
# print(f.readline())
|
||||||
|
# for循环读取 文件
|
||||||
|
# for line in f:
|
||||||
|
# print(line)
|
||||||
|
# 文件暂停
|
||||||
|
# time.sleep(2333)
|
||||||
|
# f.close()
|
||||||
|
|
||||||
|
# #with open 语法操作
|
||||||
|
# with open("d:program/测试.txt", "r", encoding='UTF-8') as f:
|
||||||
|
# for line in f:
|
||||||
|
# print(line)
|
||||||
|
#
|
||||||
|
# time.sleep(30000)
|
||||||
|
#
|
||||||
|
# # 文件写入
|
||||||
|
# f = open("d:program/测试1.txt", "w", encoding="UTF-8")
|
||||||
|
# f.write("hello world")
|
||||||
|
# # f.flush()
|
||||||
|
# # time.sleep(30000)
|
||||||
|
# f.close() # close()内置flush功能
|
||||||
|
|
||||||
|
# 文件备份
|
||||||
|
fw = open("D:\program/bill.txt.bak", 'w', encoding="UTF-8")
|
||||||
|
f = open("D:\program/12.txt", 'r', encoding="UTF-8")
|
||||||
|
for line in f:
|
||||||
|
line=line.strip()
|
||||||
|
if line.split(",")[4] == "测试":
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
fw.write(line)
|
||||||
|
fw.write("\n")
|
||||||
|
f.close()
|
||||||
|
fw.close()
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# # 基本捕获异常语法
|
||||||
|
# try:
|
||||||
|
# f = open("D:/program/abc.txt", 'r', encoding='UTF-8')
|
||||||
|
# except:
|
||||||
|
# print("出现异常,文件不存在")
|
||||||
|
#
|
||||||
|
# # 捕获指定异常
|
||||||
|
# try:
|
||||||
|
# print(name)
|
||||||
|
# except NameError as a:
|
||||||
|
# print("出现变量未定义的异常")
|
||||||
|
#
|
||||||
|
# # 捕获多个异常
|
||||||
|
# try:
|
||||||
|
# 1 / 0
|
||||||
|
# except(NameError, ZeroDivisionError) as b:
|
||||||
|
# print("出现变量未定义,或者除以0的异常错误")
|
||||||
|
#
|
||||||
|
# # 捕获所有异常
|
||||||
|
# try:
|
||||||
|
# 1 / 0
|
||||||
|
# except Exception as c:
|
||||||
|
# print("出现异常")
|
||||||
|
# else:
|
||||||
|
# print("无异常")
|
||||||
|
|
||||||
|
# 异常传递
|
||||||
|
def func1():
|
||||||
|
print("开始执行func1")
|
||||||
|
1/0
|
||||||
|
print("结束func1执行")
|
||||||
|
|
||||||
|
def func2():
|
||||||
|
print("开始执行func2")
|
||||||
|
func1()
|
||||||
|
print("结束func2执行")
|
||||||
|
|
||||||
|
def main():
|
||||||
|
try:
|
||||||
|
func2()
|
||||||
|
except Exception as d:
|
||||||
|
print(f"出现异常,异常信息为{d}")
|
||||||
|
|
||||||
|
main()
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
def test():
|
||||||
|
print("我是模块1")
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
def test():
|
||||||
|
print("我是模块2")
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
def test(a, b):
|
||||||
|
print(a + b)
|
||||||
|
|
||||||
|
|
||||||
|
def test1(a, b):
|
||||||
|
print(a - b)
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = ["test1"]# 只作用于*,可以手动单独导入函数
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
test(1, 2)
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
def test(a, b):
|
||||||
|
print(a - b)
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# # 模块导入
|
||||||
|
# import time
|
||||||
|
# time.sleep(5)
|
||||||
|
# print("你好")
|
||||||
|
|
||||||
|
# from time import sleep
|
||||||
|
# sleep(2)
|
||||||
|
# print(2)
|
||||||
|
|
||||||
|
# 导入自定义模块
|
||||||
|
# import my_test as t
|
||||||
|
# .test(2,4)
|
||||||
|
# # 导入不同模块同名的功能
|
||||||
|
# from my_test import test
|
||||||
|
# from my_test1 import test
|
||||||
|
#
|
||||||
|
# test(2,5)# 下面的会将上面的覆盖掉
|
||||||
|
|
||||||
|
# __main__变量
|
||||||
|
# import my_test as t
|
||||||
|
# 调用的模块本身调用了函数,则调用时候会输出结果
|
||||||
|
|
||||||
|
# # __all__ 变量
|
||||||
|
# from my_test import *
|
||||||
|
#
|
||||||
|
# test(1, 2)
|
||||||
|
# test1(3, 8) # 未定义时,可以使用任意函数
|
||||||
|
# # all定义时,只能导入定义的函数,但只作用于*,可以手动单独导入函数
|
||||||
|
|
||||||
|
# python的包
|
||||||
|
import my_package.my_test1
|
||||||
|
my_package.my_test1.test()
|
||||||
|
from my_package.my_test2 import test
|
||||||
|
test()
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# 删除HTML标签
|
||||||
|
|
||||||
|
import requests
|
||||||
|
import re
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
|
# 检索网页得到源文本
|
||||||
|
data = requests.get('http://www.gutenberg.org/cache/epub/8001/pg8001.html')
|
||||||
|
content = data.content
|
||||||
|
print(content[1163:2200])
|
||||||
|
|
||||||
|
def strip_html_tags(text):
|
||||||
|
soup = BeautifulSoup(text,"html.parser")
|
||||||
|
[s.extract() for s in soup(['iframe','script'])]# 去除iframe,script标签
|
||||||
|
stripped_text = soup.get_text()
|
||||||
|
stripped_text = re.sub(r'[\r|\n|\r\n]','\n',stripped_text)# re去除\r|\n|\r\n
|
||||||
|
return stripped_text
|
||||||
|
|
||||||
|
clean_content= strip_html_tags(content)
|
||||||
|
print(clean_content[1163:2200])
|
||||||
|
|
||||||
|
|
||||||
|
data.close()
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
import nltk
|
||||||
|
from nltk.corpus import gutenberg
|
||||||
|
from pprint import pprint
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
# loading text corpora
|
||||||
|
alice = gutenberg.raw(fileids='carroll-alice.txt')
|
||||||
|
sample_text = ("US unveils world's most powerful supercomputer, beats China. "
|
||||||
|
"The US has unveiled the world's most powerful supercomputer called 'Summit', "
|
||||||
|
"beating the previous record-holder China's Sunway TaihuLight. With a peak performance "
|
||||||
|
"of 200,000 trillion calculations per second, it is over twice as fast as Sunway TaihuLight, "
|
||||||
|
"which is capable of 93,000 trillion calculations per second. Summit has 4,608 servers, "
|
||||||
|
"which reportedly take up the size of two tennis courts.")
|
||||||
|
|
||||||
|
# Alice in Wonderland语料库
|
||||||
|
# # Total characters in Alice in Wonderland
|
||||||
|
# len(alice)
|
||||||
|
#
|
||||||
|
# # First 100 characters in the corpus
|
||||||
|
# alice[0:100]
|
||||||
|
|
||||||
|
# 默认句子标记解释器
|
||||||
|
default_st = nltk.sent_tokenize
|
||||||
|
alice_sentences = default_st(text=alice)
|
||||||
|
sample_sentences = default_st(text=sample_text)
|
||||||
|
|
||||||
|
print('Total sentences in sample_text:', len(sample_sentences))
|
||||||
|
print('Sample text sentences :-')
|
||||||
|
print(np.array(sample_sentences))
|
||||||
|
|
||||||
|
print('\nTotal sentences in alice:', len(alice_sentences))
|
||||||
|
print('First 5 sentences in alice:-')
|
||||||
|
print(np.array(alice_sentences[0:5]))
|
||||||
|
|
||||||
|
# 默认单词标记解析
|
||||||
|
default_wt = nltk.word_tokenize
|
||||||
|
words = default_wt(sample_text)
|
||||||
|
np.array(words)
|
||||||
|
|
||||||
|
# TreebankWordTokenizer 原理基于正则
|
||||||
|
treebank_wt = nltk.TreebankWordTokenizer()
|
||||||
|
words = treebank_wt.tokenize(sample_text)
|
||||||
|
np.array(words)
|
||||||
|
|
||||||
|
# ToktokTokenizer 仅最后解析最后一句话
|
||||||
|
from nltk.tokenize.toktok import ToktokTokenizer
|
||||||
|
tokenizer = ToktokTokenizer()
|
||||||
|
words = tokenizer.tokenize(sample_text)
|
||||||
|
np.array(words)
|
||||||
|
|
||||||
|
# RegexpTokenizer 有两个主要参数
|
||||||
|
# pattern 用于构建标记解析器
|
||||||
|
# gaps 设置为True时用于查找标记符之间的间隙,繁殖查找标记符本身
|
||||||
|
TOKEN_PATTERN = r'\w+'
|
||||||
|
regex_wt = nltk.RegexpTokenizer(pattern=TOKEN_PATTERN,
|
||||||
|
gaps=False)
|
||||||
|
words = regex_wt.tokenize(sample_text)
|
||||||
|
np.array(words)
|
||||||
@@ -0,0 +1,118 @@
|
|||||||
|
import re
|
||||||
|
import nltk
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
import unicodedata
|
||||||
|
from contractions import CONTRACTION_MAP
|
||||||
|
# import contractions
|
||||||
|
import spacy
|
||||||
|
from nltk.tokenize.toktok import ToktokTokenizer
|
||||||
|
|
||||||
|
# html 处理
|
||||||
|
def strip_html_tags(text):
|
||||||
|
soup = BeautifulSoup(text,"html.parser")
|
||||||
|
[s.extract() for s in soup(['iframe','script'])]# 去除iframe,script标签
|
||||||
|
stripped_text = soup.get_text()
|
||||||
|
stripped_text = re.sub(r'[\r|\n|\r\n]','\n',stripped_text)# re去除\r|\n|\r\n
|
||||||
|
return stripped_text
|
||||||
|
|
||||||
|
# 删除重音字
|
||||||
|
def remove_accented_chars(text):
|
||||||
|
text = unicodedata.normalize('NFKD', text).encode('ascii', 'ignore').decode('utf-8', 'ignore')
|
||||||
|
return text
|
||||||
|
|
||||||
|
remove_accented_chars('Sómě Áccěntěd těxt')
|
||||||
|
|
||||||
|
# 扩展缩写词
|
||||||
|
def expand_contractions(text, contraction_mapping=CONTRACTION_MAP):
|
||||||
|
|
||||||
|
contractions_pattern = re.compile('({})'.format('|'.join(contraction_mapping.keys())),
|
||||||
|
flags=re.IGNORECASE|re.DOTALL)
|
||||||
|
def expand_match(contraction):
|
||||||
|
match = contraction.group(0)
|
||||||
|
first_char = match[0]
|
||||||
|
expanded_contraction = contraction_mapping.get(match) \
|
||||||
|
if contraction_mapping.get(match) \
|
||||||
|
else contraction_mapping.get(match.lower())
|
||||||
|
expanded_contraction = first_char+expanded_contraction[1:]
|
||||||
|
return expanded_contraction
|
||||||
|
|
||||||
|
expanded_text = contractions_pattern.sub(expand_match, text)
|
||||||
|
expanded_text = re.sub("'", "", expanded_text)
|
||||||
|
return expanded_text
|
||||||
|
|
||||||
|
# 词形还原
|
||||||
|
# use spacy.load('en') if you have downloaded the language model en directly after install spacy
|
||||||
|
nlp = spacy.load('en_core', parse=True, tag=True, entity=True)
|
||||||
|
text = 'My system keeps crashing his crashed yesterday, ours crashes daily'
|
||||||
|
|
||||||
|
def lemmatize_text(text):
|
||||||
|
text = nlp(text)
|
||||||
|
text = ' '.join([word.lemma_ if word.lemma_ != '-PRON-' else word.text for word in text])
|
||||||
|
return text
|
||||||
|
|
||||||
|
lemmatize_text("My system keeps crashing! his crashed yesterday, ours crashes daily")
|
||||||
|
|
||||||
|
# 去除特殊字符
|
||||||
|
def remove_special_characters(text, remove_digits=False):
|
||||||
|
pattern = r'[^a-zA-z0-9\s]' if not remove_digits else r'[^a-zA-z\s]'
|
||||||
|
text = re.sub(pattern, '', text)
|
||||||
|
return text
|
||||||
|
|
||||||
|
remove_special_characters("Well this was fun! What do you think? 123#@!",
|
||||||
|
remove_digits=True)
|
||||||
|
|
||||||
|
# 去除停用词
|
||||||
|
tokenizer = ToktokTokenizer()
|
||||||
|
stopword_list = nltk.corpus.stopwords.words('english')
|
||||||
|
def remove_stopwords(text, is_lower_case=False, stopwords=stopword_list):
|
||||||
|
tokens = tokenizer.tokenize(text)
|
||||||
|
tokens = [token.strip() for token in tokens]
|
||||||
|
if is_lower_case:
|
||||||
|
filtered_tokens = [token for token in tokens if token not in stopwords]
|
||||||
|
else:
|
||||||
|
filtered_tokens = [token for token in tokens if token.lower() not in stopwords]
|
||||||
|
filtered_text = ' '.join(filtered_tokens)
|
||||||
|
return filtered_text
|
||||||
|
|
||||||
|
remove_stopwords("The, and, if are stopwords, computer is not")
|
||||||
|
|
||||||
|
def normalize_corpus(corpus, html_stripping=True, contraction_expansion=True,
|
||||||
|
accented_char_removal=True, text_lower_case=True,
|
||||||
|
text_lemmatization=True, special_char_removal=True,
|
||||||
|
stopword_removal=True, remove_digits=True):
|
||||||
|
|
||||||
|
normalized_corpus = []
|
||||||
|
# normalize each document in the corpus
|
||||||
|
for doc in corpus:
|
||||||
|
# strip HTML
|
||||||
|
if html_stripping:
|
||||||
|
doc = strip_html_tags(doc)
|
||||||
|
# remove accented characters
|
||||||
|
if accented_char_removal:
|
||||||
|
doc = remove_accented_chars(doc)
|
||||||
|
# expand contractions
|
||||||
|
if contraction_expansion:
|
||||||
|
doc = expand_contractions(doc)
|
||||||
|
# lowercase the text
|
||||||
|
if text_lower_case:
|
||||||
|
doc = doc.lower()
|
||||||
|
# remove extra newlines
|
||||||
|
doc = re.sub(r'[\r|\n|\r\n]+', ' ',doc)
|
||||||
|
# lemmatize text
|
||||||
|
if text_lemmatization:
|
||||||
|
doc = lemmatize_text(doc)
|
||||||
|
# remove special characters and\or digits
|
||||||
|
if special_char_removal:
|
||||||
|
# insert spaces between special characters to isolate them
|
||||||
|
special_char_pattern = re.compile(r'([{.(-)!}])')
|
||||||
|
doc = special_char_pattern.sub(" \\1 ", doc)
|
||||||
|
doc = remove_special_characters(doc, remove_digits=remove_digits)
|
||||||
|
# remove extra whitespace
|
||||||
|
doc = re.sub(' +', ' ', doc)
|
||||||
|
# remove stopwords
|
||||||
|
if stopword_removal:
|
||||||
|
doc = remove_stopwords(doc, is_lower_case=text_lower_case)
|
||||||
|
|
||||||
|
normalized_corpus.append(doc)
|
||||||
|
|
||||||
|
return normalized_corpus
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import re
|
||||||
|
|
||||||
|
match = re.search(r'[1-9]\d{5}', 'bad116105sfa', flags=0)
|
||||||
|
print(match.group(0))
|
||||||
|
|
||||||
|
match1 = re.match(r'[1-9]\d{5}', 'bad116105sfa', flags=0)
|
||||||
|
# print(match1.group()) # 返回类型为空变量,不用if判断会报错
|
||||||
|
if match1:
|
||||||
|
print(match1.group()) # if 判断出match1为空,输出结果为空
|
||||||
|
# 原因为字符串开始为字母,match1匹配不到字符串
|
||||||
|
|
||||||
|
match2 = re.match(r'[1-9]\d{5}', '116105sfa', flags=0)
|
||||||
|
if match2:
|
||||||
|
print(match2.group()) # 去掉头部字母,则可以取出
|
||||||
|
|
||||||
|
ls = re.findall(r'[1-9]\d{5}', '116105sfa116110sadf', flags=0)
|
||||||
|
print(ls) # 输出类型为列表
|
||||||
|
|
||||||
|
ls1 = re.split(r'[1-9]\d{5}', 'sad116105ej116110')
|
||||||
|
print(ls1) # ['sad', 'ej', '']
|
||||||
|
ls2 = re.split(r'[1-9]\d{5}', 'sad116105ej116110', maxsplit=1)
|
||||||
|
print(ls2) # ['sad', 'ej116110'],剩余部分不做匹配
|
||||||
|
|
||||||
|
for m1 in re.finditer(r'[1-9]\d{5}', '116105sfa 116110sadf'):
|
||||||
|
if m1:
|
||||||
|
print(m1.group(0))
|
||||||
|
|
||||||
|
match14 = re.sub(r'[1-9]\d{5}', 'helloworld', '116105sfa 116110sadf', count=1)
|
||||||
|
print(match14)
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
from bs4 import BeautifulSoup
|
||||||
|
import requests
|
||||||
|
|
||||||
|
url = "https://python123.io/ws/demo.html"
|
||||||
|
try:
|
||||||
|
r = requests.get(url, timeout=20)
|
||||||
|
r.raise_for_status()
|
||||||
|
r.encoding = r.apparent_encoding
|
||||||
|
except:
|
||||||
|
print("出现异常")
|
||||||
|
|
||||||
|
demo = r.text
|
||||||
|
|
||||||
|
soup = BeautifulSoup(demo, "html.parser")
|
||||||
|
|
||||||
|
# 标签
|
||||||
|
print(soup.title) # 获取title标签的内容
|
||||||
|
|
||||||
|
# 标签的名字
|
||||||
|
tag = soup.a
|
||||||
|
print(tag) # 获得了第一个a标签的内容
|
||||||
|
print(soup.a.name)
|
||||||
|
print(soup.a.parent.name) # 查询a标签父标签名字
|
||||||
|
print(soup.a.parent.parent.name) # 查询p标签父标签名字
|
||||||
|
|
||||||
|
# 标签的属性
|
||||||
|
print(tag.attrs) # 查询标签的属性
|
||||||
|
# 结果{'href': 'http://www.icourse163.org/course/BIT-268001', 'class': ['py1'], 'id': 'link1'}
|
||||||
|
print(tag.attrs['class']) # 查询class属性内容
|
||||||
|
# 结果['py1']
|
||||||
|
print(type(tag.attrs)) # <class 'dict'>
|
||||||
|
print(type(tag)) # <class 'bs4.element.Tag'>
|
||||||
|
|
||||||
|
# 标签内非属性字符串
|
||||||
|
print(soup.a) # 查询a标签内容
|
||||||
|
# <a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>
|
||||||
|
print(soup.a.string) # 查询a标签内非属性字符产
|
||||||
|
# Basic Python
|
||||||
|
print(soup.b) # <b>The demo python introduces several python courses.</b>
|
||||||
|
print(soup.b.string) # The demo python introduces several python courses.
|
||||||
|
# 由于b.string没有<b></b>
|
||||||
|
# 所以Navigable String 可以跨越多个标签属性的
|
||||||
|
print(type(soup.a.string)) # <class 'bs4.element.NavigableString'>
|
||||||
|
|
||||||
|
# 标签注释
|
||||||
|
newsoup = BeautifulSoup("<b><!-- This is a comment--></b><p>This is not a comment</p>", "html.parser")
|
||||||
|
print(newsoup.b.string)
|
||||||
|
print(newsoup.p.string)# 注释并未表明,因此区分注释需要用type()来区分
|
||||||
|
print(type(newsoup.b.string))
|
||||||
|
print(type(newsoup.p.string))
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"metadata": {},
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"source": "# Crawl4AI",
|
||||||
|
"id": "15b6b10304dc52ed"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"id": "initial_id",
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": true,
|
||||||
|
"ExecuteTime": {
|
||||||
|
"end_time": "2025-07-10T01:25:20.945463Z",
|
||||||
|
"start_time": "2025-07-10T01:25:18.137803Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"import asyncio\n",
|
||||||
|
"from crawl4ai import AsyncWebCrawler\n",
|
||||||
|
"async def main():\n",
|
||||||
|
" async with AsyncWebCrawler() as crawler:\n",
|
||||||
|
" result = await crawler.arun(\"https://example.com\")\n",
|
||||||
|
" print(result.markdown[:300]) # 打印前 300 个字符\n",
|
||||||
|
"if __name__ == \"__main__\":\n",
|
||||||
|
" asyncio.run(main())"
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"ename": "RuntimeError",
|
||||||
|
"evalue": "asyncio.run() cannot be called from a running event loop",
|
||||||
|
"output_type": "error",
|
||||||
|
"traceback": [
|
||||||
|
"\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
|
||||||
|
"\u001B[1;31mRuntimeError\u001B[0m Traceback (most recent call last)",
|
||||||
|
"Cell \u001B[1;32mIn[1], line 8\u001B[0m\n\u001B[0;32m 6\u001B[0m \u001B[38;5;28mprint\u001B[39m(result\u001B[38;5;241m.\u001B[39mmarkdown[:\u001B[38;5;241m300\u001B[39m]) \u001B[38;5;66;03m# 打印前 300 个字符\u001B[39;00m\n\u001B[0;32m 7\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;18m__name__\u001B[39m \u001B[38;5;241m==\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m__main__\u001B[39m\u001B[38;5;124m\"\u001B[39m:\n\u001B[1;32m----> 8\u001B[0m asyncio\u001B[38;5;241m.\u001B[39mrun(main())\n",
|
||||||
|
"File \u001B[1;32mD:\\ProgramTools\\Anaconda\\Lib\\asyncio\\runners.py:190\u001B[0m, in \u001B[0;36mrun\u001B[1;34m(main, debug, loop_factory)\u001B[0m\n\u001B[0;32m 161\u001B[0m \u001B[38;5;250m\u001B[39m\u001B[38;5;124;03m\"\"\"Execute the coroutine and return the result.\u001B[39;00m\n\u001B[0;32m 162\u001B[0m \n\u001B[0;32m 163\u001B[0m \u001B[38;5;124;03mThis function runs the passed coroutine, taking care of\u001B[39;00m\n\u001B[1;32m (...)\u001B[0m\n\u001B[0;32m 186\u001B[0m \u001B[38;5;124;03m asyncio.run(main())\u001B[39;00m\n\u001B[0;32m 187\u001B[0m \u001B[38;5;124;03m\"\"\"\u001B[39;00m\n\u001B[0;32m 188\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m events\u001B[38;5;241m.\u001B[39m_get_running_loop() \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[0;32m 189\u001B[0m \u001B[38;5;66;03m# fail fast with short traceback\u001B[39;00m\n\u001B[1;32m--> 190\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mRuntimeError\u001B[39;00m(\n\u001B[0;32m 191\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124masyncio.run() cannot be called from a running event loop\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[0;32m 193\u001B[0m \u001B[38;5;28;01mwith\u001B[39;00m Runner(debug\u001B[38;5;241m=\u001B[39mdebug, loop_factory\u001B[38;5;241m=\u001B[39mloop_factory) \u001B[38;5;28;01mas\u001B[39;00m runner:\n\u001B[0;32m 194\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m runner\u001B[38;5;241m.\u001B[39mrun(main)\n",
|
||||||
|
"\u001B[1;31mRuntimeError\u001B[0m: asyncio.run() cannot be called from a running event loop"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"execution_count": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"kernelspec": {
|
||||||
|
"display_name": "Python 3",
|
||||||
|
"language": "python",
|
||||||
|
"name": "python3"
|
||||||
|
},
|
||||||
|
"language_info": {
|
||||||
|
"codemirror_mode": {
|
||||||
|
"name": "ipython",
|
||||||
|
"version": 2
|
||||||
|
},
|
||||||
|
"file_extension": ".py",
|
||||||
|
"mimetype": "text/x-python",
|
||||||
|
"name": "python",
|
||||||
|
"nbconvert_exporter": "python",
|
||||||
|
"pygments_lexer": "ipython2",
|
||||||
|
"version": "2.7.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 5
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
import asyncio
|
||||||
|
from crawl4ai import AsyncWebCrawler
|
||||||
|
async def main():
|
||||||
|
async with AsyncWebCrawler() as crawler:
|
||||||
|
result = await crawler.arun("https://example.com")
|
||||||
|
print(result.markdown[:300]) # 打印前 300 个字符
|
||||||
|
if __name__ == "__main__":
|
||||||
|
asyncio.run(main())
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import asyncio
|
||||||
|
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode
|
||||||
|
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
browser_conf = BrowserConfig(headless=True) # 设为 False 以观察浏览器
|
||||||
|
|
||||||
|
run_conf = CrawlerRunConfig(
|
||||||
|
cache_mode=CacheMode.BYPASS # 此处为获取最新内容,默认为 CacheMode.ENABLED
|
||||||
|
)
|
||||||
|
async with AsyncWebCrawler(config=browser_conf) as crawler:
|
||||||
|
result = await crawler.arun(
|
||||||
|
url="https://example.com",
|
||||||
|
config=run_conf
|
||||||
|
)
|
||||||
|
print(result.markdown)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
asyncio.run(main())
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import asyncio
|
||||||
|
from crawl4ai.content_filter_strategy import PruningContentFilter
|
||||||
|
from crawl4ai.markdown_generation_strategy import DefaultMarkdownGenerator
|
||||||
|
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, CacheMode
|
||||||
|
|
||||||
|
# 创建 Markdown 生成器并配置内容过滤器
|
||||||
|
md_generator = DefaultMarkdownGenerator(
|
||||||
|
content_filter=PruningContentFilter(threshold=0.4, threshold_type="fixed")
|
||||||
|
)
|
||||||
|
|
||||||
|
# 配置爬虫运行参数
|
||||||
|
config = CrawlerRunConfig(
|
||||||
|
cache_mode=CacheMode.BYPASS, # 跳过缓存,每次重新抓取页面
|
||||||
|
markdown_generator=md_generator # 使用自定义的 Markdown 生成器
|
||||||
|
)
|
||||||
|
|
||||||
|
# 主函数必须是 async def
|
||||||
|
async def main():
|
||||||
|
async with AsyncWebCrawler() as crawler:
|
||||||
|
result = await crawler.arun("https://news.ycombinator.com", config=config)
|
||||||
|
print("原始 Markdown 长度:", len(result.markdown.raw_markdown))
|
||||||
|
print("过滤后 Markdown 长度:", len(result.markdown.fit_markdown))
|
||||||
|
|
||||||
|
# 启动异步任务
|
||||||
|
if __name__ == "__main__":
|
||||||
|
asyncio.run(main())
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
import asyncio
|
||||||
|
import json
|
||||||
|
from crawl4ai import AsyncWebCrawler
|
||||||
|
from crawl4ai.extraction_strategy import JsonCssExtractionStrategy
|
||||||
|
from pprint import pprint as pp
|
||||||
|
|
||||||
|
async def extract_books():
|
||||||
|
schema = {
|
||||||
|
"name": "Douban Book 250",
|
||||||
|
"baseSelector": "tr.item",
|
||||||
|
"type": "list",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"name": "title",
|
||||||
|
"type": "text",
|
||||||
|
"selector": ".pl2 > a",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "url",
|
||||||
|
"type": "attribute",
|
||||||
|
"selector": ".pl2 > a",
|
||||||
|
"attribute": "href",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "info",
|
||||||
|
"type": "text",
|
||||||
|
"selector": ".pl",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "rate",
|
||||||
|
"type": "text",
|
||||||
|
"selector": ".rating_nums",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "quote",
|
||||||
|
"type": "text",
|
||||||
|
"selector": "span.inq",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
extraction_strategy = JsonCssExtractionStrategy(schema, verbose=True)
|
||||||
|
all_books = []
|
||||||
|
|
||||||
|
async with AsyncWebCrawler(verbose=True) as crawler:
|
||||||
|
for i in range(10):
|
||||||
|
result = await crawler.arun(
|
||||||
|
url = f"https://book.douban.com/top250?start={i * 25}",
|
||||||
|
extraction_strategy=extraction_strategy,
|
||||||
|
bypass_cache=True,
|
||||||
|
)
|
||||||
|
assert result.success, "Failed to crawl the page"
|
||||||
|
|
||||||
|
books = json.loads(result.extracted_content)
|
||||||
|
all_books.extend(books)
|
||||||
|
print(f"成功提取第 {i + 1} 页的 {len(books)} 本图书")
|
||||||
|
|
||||||
|
# 避免请求过快
|
||||||
|
await asyncio.sleep(2)
|
||||||
|
|
||||||
|
# 保存所有图书数据到文件
|
||||||
|
with open("books.json", "w", encoding="utf-8") as f:
|
||||||
|
json.dump(all_books, f, ensure_ascii=False, indent=2)
|
||||||
|
|
||||||
|
print(f"\n总共提取了 {len(all_books)} 本图书")
|
||||||
|
return all_books
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
asyncio.run(extract_books())
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# Define here the models for your scraped items
|
||||||
|
#
|
||||||
|
# See documentation in:
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/items.html
|
||||||
|
|
||||||
|
import scrapy
|
||||||
|
|
||||||
|
|
||||||
|
class GameItem(scrapy.Item):
|
||||||
|
# define the fields for your item here like:
|
||||||
|
# name = scrapy.Field()
|
||||||
|
pass
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
# Define here the models for your spider middleware
|
||||||
|
#
|
||||||
|
# See documentation in:
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/spider-middleware.html
|
||||||
|
|
||||||
|
from scrapy import signals
|
||||||
|
|
||||||
|
# useful for handling different item types with a single interface
|
||||||
|
from itemadapter import is_item, ItemAdapter
|
||||||
|
|
||||||
|
|
||||||
|
class GameSpiderMiddleware:
|
||||||
|
# Not all methods need to be defined. If a method is not defined,
|
||||||
|
# scrapy acts as if the spider middleware does not modify the
|
||||||
|
# passed objects.
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_crawler(cls, crawler):
|
||||||
|
# This method is used by Scrapy to create your spiders.
|
||||||
|
s = cls()
|
||||||
|
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
|
||||||
|
return s
|
||||||
|
|
||||||
|
def process_spider_input(self, response, spider):
|
||||||
|
# Called for each response that goes through the spider
|
||||||
|
# middleware and into the spider.
|
||||||
|
|
||||||
|
# Should return None or raise an exception.
|
||||||
|
return None
|
||||||
|
|
||||||
|
def process_spider_output(self, response, result, spider):
|
||||||
|
# Called with the results returned from the Spider, after
|
||||||
|
# it has processed the response.
|
||||||
|
|
||||||
|
# Must return an iterable of Request, or item objects.
|
||||||
|
for i in result:
|
||||||
|
yield i
|
||||||
|
|
||||||
|
def process_spider_exception(self, response, exception, spider):
|
||||||
|
# Called when a spider or process_spider_input() method
|
||||||
|
# (from other spider middleware) raises an exception.
|
||||||
|
|
||||||
|
# Should return either None or an iterable of Request or item objects.
|
||||||
|
pass
|
||||||
|
|
||||||
|
def process_start_requests(self, start_requests, spider):
|
||||||
|
# Called with the start requests of the spider, and works
|
||||||
|
# similarly to the process_spider_output() method, except
|
||||||
|
# that it doesn’t have a response associated.
|
||||||
|
|
||||||
|
# Must return only requests (not items).
|
||||||
|
for r in start_requests:
|
||||||
|
yield r
|
||||||
|
|
||||||
|
def spider_opened(self, spider):
|
||||||
|
spider.logger.info("Spider opened: %s" % spider.name)
|
||||||
|
|
||||||
|
|
||||||
|
class GameDownloaderMiddleware:
|
||||||
|
# Not all methods need to be defined. If a method is not defined,
|
||||||
|
# scrapy acts as if the downloader middleware does not modify the
|
||||||
|
# passed objects.
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_crawler(cls, crawler):
|
||||||
|
# This method is used by Scrapy to create your spiders.
|
||||||
|
s = cls()
|
||||||
|
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
|
||||||
|
return s
|
||||||
|
|
||||||
|
def process_request(self, request, spider):
|
||||||
|
# Called for each request that goes through the downloader
|
||||||
|
# middleware.
|
||||||
|
|
||||||
|
# Must either:
|
||||||
|
# - return None: continue processing this request
|
||||||
|
# - or return a Response object
|
||||||
|
# - or return a Request object
|
||||||
|
# - or raise IgnoreRequest: process_exception() methods of
|
||||||
|
# installed downloader middleware will be called
|
||||||
|
return None
|
||||||
|
|
||||||
|
def process_response(self, request, response, spider):
|
||||||
|
# Called with the response returned from the downloader.
|
||||||
|
|
||||||
|
# Must either;
|
||||||
|
# - return a Response object
|
||||||
|
# - return a Request object
|
||||||
|
# - or raise IgnoreRequest
|
||||||
|
return response
|
||||||
|
|
||||||
|
def process_exception(self, request, exception, spider):
|
||||||
|
# Called when a download handler or a process_request()
|
||||||
|
# (from other downloader middleware) raises an exception.
|
||||||
|
|
||||||
|
# Must either:
|
||||||
|
# - return None: continue processing this exception
|
||||||
|
# - return a Response object: stops process_exception() chain
|
||||||
|
# - return a Request object: stops process_exception() chain
|
||||||
|
pass
|
||||||
|
|
||||||
|
def spider_opened(self, spider):
|
||||||
|
spider.logger.info("Spider opened: %s" % spider.name)
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Define your item pipelines here
|
||||||
|
#
|
||||||
|
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
|
||||||
|
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
|
||||||
|
|
||||||
|
|
||||||
|
# useful for handling different item types with a single interface
|
||||||
|
from itemadapter import ItemAdapter
|
||||||
|
|
||||||
|
# 管道默认不生效,需要在setting中开启管道·
|
||||||
|
class GamePipeline:
|
||||||
|
def process_item(self, item, spider):# item是数据 spider是爬虫
|
||||||
|
print(item)
|
||||||
|
print(spider.name)
|
||||||
|
return item
|
||||||
|
|
||||||
|
class NewPipeline:
|
||||||
|
def process_item(self, item, spider):# item是数据 spider是爬虫
|
||||||
|
item['love']='i love zhou'
|
||||||
|
return item
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
# Scrapy settings for game project
|
||||||
|
#
|
||||||
|
# For simplicity, this file contains only settings considered important or
|
||||||
|
# commonly used. You can find more settings consulting the documentation:
|
||||||
|
#
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/settings.html
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/spider-middleware.html
|
||||||
|
|
||||||
|
BOT_NAME = "game"
|
||||||
|
|
||||||
|
SPIDER_MODULES = ["game.spiders"]
|
||||||
|
NEWSPIDER_MODULE = "game.spiders"
|
||||||
|
|
||||||
|
LOG_LEVEL="WARNING"
|
||||||
|
# 日志级别:DEBUG,INFO,WARNING,ERROR,CRITICAL
|
||||||
|
|
||||||
|
# Crawl responsibly by identifying yourself (and your website) on the user-agent
|
||||||
|
#USER_AGENT = "game (+http://www.yourdomain.com)"
|
||||||
|
|
||||||
|
# Obey robots.txt rules
|
||||||
|
ROBOTSTXT_OBEY = True
|
||||||
|
|
||||||
|
# Configure maximum concurrent requests performed by Scrapy (default: 16)
|
||||||
|
#CONCURRENT_REQUESTS = 32
|
||||||
|
|
||||||
|
# Configure a delay for requests for the same website (default: 0)
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
|
||||||
|
# See also autothrottle settings and docs
|
||||||
|
#DOWNLOAD_DELAY = 3
|
||||||
|
# The download delay setting will honor only one of:
|
||||||
|
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
|
||||||
|
#CONCURRENT_REQUESTS_PER_IP = 16
|
||||||
|
|
||||||
|
# Disable cookies (enabled by default)
|
||||||
|
#COOKIES_ENABLED = False
|
||||||
|
|
||||||
|
# Disable Telnet Console (enabled by default)
|
||||||
|
#TELNETCONSOLE_ENABLED = False
|
||||||
|
|
||||||
|
# Override the default request headers:
|
||||||
|
#DEFAULT_REQUEST_HEADERS = {
|
||||||
|
# "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
||||||
|
# "Accept-Language": "en",
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable or disable spider middlewares
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
|
||||||
|
#SPIDER_MIDDLEWARES = {
|
||||||
|
# "game.middlewares.GameSpiderMiddleware": 543,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable or disable downloader middlewares
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
|
||||||
|
#DOWNLOADER_MIDDLEWARES = {
|
||||||
|
# "game.middlewares.GameDownloaderMiddleware": 543,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable or disable extensions
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/extensions.html
|
||||||
|
#EXTENSIONS = {
|
||||||
|
# "scrapy.extensions.telnet.TelnetConsole": None,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Configure item pipelines
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
|
||||||
|
ITEM_PIPELINES = {
|
||||||
|
"game.pipelines.GamePipeline": 300,
|
||||||
|
# "game.pipelines.NewPipeline": 299,
|
||||||
|
}
|
||||||
|
|
||||||
|
# Enable and configure the AutoThrottle extension (disabled by default)
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
|
||||||
|
#AUTOTHROTTLE_ENABLED = True
|
||||||
|
# The initial download delay
|
||||||
|
#AUTOTHROTTLE_START_DELAY = 5
|
||||||
|
# The maximum download delay to be set in case of high latencies
|
||||||
|
#AUTOTHROTTLE_MAX_DELAY = 60
|
||||||
|
# The average number of requests Scrapy should be sending in parallel to
|
||||||
|
# each remote server
|
||||||
|
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
|
||||||
|
# Enable showing throttling stats for every response received:
|
||||||
|
#AUTOTHROTTLE_DEBUG = False
|
||||||
|
|
||||||
|
# Enable and configure HTTP caching (disabled by default)
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
|
||||||
|
#HTTPCACHE_ENABLED = True
|
||||||
|
#HTTPCACHE_EXPIRATION_SECS = 0
|
||||||
|
#HTTPCACHE_DIR = "httpcache"
|
||||||
|
#HTTPCACHE_IGNORE_HTTP_CODES = []
|
||||||
|
#HTTPCACHE_STORAGE = "scrapy.extensions.httpcache.FilesystemCacheStorage"
|
||||||
|
|
||||||
|
# Set settings whose default value is deprecated to a future-proof value
|
||||||
|
REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7"
|
||||||
|
TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
|
||||||
|
FEED_EXPORT_ENCODING = "utf-8"
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# This package will contain the spiders of your Scrapy project
|
||||||
|
#
|
||||||
|
# Please refer to the documentation for information on how to create and manage
|
||||||
|
# your spiders.
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import scrapy
|
||||||
|
|
||||||
|
|
||||||
|
class XiaoSpider(scrapy.Spider):
|
||||||
|
name = "xiao" # 爬虫名字
|
||||||
|
allowed_domains = ["4399.com"] # 允许的域名
|
||||||
|
start_urls = ["http://www.4399.com/flash/"]
|
||||||
|
|
||||||
|
def parse(self, response): # 该方法默认处理解析
|
||||||
|
# print(response)
|
||||||
|
# 获取页面源代码
|
||||||
|
# print(response.text)
|
||||||
|
# 提取数据
|
||||||
|
# response.xpath()
|
||||||
|
# response.css()
|
||||||
|
|
||||||
|
# 获取页面所有游戏名称
|
||||||
|
# txt = response.xpath('//ul[@class="n-game cf"]/li/a/b/text()').extract()# 提取内容
|
||||||
|
# print(txt)
|
||||||
|
|
||||||
|
# 分块提取数据
|
||||||
|
li_list = response.xpath('//ul[@class="n-game cf"]/li')
|
||||||
|
for li in li_list:
|
||||||
|
# name = li.xpath("./a/b/text()")
|
||||||
|
name = li.xpath("./a/b/text()").extract_first() # 提取一项内容,如果没有,返回none
|
||||||
|
categroy = li.xpath("./em/a/text()").extract_first()
|
||||||
|
|
||||||
|
dic = {
|
||||||
|
"name": name,
|
||||||
|
"category": categroy
|
||||||
|
}
|
||||||
|
# 需要用yield将数据传给管道
|
||||||
|
yield dic # 省内存,如果返回的是数据,可以认为是给管道pipeline
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# Automatically created by: scrapy startproject
|
||||||
|
#
|
||||||
|
# For more information about the [deploy] section see:
|
||||||
|
# https://scrapyd.readthedocs.io/en/latest/deploy.html
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
default = game.settings
|
||||||
|
|
||||||
|
[deploy]
|
||||||
|
#url = http://localhost:6800/
|
||||||
|
project = game
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
import self as self
|
||||||
|
from selenium.webdriver import Chrome, Keys # 键盘操作
|
||||||
|
import time
|
||||||
|
from selenium.webdriver.chrome.options import Options
|
||||||
|
from selenium.webdriver.common.by import By
|
||||||
|
|
||||||
|
web = Chrome()
|
||||||
|
|
||||||
|
option = Options()
|
||||||
|
option.add_argument('--disable_blink_features=AutomationControlled')
|
||||||
|
|
||||||
|
web.get('https://t.bilibili.com/19929202306164175')
|
||||||
|
|
||||||
|
# 点击转发
|
||||||
|
test_poet1 = web.find_element(By.XPATH, r'//*[@id="app"]/div[2]/div/div/div[1]/div[4]/div[1]/div')
|
||||||
|
test_poet1.click()
|
||||||
|
# 防止不能加载不出来
|
||||||
|
time.sleep(2)
|
||||||
|
|
||||||
|
number = 0
|
||||||
|
al_list = web.find_elements(By.CLASS_NAME, 'bili-dyn-forward__item')
|
||||||
|
|
||||||
|
for al in al_list:
|
||||||
|
name = al.find_element(By.CLASS_NAME, 'default').text
|
||||||
|
content = al.find_element(By.CLASS_NAME, 'bili-rich-text__content').text
|
||||||
|
print(name, content)
|
||||||
|
number += 1
|
||||||
|
if number % 7 == 0:
|
||||||
|
web.execute_script('window.scrollTo(0,document.body.scrollHeight)')
|
||||||
|
# time.sleep(50000)
|
||||||
|
try:
|
||||||
|
web.find_element(By.XPATH,"/html/body").send_keys(Keys.UP)
|
||||||
|
|
||||||
|
time.sleep(50000)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
web.execute_script('window.scrollTo(0,document.body.scrollHeight)')
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
time.sleep(10000)
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,10 @@
|
|||||||
|
import scrapy
|
||||||
|
|
||||||
|
|
||||||
|
class Db250Spider(scrapy.Spider):
|
||||||
|
name = "db250"
|
||||||
|
allowed_domains = ["douban.com"]
|
||||||
|
start_urls = ["http://douban.com/"]
|
||||||
|
|
||||||
|
def parse(self, response):
|
||||||
|
pass
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
import scrapy
|
||||||
|
|
||||||
|
|
||||||
|
class DoubanSpider(scrapy.Spider):
|
||||||
|
name = "douban"
|
||||||
|
allowed_domains = ["douban.com"]
|
||||||
|
start_urls = ["http://douban.com/"]
|
||||||
|
|
||||||
|
def parse(self, response):
|
||||||
|
pass
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Define here the models for your scraped items
|
||||||
|
#
|
||||||
|
# See documentation in:
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/items.html
|
||||||
|
|
||||||
|
import scrapy
|
||||||
|
|
||||||
|
|
||||||
|
class DoubanItem(scrapy.Item):
|
||||||
|
# define the fields for your item here like:
|
||||||
|
name = scrapy.Field()
|
||||||
|
info = scrapy.Field()
|
||||||
|
score = scrapy.Field()
|
||||||
|
desc = scrapy.Field()
|
||||||
|
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
# Define here the models for your spider middleware
|
||||||
|
#
|
||||||
|
# See documentation in:
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/spider-middleware.html
|
||||||
|
import base64
|
||||||
|
|
||||||
|
from scrapy import signals
|
||||||
|
import random
|
||||||
|
from douban.settings import USER_AGENT_LIST
|
||||||
|
from douban.settings import PROXY_LIST
|
||||||
|
from .myextend import pro
|
||||||
|
|
||||||
|
# useful for handling different item types with a single interface
|
||||||
|
from itemadapter import is_item, ItemAdapter
|
||||||
|
|
||||||
|
|
||||||
|
class RandomUserAgent(object):
|
||||||
|
def process_request(self, request, spider):
|
||||||
|
ua = random.choice(USER_AGENT_LIST)
|
||||||
|
request.headers["'User-Agent'"] = ua
|
||||||
|
# print(request.headers)
|
||||||
|
|
||||||
|
|
||||||
|
class RandomProxy(object):
|
||||||
|
def process_request(self, request, spider):
|
||||||
|
proxy = random.choice(pro.proxy_list)
|
||||||
|
print(proxy)
|
||||||
|
|
||||||
|
username = "azonhgez"
|
||||||
|
password = "7lvu0dnm"
|
||||||
|
request.meta['proxy'] = "http://%(user)s:%(pwd)s@%(proxy)s/" % {"user": username, "pwd": password, "proxy": proxy}
|
||||||
|
|
||||||
|
# if "user_passwd" in proxy:
|
||||||
|
# # # 对账号密码进行base64编码
|
||||||
|
# # b64_up=base64.b64encode(proxy["user_passwd"].encode())
|
||||||
|
# # #设置认证
|
||||||
|
# # request.headers["Proxy-Authorization"] = "basic "+b64_up.decode()
|
||||||
|
# # #设置代理
|
||||||
|
# # request.meta['proxy']=proxy['ip_port']
|
||||||
|
# else:
|
||||||
|
# request.meta['proxy']=proxy['ip_port']
|
||||||
|
|
||||||
|
class DoubanSpiderMiddleware:
|
||||||
|
# Not all methods need to be defined. If a method is not defined,
|
||||||
|
# scrapy acts as if the spider middleware does not modify the
|
||||||
|
# passed objects.
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_crawler(cls, crawler):
|
||||||
|
# This method is used by Scrapy to create your spiders.
|
||||||
|
s = cls()
|
||||||
|
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
|
||||||
|
return s
|
||||||
|
|
||||||
|
def process_spider_input(self, response, spider):
|
||||||
|
# Called for each response that goes through the spider
|
||||||
|
# middleware and into the spider.
|
||||||
|
|
||||||
|
# Should return None or raise an exception.
|
||||||
|
return None
|
||||||
|
|
||||||
|
def process_spider_output(self, response, result, spider):
|
||||||
|
# Called with the results returned from the Spider, after
|
||||||
|
# it has processed the response.
|
||||||
|
|
||||||
|
# Must return an iterable of Request, or item objects.
|
||||||
|
for i in result:
|
||||||
|
yield i
|
||||||
|
|
||||||
|
def process_spider_exception(self, response, exception, spider):
|
||||||
|
# Called when a spider or process_spider_input() method
|
||||||
|
# (from other spider middleware) raises an exception.
|
||||||
|
|
||||||
|
# Should return either None or an iterable of Request or item objects.
|
||||||
|
pass
|
||||||
|
|
||||||
|
def process_start_requests(self, start_requests, spider):
|
||||||
|
# Called with the start requests of the spider, and works
|
||||||
|
# similarly to the process_spider_output() method, except
|
||||||
|
# that it doesn’t have a response associated.
|
||||||
|
|
||||||
|
# Must return only requests (not items).
|
||||||
|
for r in start_requests:
|
||||||
|
yield r
|
||||||
|
|
||||||
|
def spider_opened(self, spider):
|
||||||
|
spider.logger.info("Spider opened: %s" % spider.name)
|
||||||
|
|
||||||
|
|
||||||
|
class DoubanDownloaderMiddleware:
|
||||||
|
# Not all methods need to be defined. If a method is not defined,
|
||||||
|
# scrapy acts as if the downloader middleware does not modify the
|
||||||
|
# passed objects.
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_crawler(cls, crawler):
|
||||||
|
# This method is used by Scrapy to create your spiders.
|
||||||
|
s = cls()
|
||||||
|
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
|
||||||
|
return s
|
||||||
|
|
||||||
|
def process_request(self, request, spider):
|
||||||
|
# Called for each request that goes through the downloader
|
||||||
|
# middleware.
|
||||||
|
|
||||||
|
# Must either:
|
||||||
|
# - return None: continue processing this request
|
||||||
|
# - or return a Response object
|
||||||
|
# - or return a Request object
|
||||||
|
# - or raise IgnoreRequest: process_exception() methods of
|
||||||
|
# installed downloader middleware will be called
|
||||||
|
return None
|
||||||
|
|
||||||
|
def process_response(self, request, response, spider):
|
||||||
|
# Called with the response returned from the downloader.
|
||||||
|
|
||||||
|
# Must either;
|
||||||
|
# - return a Response object
|
||||||
|
# - return a Request object
|
||||||
|
# - or raise IgnoreRequest
|
||||||
|
return response
|
||||||
|
|
||||||
|
def process_exception(self, request, exception, spider):
|
||||||
|
# Called when a download handler or a process_request()
|
||||||
|
# (from other downloader middleware) raises an exception.
|
||||||
|
|
||||||
|
# Must either:
|
||||||
|
# - return None: continue processing this exception
|
||||||
|
# - return a Response object: stops process_exception() chain
|
||||||
|
# - return a Request object: stops process_exception() chain
|
||||||
|
pass
|
||||||
|
|
||||||
|
def spider_opened(self, spider):
|
||||||
|
spider.logger.info("Spider opened: %s" % spider.name)
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -- coding: utf-8 --
|
||||||
|
import time
|
||||||
|
import threading
|
||||||
|
|
||||||
|
import requests
|
||||||
|
from scrapy import signals
|
||||||
|
|
||||||
|
# 提取代理IP的api
|
||||||
|
api_url = 'https://kps.kdlapi.com/api/getkps/?secret_id=ou5nlcm9klazz4rhi8ht&signature=1ffl6otrop2on40eyeuxe46c0cavc9k6&num=10&pt=1&format=json&sep=1'
|
||||||
|
foo = True
|
||||||
|
|
||||||
|
class Proxy:
|
||||||
|
|
||||||
|
def __init__(self, ):
|
||||||
|
self._proxy_list = requests.get(api_url).json().get('data').get('proxy_list')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def proxy_list(self):
|
||||||
|
return self._proxy_list
|
||||||
|
|
||||||
|
@proxy_list.setter
|
||||||
|
def proxy_list(self, list):
|
||||||
|
self._proxy_list = list
|
||||||
|
|
||||||
|
|
||||||
|
pro = Proxy()
|
||||||
|
print(pro.proxy_list)
|
||||||
|
|
||||||
|
|
||||||
|
class MyExtend:
|
||||||
|
|
||||||
|
def __init__(self, crawler):
|
||||||
|
self.crawler = crawler
|
||||||
|
# 将自定义方法绑定到scrapy信号上,使程序与spider引擎同步启动与关闭
|
||||||
|
# scrapy信号文档: https://www.osgeo.cn/scrapy/topics/signals.html
|
||||||
|
# scrapy自定义拓展文档: https://www.osgeo.cn/scrapy/topics/extensions.html
|
||||||
|
crawler.signals.connect(self.start, signals.engine_started)
|
||||||
|
crawler.signals.connect(self.close, signals.spider_closed)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_crawler(cls, crawler):
|
||||||
|
return cls(crawler)
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
t = threading.Thread(target=self.extract_proxy)
|
||||||
|
t.start()
|
||||||
|
|
||||||
|
def extract_proxy(self):
|
||||||
|
while foo:
|
||||||
|
pro.proxy_list = requests.get(api_url).json().get('data').get('proxy_list')
|
||||||
|
#设置每15秒提取一次ip
|
||||||
|
time.sleep(15)
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
global foo
|
||||||
|
foo = False
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# Define your item pipelines here
|
||||||
|
#
|
||||||
|
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
|
||||||
|
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
|
||||||
|
|
||||||
|
|
||||||
|
# useful for handling different item types with a single interface
|
||||||
|
from itemadapter import ItemAdapter
|
||||||
|
|
||||||
|
|
||||||
|
class DoubanPipeline:
|
||||||
|
def process_item(self, item, spider):
|
||||||
|
return item
|
||||||
@@ -0,0 +1,119 @@
|
|||||||
|
# Scrapy settings for douban project
|
||||||
|
#
|
||||||
|
# For simplicity, this file contains only settings considered important or
|
||||||
|
# commonly used. You can find more settings consulting the documentation:
|
||||||
|
#
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/settings.html
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/spider-middleware.html
|
||||||
|
|
||||||
|
BOT_NAME = "douban"
|
||||||
|
|
||||||
|
SPIDER_MODULES = ["douban.spiders"]
|
||||||
|
NEWSPIDER_MODULE = "douban.spiders"
|
||||||
|
LOG_LEVEL="WARNING"
|
||||||
|
|
||||||
|
# Crawl responsibly by identifying yourself (and your website) on the user-agent
|
||||||
|
USER_AGENT = """
|
||||||
|
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"""
|
||||||
|
|
||||||
|
USER_AGENT_LIST = ["Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"
|
||||||
|
]
|
||||||
|
|
||||||
|
PROXY_LIST=[
|
||||||
|
{"ip_port":"119.96.179.83:16819","user_passwd":"7lvu0dnm"},
|
||||||
|
# {"ip_port":"185.195.107.254:23445"}
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
# Obey robots.txt rules
|
||||||
|
# ROBOTSTXT_OBEY = True
|
||||||
|
|
||||||
|
# Configure maximum concurrent requests performed by Scrapy (default: 16)
|
||||||
|
#CONCURRENT_REQUESTS = 32
|
||||||
|
|
||||||
|
# Configure a delay for requests for the same website (default: 0)
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
|
||||||
|
# See also autothrottle settings and docs
|
||||||
|
#DOWNLOAD_DELAY = 3
|
||||||
|
# The download delay setting will honor only one of:
|
||||||
|
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
|
||||||
|
#CONCURRENT_REQUESTS_PER_IP = 16
|
||||||
|
|
||||||
|
# Disable cookies (enabled by default)
|
||||||
|
#COOKIES_ENABLED = False
|
||||||
|
|
||||||
|
# Disable Telnet Console (enabled by default)
|
||||||
|
#TELNETCONSOLE_ENABLED = False
|
||||||
|
|
||||||
|
# Override the default request headers:
|
||||||
|
#DEFAULT_REQUEST_HEADERS = {
|
||||||
|
# "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
||||||
|
# "Accept-Language": "en",
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable or disable spider middlewares
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
|
||||||
|
#SPIDER_MIDDLEWARES = {
|
||||||
|
# "douban.middlewares.DoubanSpiderMiddleware": 543,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable or disable downloader middlewares
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
|
||||||
|
DOWNLOADER_MIDDLEWARES = {
|
||||||
|
# "douban.middlewares.DoubanDownloaderMiddleware": 543,
|
||||||
|
"douban.middlewares.RandomUserAgent": 542,
|
||||||
|
"douban.middlewares.RandomProxy": 541,
|
||||||
|
}
|
||||||
|
|
||||||
|
# Enable or disable extensions
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/extensions.html
|
||||||
|
#EXTENSIONS = {
|
||||||
|
# "scrapy.extensions.telnet.TelnetConsole": None,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Configure item pipelines
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
|
||||||
|
#ITEM_PIPELINES = {
|
||||||
|
# "douban.pipelines.DoubanPipeline": 300,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable and configure the AutoThrottle extension (disabled by default)
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
|
||||||
|
#AUTOTHROTTLE_ENABLED = True
|
||||||
|
# The initial download delay
|
||||||
|
#AUTOTHROTTLE_START_DELAY = 5
|
||||||
|
# The maximum download delay to be set in case of high latencies
|
||||||
|
#AUTOTHROTTLE_MAX_DELAY = 60
|
||||||
|
# The average number of requests Scrapy should be sending in parallel to
|
||||||
|
# each remote server
|
||||||
|
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
|
||||||
|
# Enable showing throttling stats for every response received:
|
||||||
|
#AUTOTHROTTLE_DEBUG = False
|
||||||
|
|
||||||
|
# Enable and configure HTTP caching (disabled by default)
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
|
||||||
|
#HTTPCACHE_ENABLED = True
|
||||||
|
#HTTPCACHE_EXPIRATION_SECS = 0
|
||||||
|
#HTTPCACHE_DIR = "httpcache"
|
||||||
|
#HTTPCACHE_IGNORE_HTTP_CODES = []
|
||||||
|
#HTTPCACHE_STORAGE = "scrapy.extensions.httpcache.FilesystemCacheStorage"
|
||||||
|
|
||||||
|
# Set settings whose default value is deprecated to a future-proof value
|
||||||
|
REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7"
|
||||||
|
TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
|
||||||
|
FEED_EXPORT_ENCODING = "utf-8"
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# This package will contain the spiders of your Scrapy project
|
||||||
|
#
|
||||||
|
# Please refer to the documentation for information on how to create and manage
|
||||||
|
# your spiders.
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
import scrapy
|
||||||
|
from douban.items import DoubanItem
|
||||||
|
|
||||||
|
class Db250Spider(scrapy.Spider):
|
||||||
|
name = "db250"
|
||||||
|
allowed_domains = ["douban.com"]
|
||||||
|
start_urls = ["https://movie.douban.com/top250"]
|
||||||
|
|
||||||
|
def parse(self, response):
|
||||||
|
el_list = response.xpath("//div[@class='info']")
|
||||||
|
|
||||||
|
|
||||||
|
for el in el_list:
|
||||||
|
item = DoubanItem()
|
||||||
|
item['name']=el.xpath("./div[1]/a/span[1]/text()").extract_first()
|
||||||
|
item['info']=el.xpath("./div[2]/p[1]/text()").extract_first()
|
||||||
|
item['score']=el.xpath("./div[2]/div/span[2]/text()").extract_first()
|
||||||
|
item['desc']=el.xpath("./p[2]/span/text()").extract_first()
|
||||||
|
# print(item)
|
||||||
|
yield item
|
||||||
|
|
||||||
|
|
||||||
|
url = response.xpath("//span[@class='next']/a/@href").extract_first()
|
||||||
|
if url != None:
|
||||||
|
url = response.urljoin(url)
|
||||||
|
yield scrapy.Request(
|
||||||
|
url=url
|
||||||
|
)
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# Automatically created by: scrapy startproject
|
||||||
|
#
|
||||||
|
# For more information about the [deploy] section see:
|
||||||
|
# https://scrapyd.readthedocs.io/en/latest/deploy.html
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
default = douban.settings
|
||||||
|
|
||||||
|
[deploy]
|
||||||
|
#url = http://localhost:6800/
|
||||||
|
project = douban
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
import scrapy
|
||||||
|
|
||||||
|
|
||||||
|
class Douban250Spider(scrapy.Spider):
|
||||||
|
name = "douban250"
|
||||||
|
allowed_domains = ["douban.com"]
|
||||||
|
start_urls = ["http://douban.com/"]
|
||||||
|
|
||||||
|
def parse(self, response):
|
||||||
|
pass
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# Define here the models for your scraped items
|
||||||
|
#
|
||||||
|
# See documentation in:
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/items.html
|
||||||
|
|
||||||
|
import scrapy
|
||||||
|
|
||||||
|
|
||||||
|
class GitItem(scrapy.Item):
|
||||||
|
# define the fields for your item here like:
|
||||||
|
# name = scrapy.Field()
|
||||||
|
pass
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
# Define here the models for your spider middleware
|
||||||
|
#
|
||||||
|
# See documentation in:
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/spider-middleware.html
|
||||||
|
|
||||||
|
from scrapy import signals
|
||||||
|
|
||||||
|
# useful for handling different item types with a single interface
|
||||||
|
from itemadapter import is_item, ItemAdapter
|
||||||
|
|
||||||
|
|
||||||
|
class GitSpiderMiddleware:
|
||||||
|
# Not all methods need to be defined. If a method is not defined,
|
||||||
|
# scrapy acts as if the spider middleware does not modify the
|
||||||
|
# passed objects.
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_crawler(cls, crawler):
|
||||||
|
# This method is used by Scrapy to create your spiders.
|
||||||
|
s = cls()
|
||||||
|
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
|
||||||
|
return s
|
||||||
|
|
||||||
|
def process_spider_input(self, response, spider):
|
||||||
|
# Called for each response that goes through the spider
|
||||||
|
# middleware and into the spider.
|
||||||
|
|
||||||
|
# Should return None or raise an exception.
|
||||||
|
return None
|
||||||
|
|
||||||
|
def process_spider_output(self, response, result, spider):
|
||||||
|
# Called with the results returned from the Spider, after
|
||||||
|
# it has processed the response.
|
||||||
|
|
||||||
|
# Must return an iterable of Request, or item objects.
|
||||||
|
for i in result:
|
||||||
|
yield i
|
||||||
|
|
||||||
|
def process_spider_exception(self, response, exception, spider):
|
||||||
|
# Called when a spider or process_spider_input() method
|
||||||
|
# (from other spider middleware) raises an exception.
|
||||||
|
|
||||||
|
# Should return either None or an iterable of Request or item objects.
|
||||||
|
pass
|
||||||
|
|
||||||
|
def process_start_requests(self, start_requests, spider):
|
||||||
|
# Called with the start requests of the spider, and works
|
||||||
|
# similarly to the process_spider_output() method, except
|
||||||
|
# that it doesn’t have a response associated.
|
||||||
|
|
||||||
|
# Must return only requests (not items).
|
||||||
|
for r in start_requests:
|
||||||
|
yield r
|
||||||
|
|
||||||
|
def spider_opened(self, spider):
|
||||||
|
spider.logger.info("Spider opened: %s" % spider.name)
|
||||||
|
|
||||||
|
|
||||||
|
class GitDownloaderMiddleware:
|
||||||
|
# Not all methods need to be defined. If a method is not defined,
|
||||||
|
# scrapy acts as if the downloader middleware does not modify the
|
||||||
|
# passed objects.
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_crawler(cls, crawler):
|
||||||
|
# This method is used by Scrapy to create your spiders.
|
||||||
|
s = cls()
|
||||||
|
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
|
||||||
|
return s
|
||||||
|
|
||||||
|
def process_request(self, request, spider):
|
||||||
|
# Called for each request that goes through the downloader
|
||||||
|
# middleware.
|
||||||
|
|
||||||
|
# Must either:
|
||||||
|
# - return None: continue processing this request
|
||||||
|
# - or return a Response object
|
||||||
|
# - or return a Request object
|
||||||
|
# - or raise IgnoreRequest: process_exception() methods of
|
||||||
|
# installed downloader middleware will be called
|
||||||
|
return None
|
||||||
|
|
||||||
|
def process_response(self, request, response, spider):
|
||||||
|
# Called with the response returned from the downloader.
|
||||||
|
|
||||||
|
# Must either;
|
||||||
|
# - return a Response object
|
||||||
|
# - return a Request object
|
||||||
|
# - or raise IgnoreRequest
|
||||||
|
return response
|
||||||
|
|
||||||
|
def process_exception(self, request, exception, spider):
|
||||||
|
# Called when a download handler or a process_request()
|
||||||
|
# (from other downloader middleware) raises an exception.
|
||||||
|
|
||||||
|
# Must either:
|
||||||
|
# - return None: continue processing this exception
|
||||||
|
# - return a Response object: stops process_exception() chain
|
||||||
|
# - return a Request object: stops process_exception() chain
|
||||||
|
pass
|
||||||
|
|
||||||
|
def spider_opened(self, spider):
|
||||||
|
spider.logger.info("Spider opened: %s" % spider.name)
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# Define your item pipelines here
|
||||||
|
#
|
||||||
|
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
|
||||||
|
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
|
||||||
|
|
||||||
|
|
||||||
|
# useful for handling different item types with a single interface
|
||||||
|
from itemadapter import ItemAdapter
|
||||||
|
|
||||||
|
|
||||||
|
class GitPipeline:
|
||||||
|
def process_item(self, item, spider):
|
||||||
|
return item
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
# Scrapy settings for git project
|
||||||
|
#
|
||||||
|
# For simplicity, this file contains only settings considered important or
|
||||||
|
# commonly used. You can find more settings consulting the documentation:
|
||||||
|
#
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/settings.html
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/spider-middleware.html
|
||||||
|
|
||||||
|
BOT_NAME = "git"
|
||||||
|
|
||||||
|
SPIDER_MODULES = ["git.spiders"]
|
||||||
|
NEWSPIDER_MODULE = "git.spiders"
|
||||||
|
LOG_LEVEL="WARNING"
|
||||||
|
|
||||||
|
# Crawl responsibly by identifying yourself (and your website) on the user-agent
|
||||||
|
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"
|
||||||
|
|
||||||
|
TLDEXTRACT_CACHE_DIR = False
|
||||||
|
|
||||||
|
# Obey robots.txt rules
|
||||||
|
# ROBOTSTXT_OBEY = True
|
||||||
|
|
||||||
|
# Configure maximum concurrent requests performed by Scrapy (default: 16)
|
||||||
|
#CONCURRENT_REQUESTS = 32
|
||||||
|
|
||||||
|
# Configure a delay for requests for the same website (default: 0)
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
|
||||||
|
# See also autothrottle settings and docs
|
||||||
|
#DOWNLOAD_DELAY = 3
|
||||||
|
# The download delay setting will honor only one of:
|
||||||
|
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
|
||||||
|
#CONCURRENT_REQUESTS_PER_IP = 16
|
||||||
|
|
||||||
|
# Disable cookies (enabled by default)
|
||||||
|
#COOKIES_ENABLED = False
|
||||||
|
|
||||||
|
# Disable Telnet Console (enabled by default)
|
||||||
|
#TELNETCONSOLE_ENABLED = False
|
||||||
|
|
||||||
|
# Override the default request headers:
|
||||||
|
#DEFAULT_REQUEST_HEADERS = {
|
||||||
|
# "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
||||||
|
# "Accept-Language": "en",
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable or disable spider middlewares
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
|
||||||
|
#SPIDER_MIDDLEWARES = {
|
||||||
|
# "git.middlewares.GitSpiderMiddleware": 543,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable or disable downloader middlewares
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
|
||||||
|
#DOWNLOADER_MIDDLEWARES = {
|
||||||
|
# "git.middlewares.GitDownloaderMiddleware": 543,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable or disable extensions
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/extensions.html
|
||||||
|
#EXTENSIONS = {
|
||||||
|
# "scrapy.extensions.telnet.TelnetConsole": None,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Configure item pipelines
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
|
||||||
|
#ITEM_PIPELINES = {
|
||||||
|
# "git.pipelines.GitPipeline": 300,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable and configure the AutoThrottle extension (disabled by default)
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
|
||||||
|
#AUTOTHROTTLE_ENABLED = True
|
||||||
|
# The initial download delay
|
||||||
|
#AUTOTHROTTLE_START_DELAY = 5
|
||||||
|
# The maximum download delay to be set in case of high latencies
|
||||||
|
#AUTOTHROTTLE_MAX_DELAY = 60
|
||||||
|
# The average number of requests Scrapy should be sending in parallel to
|
||||||
|
# each remote server
|
||||||
|
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
|
||||||
|
# Enable showing throttling stats for every response received:
|
||||||
|
#AUTOTHROTTLE_DEBUG = False
|
||||||
|
|
||||||
|
# Enable and configure HTTP caching (disabled by default)
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
|
||||||
|
#HTTPCACHE_ENABLED = True
|
||||||
|
#HTTPCACHE_EXPIRATION_SECS = 0
|
||||||
|
#HTTPCACHE_DIR = "httpcache"
|
||||||
|
#HTTPCACHE_IGNORE_HTTP_CODES = []
|
||||||
|
#HTTPCACHE_STORAGE = "scrapy.extensions.httpcache.FilesystemCacheStorage"
|
||||||
|
|
||||||
|
# Set settings whose default value is deprecated to a future-proof value
|
||||||
|
REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7"
|
||||||
|
TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
|
||||||
|
FEED_EXPORT_ENCODING = "utf-8"
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# This package will contain the spiders of your Scrapy project
|
||||||
|
#
|
||||||
|
# Please refer to the documentation for information on how to create and manage
|
||||||
|
# your spiders.
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
import scrapy
|
||||||
|
|
||||||
|
# 使用FormRequest发送post请求
|
||||||
|
|
||||||
|
class Git2Spider(scrapy.Spider):
|
||||||
|
name = "git2"
|
||||||
|
allowed_domains = ["github.com"]
|
||||||
|
start_urls = ["https://github.com/login"]
|
||||||
|
|
||||||
|
def parse(self, response):
|
||||||
|
# 从登录页面解析出post数据
|
||||||
|
token = response.xpath('//input[@name="authenticity_token"]/@value').extract_first()
|
||||||
|
|
||||||
|
post_data = {
|
||||||
|
'commit': 'Sign in',
|
||||||
|
'authenticity_token': token,
|
||||||
|
'login': ' 1415243231@qq.com',
|
||||||
|
'password': ' zy18742526670',
|
||||||
|
'webauthn-conditional': ' undefined',
|
||||||
|
'javascript-support': ' true',
|
||||||
|
'webauthn-support': ' supported',
|
||||||
|
'webauthn-iuvpaa-support': ' supported',
|
||||||
|
'return_to': 'https://github.com/login',
|
||||||
|
'timestamp': ' 1726731919711',
|
||||||
|
'timestamp_secret': '51cd0dd93807a1fdb0095203af8d9f45d864a1f3ca83b1268f6f659624804398'
|
||||||
|
}
|
||||||
|
|
||||||
|
# print(post_data)
|
||||||
|
# 针对url发送post请求
|
||||||
|
yield scrapy.FormRequest(
|
||||||
|
url="https://github.com/session",
|
||||||
|
callback=self.after_login,
|
||||||
|
formdata=post_data
|
||||||
|
)
|
||||||
|
|
||||||
|
def after_login(self, response):
|
||||||
|
yield scrapy.Request('https://github.com/PandaltsGo',callback=self.check_log)
|
||||||
|
|
||||||
|
def check_log(self,response):
|
||||||
|
title = response.xpath('//*[@id="581032515"]/span/text()').extract_first()
|
||||||
|
print(title)
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
import scrapy
|
||||||
|
|
||||||
|
#直接携带cookie字典请求
|
||||||
|
|
||||||
|
class GithubSpider(scrapy.Spider):
|
||||||
|
name = "github"
|
||||||
|
allowed_domains = ["github.com"]
|
||||||
|
start_urls = ["https://github.com/PandaltsGo"]
|
||||||
|
|
||||||
|
def start_requests(self):
|
||||||
|
url =self.start_urls[0]
|
||||||
|
cookies = '''_gh_sess=5ZDPStPAYwzU0t3by%2FpHC4UL4Fs2AiwfHyrhWN6C0vsUEpjtEVW5bjJGNIc6Lc8UfftkYNh2EYJzpcTsFIaEjnn6TfigTP0tcBvenlfICTwnJKidXXqEFgWdo2ou5gCBj%2BZMr0qS%2Bbf437FjJm0nuv0kcZiEI17sqfWkgL9UrTnievN62FcXakNMSXmxGdal12MQTHcA9makPHYPqdAm9J9w2%2BKnJKZXBeHnHB9pvYq5IZYHN%2BhndueA6W5%2B3M5%2FgwMdi0dniIyLiW7kgsD1ntV%2BclB4YUaiSBSut6PwonD9GlEyJYef%2FRlITnwWKyoNKpaWZy9SzLuDrS1vWI5z46Na2DDCjU5TqKdFI2afUfIq0JhTzkvUk40SnIHRZ2hZrzJd7t8cDfCDQronozMZscurF1mIHnITDSnQjHp0FImtVw1lbiuiMHyQ%2Bw41V9GM0TiRmJgZIWZ5F4I5kI68W%2FgM%2F5hRNlRrF26EWVmYTSINIfnkuY5kFThjK04OwoMCVd0d3yCua5qf%2FWX3XXl4Jzoj09JfqovsdqqezdAjzju06oVy5xh2RJz6VjA0BBTrxbVgBB91ybZ61XqdbWxXnm9AI9y6Y7AyY%2FUZp4BemfigBVdSE2gpU3S3VbwrmcjEzoAM8hv%2Bp37ROkl45teQ6aRE4Yh2xF26MYaMY5ffzjrweqfjeqIPJZO4qyIxEPNs7OTmzMTp87w1FodO6ZTdy0PvX1JVuHfVlHQuQUzo6ClrKaNsL0Fld7BahIEIgi8AbHRJyLgS7jsw1xhbRQ4ZCcvMRS%2B%2BBd%2Bh6KSEV27lX1dCNogvPRjFah38bFcbj35tw4pOUqdBkj%2BtvMKmQVLPrBJ%2BAa6lTjJqZa4s3P6uB5Ac%2BIMF--RnCQu9IfXR19B%2B3g--ZjZab0obtWOBIHl5EF%2FWRQ%3D%3D; path=/; secure; HttpOnly;'''
|
||||||
|
cookies = {data.split('=')[0]:data.split('=')[-1] for data in cookies.split(';')}
|
||||||
|
|
||||||
|
yield scrapy.Request(
|
||||||
|
url=url,
|
||||||
|
cookies=cookies,
|
||||||
|
callback=self.parse
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def parse(self, response):
|
||||||
|
title = response.xpath('//*[@id="581032515"]/span/text()').extract_first()
|
||||||
|
print(title)
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# Automatically created by: scrapy startproject
|
||||||
|
#
|
||||||
|
# For more information about the [deploy] section see:
|
||||||
|
# https://scrapyd.readthedocs.io/en/latest/deploy.html
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
default = git.settings
|
||||||
|
|
||||||
|
[deploy]
|
||||||
|
#url = http://localhost:6800/
|
||||||
|
project = git
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
|
def get_ip_text():
|
||||||
|
url = "http://www.ip138.com/ip.asp?ip="
|
||||||
|
header = {'User-agent':'Mozilla/5.0'}
|
||||||
|
try:
|
||||||
|
r = requests.get(url + '117.169.187.31', timeout=20,headers = header)
|
||||||
|
r.raise_for_status()
|
||||||
|
r.encoding = r.apparent_encoding
|
||||||
|
return r.text[-500:]
|
||||||
|
except:
|
||||||
|
print("出现错误")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print(get_ip_text())
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import requests
|
||||||
|
import time
|
||||||
|
|
||||||
|
#爬取100次网页所需时间
|
||||||
|
def get_HTML_Text():
|
||||||
|
i = 0
|
||||||
|
while i < 100:
|
||||||
|
try:
|
||||||
|
r = requests.get(url)
|
||||||
|
r.raise_for_status()
|
||||||
|
r.encoding = r.apparent_encoding
|
||||||
|
return r.status_code
|
||||||
|
except:
|
||||||
|
print("出现异常")
|
||||||
|
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
time1 = time.time()
|
||||||
|
url = "http://www.baidu.com"
|
||||||
|
u = 0 # 记录爬取异常次数
|
||||||
|
for i in range(100 + u):
|
||||||
|
if get_HTML_Text() == 200:
|
||||||
|
u = u
|
||||||
|
else:
|
||||||
|
u += 1
|
||||||
|
time2 =time.time()
|
||||||
|
print(f"爬取100次所需要的时间为{time2-time1}秒")
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# Automatically created by: scrapy startproject
|
||||||
|
#
|
||||||
|
# For more information about the [deploy] section see:
|
||||||
|
# https://scrapyd.readthedocs.io/en/latest/deploy.html
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
default = scrapy_practise.settings
|
||||||
|
|
||||||
|
[deploy]
|
||||||
|
#url = http://localhost:6800/
|
||||||
|
project = scrapy_practise
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# Define here the models for your scraped items
|
||||||
|
#
|
||||||
|
# See documentation in:
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/items.html
|
||||||
|
|
||||||
|
import scrapy
|
||||||
|
|
||||||
|
|
||||||
|
class ScrapyPractiseItem(scrapy.Item):
|
||||||
|
# define the fields for your item here like:
|
||||||
|
name = scrapy.Field()
|
||||||
|
title = scrapy.Field()
|
||||||
|
info = scrapy.Field()
|
||||||
|
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
# Define here the models for your spider middleware
|
||||||
|
#
|
||||||
|
# See documentation in:
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/spider-middleware.html
|
||||||
|
|
||||||
|
from scrapy import signals
|
||||||
|
|
||||||
|
# useful for handling different item types with a single interface
|
||||||
|
from itemadapter import is_item, ItemAdapter
|
||||||
|
|
||||||
|
|
||||||
|
class ScrapyPractiseSpiderMiddleware:
|
||||||
|
# Not all methods need to be defined. If a method is not defined,
|
||||||
|
# scrapy acts as if the spider middleware does not modify the
|
||||||
|
# passed objects.
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_crawler(cls, crawler):
|
||||||
|
# This method is used by Scrapy to create your spiders.
|
||||||
|
s = cls()
|
||||||
|
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
|
||||||
|
return s
|
||||||
|
|
||||||
|
def process_spider_input(self, response, spider):
|
||||||
|
# Called for each response that goes through the spider
|
||||||
|
# middleware and into the spider.
|
||||||
|
|
||||||
|
# Should return None or raise an exception.
|
||||||
|
return None
|
||||||
|
|
||||||
|
def process_spider_output(self, response, result, spider):
|
||||||
|
# Called with the results returned from the Spider, after
|
||||||
|
# it has processed the response.
|
||||||
|
|
||||||
|
# Must return an iterable of Request, or item objects.
|
||||||
|
for i in result:
|
||||||
|
yield i
|
||||||
|
|
||||||
|
def process_spider_exception(self, response, exception, spider):
|
||||||
|
# Called when a spider or process_spider_input() method
|
||||||
|
# (from other spider middleware) raises an exception.
|
||||||
|
|
||||||
|
# Should return either None or an iterable of Request or item objects.
|
||||||
|
pass
|
||||||
|
|
||||||
|
def process_start_requests(self, start_requests, spider):
|
||||||
|
# Called with the start requests of the spider, and works
|
||||||
|
# similarly to the process_spider_output() method, except
|
||||||
|
# that it doesn’t have a response associated.
|
||||||
|
|
||||||
|
# Must return only requests (not items).
|
||||||
|
for r in start_requests:
|
||||||
|
yield r
|
||||||
|
|
||||||
|
def spider_opened(self, spider):
|
||||||
|
spider.logger.info("Spider opened: %s" % spider.name)
|
||||||
|
|
||||||
|
|
||||||
|
class ScrapyPractiseDownloaderMiddleware:
|
||||||
|
# Not all methods need to be defined. If a method is not defined,
|
||||||
|
# scrapy acts as if the downloader middleware does not modify the
|
||||||
|
# passed objects.
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_crawler(cls, crawler):
|
||||||
|
# This method is used by Scrapy to create your spiders.
|
||||||
|
s = cls()
|
||||||
|
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
|
||||||
|
return s
|
||||||
|
|
||||||
|
def process_request(self, request, spider):
|
||||||
|
# Called for each request that goes through the downloader
|
||||||
|
# middleware.
|
||||||
|
|
||||||
|
# Must either:
|
||||||
|
# - return None: continue processing this request
|
||||||
|
# - or return a Response object
|
||||||
|
# - or return a Request object
|
||||||
|
# - or raise IgnoreRequest: process_exception() methods of
|
||||||
|
# installed downloader middleware will be called
|
||||||
|
return None
|
||||||
|
|
||||||
|
def process_response(self, request, response, spider):
|
||||||
|
# Called with the response returned from the downloader.
|
||||||
|
|
||||||
|
# Must either;
|
||||||
|
# - return a Response object
|
||||||
|
# - return a Request object
|
||||||
|
# - or raise IgnoreRequest
|
||||||
|
return response
|
||||||
|
|
||||||
|
def process_exception(self, request, exception, spider):
|
||||||
|
# Called when a download handler or a process_request()
|
||||||
|
# (from other downloader middleware) raises an exception.
|
||||||
|
|
||||||
|
# Must either:
|
||||||
|
# - return None: continue processing this exception
|
||||||
|
# - return a Response object: stops process_exception() chain
|
||||||
|
# - return a Request object: stops process_exception() chain
|
||||||
|
pass
|
||||||
|
|
||||||
|
def spider_opened(self, spider):
|
||||||
|
spider.logger.info("Spider opened: %s" % spider.name)
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# Define your item pipelines here
|
||||||
|
#
|
||||||
|
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
|
||||||
|
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
|
||||||
|
|
||||||
|
|
||||||
|
# useful for handling different item types with a single interface
|
||||||
|
from itemadapter import ItemAdapter
|
||||||
|
|
||||||
|
|
||||||
|
class ScrapyPractisePipeline:
|
||||||
|
def process_item(self, item, spider):
|
||||||
|
return item
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
# Scrapy settings for scrapy_practise project
|
||||||
|
#
|
||||||
|
# For simplicity, this file contains only settings considered important or
|
||||||
|
# commonly used. You can find more settings consulting the documentation:
|
||||||
|
#
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/settings.html
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/spider-middleware.html
|
||||||
|
|
||||||
|
BOT_NAME = "scrapy_practise"
|
||||||
|
|
||||||
|
SPIDER_MODULES = ["scrapy_practise.spiders"]
|
||||||
|
NEWSPIDER_MODULE = "scrapy_practise.spiders"
|
||||||
|
|
||||||
|
|
||||||
|
# Crawl responsibly by identifying yourself (and your website) on the user-agent
|
||||||
|
#USER_AGENT = "scrapy_practise (+http://www.yourdomain.com)"
|
||||||
|
|
||||||
|
# Obey robots.txt rules
|
||||||
|
ROBOTSTXT_OBEY = True
|
||||||
|
|
||||||
|
# Configure maximum concurrent requests performed by Scrapy (default: 16)
|
||||||
|
#CONCURRENT_REQUESTS = 32
|
||||||
|
|
||||||
|
# Configure a delay for requests for the same website (default: 0)
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
|
||||||
|
# See also autothrottle settings and docs
|
||||||
|
#DOWNLOAD_DELAY = 3
|
||||||
|
# The download delay setting will honor only one of:
|
||||||
|
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
|
||||||
|
#CONCURRENT_REQUESTS_PER_IP = 16
|
||||||
|
|
||||||
|
# Disable cookies (enabled by default)
|
||||||
|
#COOKIES_ENABLED = False
|
||||||
|
|
||||||
|
# Disable Telnet Console (enabled by default)
|
||||||
|
#TELNETCONSOLE_ENABLED = False
|
||||||
|
|
||||||
|
# Override the default request headers:
|
||||||
|
#DEFAULT_REQUEST_HEADERS = {
|
||||||
|
# "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
||||||
|
# "Accept-Language": "en",
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable or disable spider middlewares
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
|
||||||
|
#SPIDER_MIDDLEWARES = {
|
||||||
|
# "scrapy_practise.middlewares.ScrapyPractiseSpiderMiddleware": 543,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable or disable downloader middlewares
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
|
||||||
|
#DOWNLOADER_MIDDLEWARES = {
|
||||||
|
# "scrapy_practise.middlewares.ScrapyPractiseDownloaderMiddleware": 543,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable or disable extensions
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/extensions.html
|
||||||
|
#EXTENSIONS = {
|
||||||
|
# "scrapy.extensions.telnet.TelnetConsole": None,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Configure item pipelines
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
|
||||||
|
#ITEM_PIPELINES = {
|
||||||
|
# "scrapy_practise.pipelines.ScrapyPractisePipeline": 300,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable and configure the AutoThrottle extension (disabled by default)
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
|
||||||
|
#AUTOTHROTTLE_ENABLED = True
|
||||||
|
# The initial download delay
|
||||||
|
#AUTOTHROTTLE_START_DELAY = 5
|
||||||
|
# The maximum download delay to be set in case of high latencies
|
||||||
|
#AUTOTHROTTLE_MAX_DELAY = 60
|
||||||
|
# The average number of requests Scrapy should be sending in parallel to
|
||||||
|
# each remote server
|
||||||
|
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
|
||||||
|
# Enable showing throttling stats for every response received:
|
||||||
|
#AUTOTHROTTLE_DEBUG = False
|
||||||
|
|
||||||
|
# Enable and configure HTTP caching (disabled by default)
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
|
||||||
|
#HTTPCACHE_ENABLED = True
|
||||||
|
#HTTPCACHE_EXPIRATION_SECS = 0
|
||||||
|
#HTTPCACHE_DIR = "httpcache"
|
||||||
|
#HTTPCACHE_IGNORE_HTTP_CODES = []
|
||||||
|
#HTTPCACHE_STORAGE = "scrapy.extensions.httpcache.FilesystemCacheStorage"
|
||||||
|
|
||||||
|
# Set settings whose default value is deprecated to a future-proof value
|
||||||
|
REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7"
|
||||||
|
TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
|
||||||
|
FEED_EXPORT_ENCODING = "utf-8"
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# This package will contain the spiders of your Scrapy project
|
||||||
|
#
|
||||||
|
# Please refer to the documentation for information on how to create and manage
|
||||||
|
# your spiders.
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
import scrapy
|
||||||
|
from scrapy_practise.items import ScrapyPractiseItem
|
||||||
|
|
||||||
|
class ItcastSpider(scrapy.Spider):
|
||||||
|
name = "itcast"
|
||||||
|
allowed_domains = ["itcast.cn"]
|
||||||
|
start_urls = ["http://www.itcast.cn/channel/teacher.shtml"]
|
||||||
|
|
||||||
|
def parse(self, response):
|
||||||
|
# context = response.xpath('/html/head/title/text()')
|
||||||
|
# title = context.extract_first()
|
||||||
|
|
||||||
|
# print(title)
|
||||||
|
# filename = "teacher.html"
|
||||||
|
# open(filename, 'wb').write(response.body)
|
||||||
|
|
||||||
|
items = []
|
||||||
|
|
||||||
|
for each in response.xpath("//div[@class='li_txt']"):
|
||||||
|
# 将我们得到的数据封装到一个 `ItcastItem` 对象
|
||||||
|
item = ScrapyPractiseItem()
|
||||||
|
#extract()方法返回的都是unicode字符串
|
||||||
|
name = each.xpath("h3/text()").extract()
|
||||||
|
title = each.xpath("h4/text()").extract()
|
||||||
|
info = each.xpath("p/text()").extract()
|
||||||
|
|
||||||
|
#xpath返回的是包含一个元素的列表
|
||||||
|
item['name'] = name[0]
|
||||||
|
item['title'] = title[0]
|
||||||
|
item['info'] = info[0]
|
||||||
|
|
||||||
|
items.append(item)
|
||||||
|
|
||||||
|
# 直接返回最后数据
|
||||||
|
return items
|
||||||
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,150 @@
|
|||||||
|
info,name,title
|
||||||
|
11年JAVA开发经验,9年技术团队管理经验,7年项目架构经验(系统架构师职称),在电子政务、企业办公、电子商务、社交网络、移动应用、互金等行业软件方面拥有丰富的项目实战经验。先后在飞利信、高伟达、成都融特、日立、人人贷担任部门经理、TeamLeader、技术经理、Senior Consultant、技术经理,负责全国政协门户、Wradio+、Chinaface、居然在线、个贷官网、人人U学、Crawlers、Babel大数据平台等项目研发。 ,罗老师,高级讲师
|
||||||
|
擅长Java EE企业级应用,十余年项目管理经验,曾担任开发工程师,架构师等重要角色。主导多个大型项目的架构设计、管理等工作。在互联网项目领域具备丰富的经验,精通微服务架构,擅长解决高并发,亿级数据量等架构设计,拥有广泛的技术面与实践经验。,姜老师,高级讲师
|
||||||
|
11年互联网项目研发经验及教学经验,曾担任过开发工程师,技术部经理等职务。精通Java技术栈、对SpringBoot、Redis、RabbitMQ、ElasticSearch、Docker、SpringCloud等有深入研究。专注于分布式、高可用、高性能、微服务架构的设计。,陈老师,高级讲师
|
||||||
|
"具有多年开发经验,曾先后在重庆科普、微创、爱奇艺等多家软件公司担任软件开发工程师、项目经理等职务,精通Java EE、Struts2、Spring、Hibernate应用开发。",石老师,高级讲师
|
||||||
|
6年软件开发与教学经验,曾在北京航天四创、中科软等单位担任研发经理职务,曾主持参与浙江省机要系统、国家电网系统、济宁市医疗平台、中国电信网络规划平台、人民日报社扶贫APP的设计开发工作。精通分布式、大数据、微服务、高并发、高可用等相关技术架构。 ,郭老师,高级讲师
|
||||||
|
多年开发和教学经验,曾在三星(中国)参与过大型跨国项目担任开发工程师,授课风趣幽默,精通Java EE、数据库、MyBatis、Spring全家桶等企业级常用技术;分布式系统开发经验丰富,对SpringBoot、SpringCloud、Dubbo、ZooKeeper 、ES、Solr、Redis、MQ等分布式技术深有研究。 ,付老师,高级讲师
|
||||||
|
10年软件开发和教学经验,武汉理工计算机和武汉大学经济学双学位,在Java和大数据开发领域有丰富的经验,曾参与铁路12306数据中台、用户画像、正晚点预测等多个系统的研发工作。 ,杨老师,高级讲师
|
||||||
|
13年软件开发管理与教学经验;软件与大数据开发认证工程师,项目经理。曾开发管理过信诚人寿、美的、民生银行、青岛啤酒、联想、SGS e-learning、国家工商总局市场信用分类监管系统等。熟悉分布式、微服务等J2EE及大数据生态圈技术知识体系。 ,廖老师,高级讲师
|
||||||
|
12年互联网项目研发经验及教学经验,曾担任过开发工程师、技术部经理等职务。参与国家电网系统、饿了么外卖平台、每日优鲜O2O平台的设计以及开发工作。精通Java技术栈、对SpringBoot、Redis、Rabbit MQ、ElasticSearch、Docker、Spring Cloud等有深入研究。专注于分布式、高可用、高性能、微服务架构的设计。 ,蒙老师,高级讲师
|
||||||
|
6年软件开发经验,曾任职医惠科技开发工程师、阿里巴巴开发工程师岗位,担任过高级开发工程师、项目经理、技术经理等职位。对大型TOB项目如His系统中分布式服务、数字化架构、高并发、高可用、数据一致性等有丰富的项目经验和业务知识。 ,何老师,高级讲师
|
||||||
|
"5年软件开发及教学经验,先后在多家IT公司担任Android、Java方向软件开发工程师,研发项目涉及,新闻,理财,社交,教育等方向对Android、Java SE、Java Web、MySQL、前端等技术深入研究。 ",杨老师,高级讲师
|
||||||
|
13年的项目开发和教育培训经验,精通Java EE的主流开发框架、Oracle和MySQL等关系型数据库。曾在中科院遥感应用研究所、慧点科技、达利本斯等公司担任软件开发工程师、项目总监,带团队做过边防部队、人寿集团、平安集团等多个企业的大型项目,之后在互联网公司知果科技担任开发经理,完成知果果网的核心产品开发。 ,师老师,高级讲师
|
||||||
|
北京航空航天大学 计算机毕业。10年技术开发与管理经验。曾在北大方正、知名游戏公司、互联网公司等担任研发工程师、技术经理。参与移动聊天工具企业版、新媒体营销平台、档案信息管理系统等大型项目研发工作。擅长总结和梳理知识点,深入的对每个技术点进行讲解,引导式教学,注重培养学员能力。 ,杨老师,高级讲师
|
||||||
|
多年教学和开发经验对Java EE技术体系结构、Java Web原理有深刻理解。精通RPC、消息中间件、SSM、SpringCloud等技术,曾参与中国移动门户系统、中国移动集团客户对公平台、CRM系统、健康管理系统等。热衷于技术研究,善于用引导方式教学;授课思路清晰,注重学生基础知识掌握扎实,注重培养学生自主解决问题的能力。 ,于老师,高级讲师
|
||||||
|
多年网络安全及密码学开发经验,服务器研发经验,曾任职国家互联网应急中心关口监测系统研发经理职位。精通Golang、C/C++程序设计,Go与区块链领域先驱者。,刘老师,高级讲师
|
||||||
|
8年软件开发及教育相关工作; 有丰富的企业APP、网站、手游开发经验;精通大数据、Java等多种前沿技术,对Linux、MySQL、SSM框架底层、微服务架构 等有一定研究。喜欢钻研,乐于分享。学生遍及阿里、腾讯、苏宁等众多互联网企业。 ,单老师,高级讲师
|
||||||
|
8年Java EE企业级开发经验,5年开发团队管理经验,曾任某大型国有企业项目负责人,对于构建高吞吐、低延迟、分布式架构有丰富经验。精通Java SE、Java Web、Spring、SpringMVC、MyBatis和微服务等主流技术栈。具备丰富的项目重构和性能调优实战经验。秉承“复杂问题简单化,抽象问题具体化”的教学理念,注重学员解决问题能力和个人综合能力的全方位培养。 ,李老师,高级讲师
|
||||||
|
9年开发经验,3年授课经验。精通Oracle、DB2、MySQL等数据库使用,精通SSM、MQ、Security等框架使用,熟练Redis、SOA、微服等高可用架构的搭建。曾就职于联想信息产品(深圳)有限公司研发实验室,从事Think产品研发系统的开发与维护。工作积极认真与强烈的责任感、思维视野开阔。,叶老师,高级讲师
|
||||||
|
"10年以上开发以及教育经验,参与过大型的电子商务购物平台、中国电信在线营业厅等项目的开发,在我友科技、杭州数云信息技术担任开发经理职位。曾参与项目:《NewBI》《我友商城》《中国电信套餐直通车》等。
|
||||||
|
",张老师,高级讲师
|
||||||
|
13年开发管理经验,曾先后就职于东亚银行、京东等知名企业,担任过高级开发工程师、项目经理、技术经理、架构师等职位,对电商、金融风控、反欺诈领域及互联网分布式服务、高并发、高可用、秒杀场景等有丰富项目经验和行业知识。精通JavaSE、JavaEE、SSM、Spring全家桶、分布式缓存、各种消息中间件等。对多线程、高并发的解决方案及各种开源技术有着深厚的研究。 ,李老师,高级讲师
|
||||||
|
8年IT从业经验,先后担任高级Java软件工程师、项目组长等职务。具有扎实的Java基本功底和良好的编程规范,精通Java EE当下主流技术SSM,Spring,SpringMVC,Spring Boot,Spring Cloud,Spring Cloud Alibaba和NoSQL数据库;精通MySQL和Oracle数据库产品;多年分布式架构下的开发经验。具备扎实的技术功底、丰富的软件研发、项目管理经验及IT教学经验。幽默风趣,能充分调动学生学习的积极性与主动性,擅长以学员实际掌握情况灵活调整授课方案,以保证学员吸收最大化。 ,蒋老师,高级讲师
|
||||||
|
11年软件开发及教学经验,曾先后在360、亚信联创、众信旅游担任研发工程师、技术经理岗位。擅长Java后台程序设计、微服务开发等,特别是在互联网领域有很强的开发经验。授课思路清晰,对学生认真负责,注重学生学习效果。研发以及录制大型新闻资讯项目《黑马头条》。 ,于老师,高级讲师
|
||||||
|
7年教学和开发经验。精通Java EE技术体系,对Java SE、Java Web、MySQL、Redis、Spring、SpringMVC以及MyBatis等技术点有深刻理解,授课风格幽默风趣,通俗易懂,条理清晰。关注于学生的成长、极具亲和力! ,姜老师,高级讲师
|
||||||
|
多年互联网项目与游戏项目研发和管理经验,曾带领公司团队研发电商、社交、实时视频等相关领域项目。涉及H5、Unity3D、小程序等不同平台。对Vue,React,微信小程序等都有研究并具备了丰富的项目架构与研发经验。 ,许老师,高级讲师
|
||||||
|
"8年Java后台开发及教育工作经验,熟悉Java SE, Java EE, Spring,MyBatis, MySQL等常用框架,熟悉ELK技术栈,SpringCloud生态圈技术。熟练使用Vue.js, Node.js, Webpack等前端技术。曾在多家大型公司担任软件工程师,项目经理职务,涉及在线教育、证券交易、电商等不同领域。目前授课范围:SpringMVC, MyBatis, Lucene, Solr, SolrCloud, 乐优商城。 ",张老师,高级讲师
|
||||||
|
10余年互联网行业开发经验及教学经验,资深架构师,精通Java、C、Python等开发语言。曾就职大型互联网公司从事电商架构相关的设计和Java开发平台以及基础中间件的设计研发工作;曾主导研发了支持高并发处理能力的API网关、高性能数据库连接池以及海量数据归档平台。授课诙谐幽默,讲解通俗易懂。 ,赵老师,高级讲师
|
||||||
|
10年Java研发和教学经验。先后任职于东方邦信、明医众禾、开薪点、企家有道等大型互联网企业,担任高级Java研发、技术经理等职务。负责和主导过多个互联网项目,如东方汇、医德帮、薪人薪事,涉及互联网金融、PHC基层医疗生态、人资 SaaS等领域。精通Java EE基础、并发编程、Socket网络编程,对Spring全家桶、Netty、MyBatis、MySQL Oracle、Redis、SpringBoot、Dubbo、Spring Cloud & Alibaba 微服务体系、RabbitMQ、Docker、K8S等多种互联网前沿技术有深入研究,熟悉JS 、Jquery、Bootstrap、Seajs、Backbone、ElementUI等前端技术。专注细致、幽默风趣,善于结合生活化场景和实际企业场景传达知识点。 ,刘老师,高级讲师
|
||||||
|
5年的Java软件开发经验,5年Java专业教学经验,曾参与设计与开发多个大型互联网项目,主要有质监抽检,青历商城,E贷网P2P,天艺引资评估系统等等。长期致力于Web应用的开发与设计。擅长Java EE核心技术,SSM、Dubbo、SpringBoot、SpringCloud等。 ,郭老师,高级讲师
|
||||||
|
6年开发经验,2年教学经验。在大型互联网公司担任TL、架构师,参与设计并搭建大数据、物联网等大型项目。精通Java、SSM框架以及SpringCloud、Dubbo、MQ等微服务架构体系。 ,李老师,高级讲师
|
||||||
|
曾任职于中国移动、平安保险。精通Java EE体系、MySQL、Android、鸿蒙等技术。主导研发《三天从0带你写一个Java小游戏》、《9天快速入门Java》、《Java从入门到起飞》、《鸿蒙应用开发》等多套课程。 ,张老师,高级讲师
|
||||||
|
8年Java研发及教学经验,精通JavaEE技术体系,曾担任开发工程师、架构师等重要角色。参与于采帅令外卖系统、中国中铁集团道岔钢轨测量系统、中仕学社等互联网项目设计研发。曾主导过多个大型企业级项目的研发。对流行框架Spring,Redis、ElasticSearch、MQ中间件等有深入研究,熟悉以SpringCloud为核心的微服务技术体系,以及微服务在企业落地的最佳实践。授课幽默风趣,条理清晰,乐于分享,注重培养学生独立思考的能力。 ,申老师,高级讲师
|
||||||
|
"5年的软件开发及教学经验,擅长Java EE企业级应用,参与多个大型项目的架构设计、管理、开发等工作。在互联网项目领域具备丰富的经验,掌握Java SE,Java Web、MySQL、Redis以及Spring、SpringMVC、MyBatis、SpringBoot、SpringCloud等分布式架构技术,拥有广泛的技术面与实践经验。 ",律老师,高级讲师
|
||||||
|
多年互联网开发经验,深入理解Java虚拟机原理,以及参数优化,对SSM、SpringBoot、SpringCloud微服务等主流框架有深入的理解和使用,对实时流处理框架storm,并Kafka有多年使用经验。 ,刘老师,高级讲师
|
||||||
|
15年研发经验,曾担任架构师、项目经理等职位,精通JavaEE技术栈,曾负责全国党员远程教育系统、云南学分银行系统、郑州地铁CCTV网管系统等项目的研发与管理工作。 ,苗老师,高级讲师
|
||||||
|
"精通C#,Java语言开发,精通MySQL,Oracle,SQL Server数据库,SSM框架,JS,jQuery前段框架。先后在广东源恒科技有限公司、武汉付运通科技有限公司任职, 教学严谨,授课思路清晰,善于语言表达和总结行业经验,因材施教。 ",袁老师,高级讲师
|
||||||
|
多年开发与教学经验,精通Java企业平台开发技术,熟练掌握并使用设计模式、常用开源框架、分布式架构及微服务架构,先后担任过工程师、项目经理等职位,曾参与过商城项目,主导过智慧医疗等项目研发,具备一定的项目管理经验,同时具有丰富的教学经验,授课认真负责,条理清晰。 ,李老师,高级讲师
|
||||||
|
"10年Java开发及教学经验,曾在多家公司担任软件开发工程师,技术功底深厚,授课幽默风趣,通俗易懂。精通MySQL,Redis及Spring, MyBatis, SpringMVC, SpringBoot, SpringCloud, SpringData系列框架,并对Solr, ElasticSearch, Dubbo, MQ中间件技术有深入研究。 ",邓老师,高级讲师
|
||||||
|
9年一线研发与教学经验,曾先后在中石油、久其软件等企业担任研发工程师,参与油气管道全生命周期建设、昆仑燃气等项目,并为国资委、兵工、航天科工等研发CI财报产品。精通Java SE、Java EE技术和SSH/SSM、SpringBoot等常用框架,对Dubbo、ZooKeeper、SpringCloud、MQ、Redis、MongoDB、MySQL等流行框架和技术有深入研究。授课逻辑清晰,通俗易懂,受到众多学生的认可和喜爱。 ,刘老师,高级讲师
|
||||||
|
5年Java开发和项目管理经验,3年的授课经验。曾先后于北大医信、泰和诚任开发工程师、项目主管职位,精通Java语言,擅长Java EE技术栈,对MySQL数据库有深入的了解。课堂幽默风趣,善于用生活中的例子讲解Java中晦涩难懂的知识点。,翟老师,高级讲师
|
||||||
|
多年开发和教学经验,曾在中星测控、中软国际担任开发工程师,有移动端、PC端、服务端软件等多类型软件的开发经验,授课不拘一格、深入浅出、风默有趣。精通Java开发,对JVM、数据库、Web规范、数据结构与算法以及主流应用框架均有深入研究。 ,高老师,高级讲师
|
||||||
|
多年开发与教学经验,对Spring生态系统,消息中间件,数据库等技术有深入理解和研究。先后在陕西出版集团,中软、电讯盈科等担任过软件开发工程师职务,参与开发过书海小说网,延安英雄传后端等项目开发。 ,李老师,高级讲师
|
||||||
|
具有8年软件开发与教学经验,具有丰富的开发经验,先后在四方精创、华侨城文旅科技、达普信科技等公司担任技术研发与项目运维等工作,先后经历过中国银行(香港)私人银行业务开发、华侨城文旅科技公司内部网站建设以及海关平台相关业务的需求研发。熟悉使用SSH、SSM、缓存Redis、MySQL、Oracle、数据报表等。 ,李老师,高级讲师
|
||||||
|
从事Java EE开发及教学工作多年,先后在多家公司担任开发工程师,项目经理等职务。精通Redis及Spring、MyBatis、SpringMVC、SpringBoot、SpringCloud系列框架;拥有大数据项目开发经验,对Hadoop生态圈如Hive,Zookeeper,Hbase等技术有深入研究。 ,袁老师,高级讲师
|
||||||
|
毕业于东北师范大学,五年以上开发经验,多年软件开发教育培训经验,精通Java SE、MySQL等编程开发语言和开发技术,熟练掌握各种数据结构和算法,精通Spring、SpringMVC、MyBatis等常用框架,熟练掌握微服务框架,授课风格幽默风趣,可以将知识化繁为简、深入浅出的教授给学员。 ,李老师,高级讲师
|
||||||
|
5年软件研发与项目管理经验,精通Java开发语言以及MySQL、Oracle数据库,对Java流行框架有深入研究,曾在企业中参与主导旅游、活动竞赛等领域项目开发。在传智播客有三年教学经验,授课认真负责,注重学员独立分析能力。 ,王老师,高级讲师
|
||||||
|
5年软件开发及教学经验,Android、Java方向软件开发工程师,研发项目涉及教育、新闻、娱乐直播等。对Android、Java SE、Java Web、MySQL、前端等技术深入研究。 ,郝老师,高级讲师
|
||||||
|
15年研发及技术管理经验,历任Java研发、架构师、技术总监等职位。热衷于研究主流Java技术,擅长微服务、高并发、高可用、大数据处理平台的搭建及主要解决方案的落地实施。曾主持开发电商日志采集系统、电商数据开放平台、电商推荐和搜索分析系统、商家开放平台、物联网冷链监控平台等电商及物联网行业SaaS项目。 ,陈老师,高级讲师
|
||||||
|
"985,211重点大学毕业,拥有10年的开发经验和架构设计经验,曾在几个大型公司担任系统架构师,精通系统架构,曾主持各种大型网站架构设计与开发,主持设计研发ODPS框架,SWORD框架,授课特点:幽默风趣,通俗易懂,条理清晰,层次分明。 ",张老师,高级讲师
|
||||||
|
6年Java软件开发及相关教育工作,熟悉Java EE、Android开发,对主流框架有深入了解。曾参与过联通集成公司的4G系统和结算系统开发;主导过移动健康相关项目应用开发。传智授课3年,讲课风格诙谐幽默,倡导寓教于乐的授课方式。 ,张老师,高级讲师
|
||||||
|
多年J2EE项目研发及管理经验,曾就职于多家大型互联网企业,有着多年的一线开发经验,涉及过互联网电商项目,移动管理系统等,企业ERP系统,手机App项目等。精通Java SE,Java Web,对Spring、MyBatis、SpringMVC、SpringBoot、Android、MySQL、Redis、Solr、Dubbo、FastDFS等有深入研究。,刘老师,高级讲师
|
||||||
|
7年软件开发与教学经验,曾负责游戏大数据平台可视化、国家公开信息采集系统、企业电商架构构建等。精通JavaEE,SSM/SSH、Spring全家桶技术。对NoSQL、消息队列、服务集成、微服务、持续集成及各种开源技术有着深厚的研究。 ,年老师,高级讲师
|
||||||
|
多年开发和教学经验,涉及到手机应用Web后台开发,精通Java SE、 Java EE、Android。曾多次参与开发国家版权局对应版权业务。 ,周老师,高级讲师
|
||||||
|
6年一线研发经验,2年Java教学经验,先后负责国家电网、质检总局、广西海关等单位的多个大型系统研发,后期主做在线教育互联网项目。精通MVC框架、擅长分布式框架、微服务框架,授课有热情、思路清晰、深入浅出。主讲项目阶段及就业冲刺阶段课程。 ,陈老师,高级讲师
|
||||||
|
"拥有5年的企业开发和教学经验,对于目前主流的SSM, SpingBoot, SpingCloud, SQL优化等常用框架和技术都有深入的理解。熟练掌握Redis缓存技术和缓存方案。对于常用的消息中间件RabbitMQ和ActiveMQ等以及定时任务等都有相关的实际开发经验。对于前端框架Vue.jsp以及其他前端基础都有所涉及。 ",黄老师,高级讲师
|
||||||
|
"14年软件开发与教学经验,具有丰富的技术团队管理经验,精通Java
|
||||||
|
EE(JSPServlet、JDBC、Struts2、Spring、Hibernate、MyBatis),以及 WebService、Ajax、Oracle、DB2、MySQL、NoSQL、分布式RPC框架Dubbo、SpringCloud、ZooKeeper、MQ、Redis等。曾先后参与江苏媒资系统、中信银行大客户对公平台、胜利油田办公自动化平台、武警部队信息化系统的研发与管理工作。",赵老师,高级讲师
|
||||||
|
JAVA开发工程师。有着多年的软件开发经验,精通Java EE企业级应用技术,精通MySql、Oracle、DB2等主流关系型数据库,有着丰富的数据库开发经验。曾经参与过移动公司的实时人流监控、用户缴费日志实时分析等大数据项目,熟悉大数据相关开发。 ,徐老师,高级讲师
|
||||||
|
10年软件研发、项目管理与教学经验,精通Java开发技术,曾先后担任过技术经理、技术主管、项目经理等职位。主导研发超过5个以上大型项目与平台。精通微服务架构,擅长解决高并发,亿级数据量等架构设计,拥有广泛的技术面与实践经验。 ,陈老师,高级讲师
|
||||||
|
10年企业一线开发经验,在多家企业担任开发工程师,架构师,项目经理等职位,参与或主持航信-航意险,中彩网,网上商城等项目的开发。专注于JavaEE开发,深入研究Spring全家桶、MyBatis、Dobuo等流行框架,对分布式,微服务架构体系有独到的见解。 ,张老师,高级讲师
|
||||||
|
"多年开发和教学经验,对Java EE,iOS,Android多平台的开发有丰富经验,熟练掌握SSM、Dubbo,Spring Security,SpringBoot等框架,能熟练操作Oracle,MySQL等关系型数据库, 授课幽默风趣,通俗易懂,关注学员消化吸收,注重培养学员独立分析能力及动手能力。 ",李老师,高级讲师
|
||||||
|
12年工作经验,架构师,多年IT领域研发经验、深入的理解SSM、Redis、RocketMQ、Memcached、Quartz、Dubbo、SpringBoot、SpringCloud等框架,主要负责参与的项目《全国数字物价监测中心》、《上海浦发银行信用卡客户服务中心》、《某金融平台统一支付中心》等项目。 ,束老师,高级讲师
|
||||||
|
"13年项目开发和教学经验,对SpringData、SpringCloud、Docker等技术有深入的研究,熟练掌握 MySQL、Redis,SSM框架、Dubbo、ZooKeeper等技术,热衷主流Java开源框架,曾参与中国电信计费系统、银行自动服务后台操作系统等。 ",唐老师,高级讲师
|
||||||
|
"负责公司后台核心系统、资质审核系统、风控审核系统、标的审核系统的设计与搭建,对接存管银行的API,对接第三方银行机构。后台系统基于大数据的车辆对比系统、车辆实时信息联网查询、车辆电池信息以及前台基于百度地图的路径规划、动态围栏等功能。",刘老师,高级讲师
|
||||||
|
"10年软件开发经验,曾在用友网络担任项目经理、项目总监等职务,先后主导过佛山美的集团互联网系统应用、白云国际机场商旅电商系统和深圳民太安公估保险移动互联网应用等。 精通Java EE、并发编程、SSM、SpringBoot。对CDN、NoSQL、消息队列、微服务、JVM性能调优、爬虫级各种开源框架等技术。
|
||||||
|
",宋老师,高级讲师
|
||||||
|
10年Java从业经验,曾负责安防视频监控系统、华为VMS语言邮箱系统、电信网络质量监控系统、溯源APP等。精通Java SE,Java EE,SSM/SSH,Spring全家桶。对NoSQL、消息队列、服务集成、流程引擎、微服务、持续集成及各种开源技术有着深厚的研究。 ,徐老师,高级讲师
|
||||||
|
从事Java工作多年,有着丰富的开发和教学经验,Java,JSP,Servlet开发,精通SSM、Dubbo,Spring Security,Struts2,Hibernate等框架,能熟练操作Oracle,MySQL等关系型数据库。授课幽默风趣,通俗易懂。 ,杨老师,高级讲师
|
||||||
|
从事十年大型互联网软件开发和教学工作,具有丰富的软件开发和项目管理经验,精通Java 、Swift、Python等语言,曾主导并参与多个大型项目,包括W3Mobile华为协同办公平台,迪士尼蓝牙点读笔等。具有丰富的教学经验,授课思路清晰,风趣幽默,通俗易懂。 ,张老师,高级讲师
|
||||||
|
10多年IT从业经验,北大计算机毕业,曾在中科软从事系统分析与架构工作,精通OOM、PD、DDD建模;对计算机原理、体系结构、常用算法有深入研究;熟练分布式和微服务环境下的主流技术架构。 ,王老师,高级讲师
|
||||||
|
"9年Java开发管理和教学,先后在STS(国外)、艾默生网络能源、华胜天成等担任过软件开发工程师、项目主管等职务。精通MySQL、Oracle等数据库以及市场流行的Web框架(SSM、Spring全家桶等)。参与完成的项目主要有:移动国漫项目、短信平台、流量平台、海外物流等。 ",王老师,高级讲师
|
||||||
|
先后在宜信、顺丰、美菜担任研发工程师,具有近10年的Java实战研发经验,熟练掌握当今主流技术(MyBatis/iBatis、Spring、SpringMVC、Dubbo、Elasticsearch、SpringBoot、SpringCloud),曾参与研发基础医疗His、CRM、美菜搜索、顺丰优选等项目。 ,孔老师,高级讲师
|
||||||
|
"曾担任过Android应用开发,Java企业级开发工程师,智能家居行业曾获取App软件专利,精通MyBatis,SpringMVC,Spring,Vue等当下主流的框架,以及其底层实现的原理,熟练使用MySQL,Oracle,Redis主流的数据库,有丰富的授课经验。 ",梅老师,高级讲师
|
||||||
|
上海交大软件工程毕业,10年大型项目实战经验,精通C++、Java、JavaScript等多种主流开发语言。曾在多家500强企业任职,参与金融、物联网、通信等多个领域系统的设计和开发,对常用分布式技术和微服务架构均有深入研究。 ,夏老师,高级讲师
|
||||||
|
曾经主导和参与过:中国银行网点规划系统、河南移动网上营业厅、郑州市科技局综合性门户网站、河南地税缴费系统等等项目。曾经参与策划和编写过多本书籍并出版发行,例如《Ajax+JSP巧学巧用》《Struts2框架开发从入门到精通》《EJB3从入门到精通》等等。 ,张老师,高级讲师
|
||||||
|
拥有多年开发和教学经验,精通Java EE领域编程语言。 深入研究流行框架 SpringMVC、Spring、Hibernate、MyBatis、缓存系统Redis等。 教学擅长理论与实际相结合,对复杂简单化。 曾参与研发大型项目《万达慧云系统》、《建筑需求响应运营管理系统》等。 ,陆老师,高级讲师
|
||||||
|
2015年加入黑马,精通Servlet、JSP、JavaMail、JDBC、JMS、WebService、Struts2、Spring、SpringMVC框架、MyBatis等技术;精通MySQL、Oracle数据库,Tomcat、JBoss等服务器的搭建和部署。在中软等企业从事大型Web项目的设计开发多年,曾任项目经理等职位。 ,周老师,高级讲师
|
||||||
|
"多年软件开发及项目管理经验,精通Java、PHP、C++等编程语言;先后在北京K2地产、由米定制等企业担任开发及管理工作;精通Struts2、Spring、Hibernate、SpringMVC、MyBatis等常用框架;对Oracle,MySQL,Redis,MongoDB等数据库技术有深入研究。",王老师,高级讲师
|
||||||
|
"拥有多年开发经验,先后在中科大洋、易宝支付等公司担任软件开发工程师等职务。热衷于研究主流Java开源框架、Web开发技术。擅长J2EE技术栈中的Spring、SpringMVC, MyBatis,SpringBoot等流行框架,以及对Tomcat, ElasticSearch, Oracle, MySQL,Redis等有深入研究。对待学生循循善诱,讲解知识深入浅出。",何老师,高级讲师
|
||||||
|
"8年Java EE开发与教学经验,精通Java EE技术体系,对Java Web以及Spring、SpringMVC、Struts2、Hibernate、MyBatis等技术有深入的研究。对微服务架构SpringBoot、SpringData、SpringCloud、Docker等技术有系统的研究。熟练应用Vue.js,Node.js,Angular.js等前端框架。精通MySQL、Oracle、Redis、MongoDB等数据的搭建和优化等,曾参与研发黑龙江联通管理系统,国家电网项目,中国电建招标平台系统等开发与管理工作。 ",李老师,高级讲师
|
||||||
|
"Java EE开发与教学多年,精通Java EE技术体系,对流程SSH,SSM以及潮流的SpringData、SpringCloud、Docker等技术有深入的研究。授课逻辑严谨、条理清晰,注重学生独立解决问题的能力,善于总结一类问题,启发式教学。 ",饶老师,高级讲师
|
||||||
|
"从事软件开发工作多年,涉及.Net、HTML5、Unity3d、IOS等平台,曾参与乌龟猜猜,敲打乐敲你妹等跨平台游戏项目的开发,之后投身教育行业,授课过程中擅长使用图片、动画把知识点化繁为简,深受学员喜爱。",胡老师,高级讲师
|
||||||
|
具备多年电商&互联网移动APP市场&物联网行业的软件开发经验,对主流MVVM技术框架(React、微信小程序、Vue),UI框架,模块化,原生JavaScript,Node.js,数据库,代码管理工具等有着丰富的实战运用经验和团队协作经验。曾带领团队完成企业级系统应用设计、搭建、开发、上线等一整套的流程。 ,王老师,高级讲师
|
||||||
|
秉承务实、责任、创新、育人的价值观,用爱成就每一位学生。拥有多年互联网前端应用和软件开发经验,擅长React、Vue。曾就职于TalkingData、用友等公司,负责过多个大型数据分析和可视化平台、移动电商等项目架构和研发工作。,王老师,高级讲师
|
||||||
|
6年+从业经验,精通HTML5、CSS3、JavaSript, 熟悉Vue、React、Angular、jQuery、BootStrap。 特别擅长微信小程序,首次研发和实施了完整的微信小程序商城项目。 教学细腻,能够深入浅出地剖析知识点。 ,苏老师,高级讲师
|
||||||
|
擅长前端企业级项目,在前端领域有自己的发明专利,精通大前端各个方向技术,走在技术的前沿,授课风格幽默,课堂氛围活跃,有强烈的责任心和使命感,能将教学知识与技术应用场景相结合,做到让学生学有所成,学以致用。,潘老师,高级讲师
|
||||||
|
毕业于211院校,曾就职于大型在线教育公司,主导通用组件库的研发,有丰富的项目开发经验和授课经验。擅长移动端开发以及前端主流框架Vue,React。上课风趣幽默,善于将晦涩难懂的术语用生活情境演绎;课后提炼重点,帮助学生高效学习。真正做到让学生知其然,并且知其所以然。 ,李老师,高级讲师
|
||||||
|
毕业于巴黎第十三大学网络多媒体专业,旅法期间服务于艾姆家居,Cibox(法国),曾任微来中国前端负责人,主导澳蚁,趣拼标前端架构。精通JavaScript、Vue、Node.js、jQuery,熟悉 PHP、MySQL,性格乐观开朗,上课善于带动学生的学习激情。,梁老师,高级讲师
|
||||||
|
开发全栈开发工程师,曾主导开发广铁运输、智能设备项目。精通Node.js、Webpack、Vue、React、微信小程序,热衷于技术分享,在B站上发布的微信小程序项目访问排名靠前。教学风格幽默、细腻、能快准狠的将知识传达给学生。 ,万老师,高级讲师
|
||||||
|
多年软件开发经验,曾负责上海银行App架构搭建,主导组件化开发;曾负责51CTO主站重构,及直播平台搭建,及负责鸿蒙社区维护,熟练使用redis缓存及服务端渲染;擅长JavaScript、Vue.js技术栈。 ,赵老师,高级讲师
|
||||||
|
拥有多年电商&互联网金融行业的软件开发经验,曾在招商基金、eims、TCL集团担任项目经理与技术负责人职位,对主流的MVVM框架、移动端开发框架、UI框架、SPA、构建工具、Serverless、代码版本管理软件、模块化、RxJS、Node.js、数据库等技术有丰富的开发和团队协同经验。 ,毛老师,高级讲师
|
||||||
|
Web前端开发工程师,五年开发经验,两年团队管理经验,Vue资深用户。先后参加多个大型管理系统开发,负责前端技术架构,公共业务组件封装;精通前端技术体系,熟练使用CSS3、ES6、Vue、React等前端技术;授课清晰和蔼,擅长调用学员的思考能力,深受学员喜爱。 ,柴老师,高级讲师
|
||||||
|
十年Java与Web前端项目研发与教学经验,曾担任系统架构师、前端主管等职位。曾主导和研发物联网、网银、团购、电商、金融等相关领域的项目。对Node.js、Vue、小程序、React、移动App、数据可视化等前端技术有深入研究并有丰富的项目架构和研发经验。授课条理清晰,循序渐进,深入浅出,认真耐心细致的将知识传授给每一位学员。 ,周老师,高级讲师
|
||||||
|
八年团队研发经验,前后端各类技术均有涉猎,前后研发了多个平台级项目产品,曾担任某大型软件企业的前端架构师,负责公司平台级应用开发工具的设计和架构,精通OTO类移动开发业务,曾担任某大型餐饮软件公司前端负责人,负责公司移动端产品设计和技术架构的开发工作。,高老师,高级讲师
|
||||||
|
Web前端工程师,多年前端开发和实践教学经验,精通JavaScript、Ajax、jQuery、Vue、React、小程序以及Node.js、PHP、MySQL等前后端技术。喜欢钻研,热爱源码封装,授课风趣幽默,由浅入深,广为好评! ,蒋老师,高级讲师
|
||||||
|
"Web前端开发工程师,具有多年的Web开发经验和教学经验。精通HTML,CSS、JavaScript等,对于前端主流框架Vue、React等有深入研究。不但授课清晰, 而且指导超过千余名学生成功就业, 具有丰富的IT行业经验。授课风格幽默风趣,讲解课程细致深入浅出,授课过程中注重与学生的沟通,广受学生好评。 ",李老师,高级讲师
|
||||||
|
"六年前端开发经验,曾担任核心技术团队前端负责人,对JavaScript, 小程序、Vue, Node等技术有深入的研发,擅长以项目、案例驱动教学,懂得如何以学生的角度去思考问题,亲和力强。曾参与华为云官网、华为云社区等多个大型项目的研发。 ",宋老师,高级讲师
|
||||||
|
06年软件工程毕业,资深全栈讲师,从前端到后端架构有一套完整体系,入行前带领技术团队完成用户日增长量10W+的翼推送项目、天翼宽带、页游平台及分成系统架构和研发。讲课深入浅出,思路清晰到位,深受学生好评。,张老师,高级讲师
|
||||||
|
多年开发经验,精通HTML5、CSS3、JavaScript、jQuery、Vue、React等前端技术,曾先后主导多个大型项目开发。授课认真负责、深入浅出,致力于让不同基础的学生日有所学、日有所长。 ,赵老师,高级讲师
|
||||||
|
Apache Flink源码贡献者,专注大数据实时计算领域,ApacheCon Asia 2022亚洲峰会特邀讲师,张老师,高级讲师
|
||||||
|
985计算机硕士,Apache Doris社区贡献者。 ,李老师,高级讲师
|
||||||
|
985计算机硕士,多年深耕大数据、人工智能领域,ApacheCon Asia 2022亚洲峰会特邀讲师 ,赵老师,高级讲师
|
||||||
|
Apache Flink源码贡献者,擅长大数据云平台技术领域。 ,曹老师,高级讲师
|
||||||
|
Apache Pulsar社区贡献者,擅长数仓领域技术。,赵老师,高级讲师
|
||||||
|
擅长数仓领域技术,擅长海量数据下的流式计算和离线数据处理。,闻老师,高级讲师
|
||||||
|
10年开发和教学经验,擅长大数据实时计算,拥有互联网停车平台项目经验。 ,张老师,高级讲师
|
||||||
|
Apache DolphinScheduler社区贡献者,擅长离线数仓领域。 ,孔老师,高级讲师
|
||||||
|
大数据架构师,主导基于Flink的实时反欺诈风控、实时地铁故障预警等流式计算平台的设计和研发。 ,江老师,高级讲师
|
||||||
|
擅长实时领域,拥有金融行业大数据应用架构及开发经验。 ,张老师,高级讲师
|
||||||
|
北京大学计算机硕士,擅长大数据/人工智能领域技术。 ,原老师,高级讲师
|
||||||
|
擅长数仓领域技术,拥有丰富的安全领域大数据行业经验。 ,谢老师,高级讲师
|
||||||
|
大数据架构师,拥有丰富的技术攻坚经验。 ,史老师,高级讲师
|
||||||
|
"北京化工大学工学硕士,多家互联网公司首席信息官,算法专家,具备多年机器学习,深度学习等人工智能相关算法的研发经验, 熟悉Python、Java等常用开发语言,对PyTorch,Tensorflow,PaddlePaddle等深度学习框架熟练使用,在自然语言处理应用方面具备多年的企业实践经验。 ",李老师,高级讲师
|
||||||
|
"北京大学电子与通信工程硕士, 多年开发经验,对数据分析,大数据,机器学习,后端开发等技术有深入了解, 精通java Python等常用开发语言,在多家软件公司担任软件工程师, 项目经理, 有新浪微博,中新网新闻发布系统等多个大型项目经验。 ",原老师,高级讲师
|
||||||
|
擅长人工智能领域技术,多年模式识别和数据挖掘开发经验,主导研发多项国家和省级科研项目,负责企业级信贷风控模型和智能医疗数据平台开发,专注ML/DL/PR/KG领域相关算法的应用,曾任职美团搜索部负责NER及Bert搜索排序优化对Hadoop、SparkTensorflow和PyTorch等大数据、人工智能技术有多年企业实践经验。 ,赵老师,高级讲师
|
||||||
|
多年数据开发经验,曾参与过国云数据公司的数据中台开发,以及甲乙丙丁公司商品推荐系统开发。精通Python、MySQL编程语言,机器学习以及推荐相关算法,熟练应用Hadoop、Hive离线数仓等相关技术。曾担任过BI数据分析师,数据挖掘,推荐算法工程师,数据仓库工程师等数据以及算法相关岗位。 ,魏老师,高级讲师
|
||||||
|
"负责公司后台核心系统、资质审核系统、风控审核系统、标的审核系统的设计与搭建,对接存管银行的API,对接第三方银行机构。后台系统基于大数据的车辆对比系统、车辆实时信息联网查询、车辆电池信息以及前台基于百度地图的路径规划、动态围栏等功能。 ",刘老师,高级讲师
|
||||||
|
毕业于哈尔滨工程大学,擅长GIS行业工程实战,在图像分割、检测、追踪等方面有多年从业经历,参与多项国家级/部委级重大项目,具备丰富的工程落地经验。 ,姚老师,高级讲师
|
||||||
|
曾就职于多家上市公司,并担任高级算法工程师、算法专家。研究领域包括NLP、目标检测、视频跟踪、大语言模型、多模态、模型推理加速等。,李老师,高级讲师
|
||||||
|
6年开发经验,2年教学经验。在大型互联网公司担任TL、架构师,参与设计并搭建大数据、物联网等大型项目。精通Java、SSM框架以及SpringCloud、Dubbo、MQ等微服务架构体系。 ,李老师,高级讲师
|
||||||
|
拥有10年设计经验,曾服务北京正邦品牌策划,百度用户体验中心,北京资海科技集团,龙采科技集团,优逸客科技教育集团,洛杉矶张大钦律师事务所等众多一线互联网设计与外包平台。担任视觉设计师。致力于研究视觉界面设计、品牌服务设计、人机交互等方向,项目经验丰富。,刘老师,高级讲师
|
||||||
|
拥有7年的设计经验,视觉传达设计专业。精通photoshop、illusstrator,Axure等常用设计软件,熟练Html,CSS等前端技术。曾创办独立设计工作室。授课风格幽默,思路清晰。时常告诫学生莫忘设计初心,才能方得始终! ,闫老师,高级讲师
|
||||||
|
拥有8年设计经验,艺术设计专业出身。涉及领域包括UI设计、网站设计、平面印刷广告、包装设计、手绘、VI设计等。曾为武汉理工孵化器、中国语料库等知名企业设计VI视觉识别系统,进行企业品牌推广。具备多年的网页与APP项目开发经验。 ,李老师,高级讲师
|
||||||
|
从事设计行业7年,精通多种设计软件。曾在广告公司担任设计师及设计总监。服务企业有深圳海洋局、招商地产、香港珠宝、华润集团等。2012年投身教育事业,深受广大学员爱戴。,曾老师,高级讲师
|
||||||
|
毕业于中央美术学院视觉传达专业,从事艺术设计类行业多年,曾任设计主管职位。主导进行7个品牌的提案,建立,维护,及后期升级的全案设计,服务于瑞幸,星巴克等30多个品牌。涉及品牌的线上视觉,线下电商,三维视觉,包装设计等,项目实战经验丰富。 ,张老师,高级讲师
|
||||||
|
国内设计色彩搭配知名博主、Adobe认证讲师、十三年工作经验。擅长软件:Photoshop、Illustrator、CorelDRAW、Sketch、AxureRP、C4D、Principle等。服务过的部分知名客户:欧莱雅、万科地产、嘉顿食品、盛大游戏、宝马、阿里巴巴、新浪网、腾讯大粤网、福特汽车等。 ,高老师,高级讲师
|
||||||
|
14年互联网设计经验,首批移动互联网UI设计师,知名WEB设计师,对视觉设计、平面设计、界面设计、体验设计、交互设计、动画制作、影视后期等多方面有研究。曾主导腾讯、小米、IBM、路虎汽车、湖南卫视、上海世博会等500强企业互联网项目。,谭老师,高级讲师
|
||||||
|
10年Linux平台互联网开发经验,业界资深讲师。精通Linux内核开发、内核系统移植、ARM SOC体系结构设计、C/C++、Python、JavaScript、LISP、ARM/X86汇编等编程语言,全栈工程师对计算机原理从上到下融会贯通。,邢老师,高级讲师
|
||||||
|
10年以上软件测试开发、质量管理、项目管理经验,熟练使用Java、Python开发语言,擅长功能测试、接口测试、自动化测试、性能测试等;具有丰富的教学经验,授课幽默风趣,能积极调动学员的积极性。,许老师,高级讲师
|
||||||
|
8年软件测试及项目管理经验,曾任职于蔚来汽车研发部门,在大型电商公司负责测试平台开发,测试管理工作;参与测试的项目有互联网出行,电子商务等,拥有丰富的Java和Python语言经验,有性能测试、自动化测试及测试平台的开发经验。,张老师,高级讲师
|
||||||
|
"从事软件开发和软件测试10年, 熟悉软件项目开发和软件测试流程;熟悉多种测试环境搭建,熟练操作数据库,熟悉Java、Python、H5语言,对Web端自动化测试、接口测试有着丰富经验积累,并有丰富企培、校企合作专业领域培训经验。",刘老师,高级讲师
|
||||||
|
8年以上软件测试及项目管理经验,能熟练运用Python等编程语言,擅长功能测试,接口测试,及自动化测试,能够通过丰富的项目实战经验激发学生学习兴趣,培养学生独立思考和解决问题的能力。具有国家信息系统项目管理师认证、ACP认证。 ,朱老师,高级讲师
|
||||||
|
7年互联网营销推广工作经验,对互联网+新营销有独到的见解和认知,曾为中国移动,中国电信,爱立信一线运营部进行营销培训,擅长以营销思维和锋利的创意解决问题。讲课风格循序渐进,让受训学员看得见、摸得着、体验得到的亲民教学,落到实处。 ,梁老师,高级讲师
|
||||||
|
6年的互联网新媒体运营经验,对文字营销和视频营销有着独到的见解,为上百家企业做过新媒体营销策划方案。曾用2个月的时间孵化出0到200万粉丝的种草推荐类短视频账号,对热点事件极具敏感性。擅长讲故事,脱口秀,授课方式轻松幽默。 ,刘老师,高级讲师
|
||||||
|
互联网行业从业十多年,曾任网站和电子杂志主编、市场营销主管、媒介主管、文案策划主管,文案策划、市场营销、网站运营和媒介监测经验丰富。曾主导腾讯游戏发布、腾讯动漫整体媒介营销、设计行业大赛策划和运营。,吴老师,高级讲师
|
||||||
|
5年短视频直播实战经验,曾担任多家企业运营总监、操盘手。擅长流量整体规划操盘、0-1IP孵化及流量变现。孵化的蓝V账号曾在抖音星图地产赛道排名第一,授课风格幽默严谨,擅长用案例启发思考。 ,张老师,高级讲师
|
||||||
|
致力于网站策划运营、网络营销推广SEM/SEO、淘宝SEO、QQ群优化、数据分析等媒体方面的研究与实践五年有余,经验丰富。在多家高热度网站拥有个人专栏,为众多互联网从业人员提供免费职业辅导和工作指导,拥有忠实粉丝圈,口碑在业界广为人知。,王老师,高级讲师
|
||||||
|
6年新媒体短视频运营经验,创业做过新媒体代运营公司,有丰富的甲方、乙方、MCN机构等行业经验,在短视频以及公众号时代分别做过百万+、十万+等大小账号,合作过的企业有:招行、中行、平安、华润三九、达利、泰康、晨光、东鹏特饮等,擅长新媒体短视频ip孵化,直播带货等新媒体知识分享。 ,彭老师,高级讲师
|
||||||
|
红粉笔联合创始人,曾在中山大学、河北经贸大学等二十余所高校讲授短视频、电商实训项目。具有多个领域商业变现经验,涵盖教育、娱乐、剧情、旅行、电商种草等领域。指导众多学员项目案例,学员零启动美食账号单个作品涨粉20W+、零启动新奇特特效账号首作品流量破100w+,单条带货视频变现8W+。,尹老师,高级讲师
|
||||||
|
四年短视频和直播运营经验,创过业,北抖会创始人,哈尔滨工业大学毕业,曾任百度、苏宁AI架构师和AI产品经理,擅长知识类IP孵化和AI创作爆款短视频。运营过2个百万粉丝大号和3个同时在线过千人的直播间,创作过单条超一千万播放量和多条过百万播放量的爆款短视频,研发课程《AI制作爆款短视频》,抖音账号:野哥玩AI。,赵老师,高级讲师
|
||||||
|
毕业于中国矿业大学新闻传播学,8年文旅媒体行业从业经验。从传统电视媒体转型新媒体短视频行业,深耕短视频及直播运营,擅长社交媒体平台机制及玩法,主导从0-1短视频矩阵及直播商业化变现。擅长以短视频及社群赋能上市旅企高质量发展,媒体营销实战经验丰富,操盘10+上市旅企的新媒体及社群运营工作,包括八达岭长城、天山天池、峨眉山、国际大巴扎、少林寺等5A、4A世界级旅游度假型景区。,宋老师,高级讲师
|
||||||
|
中国开放原子开源基金会银牌讲师,广东省人力资源与社会保障厅师资培训基地人工智能、区块链技术专家讲师。广东省职业教育“双师型”名师工作室成员,厦门大学大数据实验室百家讲坛特邀讲师。多本畅销软件开发教材的编写人和审稿人,国家十三五教材审稿人,在教学方面有丰富的经验。 ,张老师,高级讲师
|
||||||
|
开放原子开源基金会银牌讲师。具有多年常见指令集架构下的单片机外设、嵌入式操作系统下的开发经验。擅长机器视觉、深度学习结合各类传感器在智能机器人领域的应用。多年的教学经验,在基础理论和高等数学等方向的教学有深入的研究。 ,李老师,高级讲师
|
||||||
|
"开放原子开源基金会银牌讲师,毕业于深圳大学,10年的软件开发,机器学习和人工智能算法研发经验。精通C/C++, Python等开发语言, 对智能机器人以及Pytorch有丰富的项目授课经验,对项目全流程开发有丰富的架构经验,对算法工程实践有深入的研究。授课风格风趣幽默, 知识讲解结构层次分明。 ",肖老师,高级讲师
|
||||||
|
"传智教育高级讲师,拥有多年智能机器人、物联网行业经验。精通C++、C、Python、Java等多种编程语言,精通ROS机器人操作系统,对机器人开发有深入研究。 ",吴老师,高级讲师
|
||||||
|
传智教育高级讲师,鸿蒙开发先行者。精通C、C++、Python、Java等多种编程语言,熟悉电子电路设计,拥有多年物联网行业经验,精通ROS机器人操作系统,对机器人开发有一定见解。教学方面能够激发学生的学习兴趣,帮助他们发掘自己的潜能,能够为学生提供专业的技术指导,帮助他们解决实际开发中遇到的问题。 ,肖老师,高级讲师
|
||||||
|
中国开放原子开源基金会银牌讲师,擅长物联网协议、物联网设备的软硬件开发部署。精于通过编写优质C、C++代码,实现芯片功能。对智能硬件设计开发、机器人运动控制、传感器数据处理、人工智能算法有深入的理解和丰富的经验。 ,唐老师,高级讲师
|
||||||
|
高级讲师,资深开发工程师,10多年研发经验和教学经验。精通C/C++/Python语言编程,对GTK+、Qt图形界面编程有深入研究,精通嵌入式、物联网开发,熟练自动化测试。拥有丰富的授课及培训技巧,讲课幽默生动有趣,深入浅出。,江老师,高级讲师
|
||||||
|
精通C、C++、Python、Java等多种编程语言,擅长基于ROS下的工业互联网智能化开发,尤其在激光雕刻等工控机方向有较丰富的经验。熟悉物联网开发,多年教学经验,擅长启发学生思考,课堂风格轻松有趣。 ,覃老师,高级讲师
|
||||||
|
@@ -0,0 +1,148 @@
|
|||||||
|
[
|
||||||
|
{"name": "罗老师", "title": "高级讲师", "info": "11年JAVA开发经验,9年技术团队管理经验,7年项目架构经验(系统架构师职称),在电子政务、企业办公、电子商务、社交网络、移动应用、互金等行业软件方面拥有丰富的项目实战经验。先后在飞利信、高伟达、成都融特、日立、人人贷担任部门经理、TeamLeader、技术经理、Senior Consultant、技术经理,负责全国政协门户、Wradio+、Chinaface、居然在线、个贷官网、人人U学、Crawlers、Babel大数据平台等项目研发。\t\t\t\t\t\t"},
|
||||||
|
{"name": "姜老师", "title": "高级讲师", "info": "擅长Java EE企业级应用,十余年项目管理经验,曾担任开发工程师,架构师等重要角色。主导多个大型项目的架构设计、管理等工作。在互联网项目领域具备丰富的经验,精通微服务架构,擅长解决高并发,亿级数据量等架构设计,拥有广泛的技术面与实践经验。"},
|
||||||
|
{"name": "陈老师", "title": "高级讲师", "info": "11年互联网项目研发经验及教学经验,曾担任过开发工程师,技术部经理等职务。精通Java技术栈、对SpringBoot、Redis、RabbitMQ、ElasticSearch、Docker、SpringCloud等有深入研究。专注于分布式、高可用、高性能、微服务架构的设计。"},
|
||||||
|
{"name": "石老师", "title": "高级讲师", "info": "具有多年开发经验,曾先后在重庆科普、微创、爱奇艺等多家软件公司担任软件开发工程师、项目经理等职务,精通Java EE、Struts2、Spring、Hibernate应用开发。"},
|
||||||
|
{"name": "郭老师", "title": "高级讲师", "info": "6年软件开发与教学经验,曾在北京航天四创、中科软等单位担任研发经理职务,曾主持参与浙江省机要系统、国家电网系统、济宁市医疗平台、中国电信网络规划平台、人民日报社扶贫APP的设计开发工作。精通分布式、大数据、微服务、高并发、高可用等相关技术架构。\t\t\t\t\t\t"},
|
||||||
|
{"name": "付老师", "title": "高级讲师", "info": "多年开发和教学经验,曾在三星(中国)参与过大型跨国项目担任开发工程师,授课风趣幽默,精通Java EE、数据库、MyBatis、Spring全家桶等企业级常用技术;分布式系统开发经验丰富,对SpringBoot、SpringCloud、Dubbo、ZooKeeper 、ES、Solr、Redis、MQ等分布式技术深有研究。\t\t\t\t\t\t"},
|
||||||
|
{"name": "杨老师", "title": "高级讲师", "info": "10年软件开发和教学经验,武汉理工计算机和武汉大学经济学双学位,在Java和大数据开发领域有丰富的经验,曾参与铁路12306数据中台、用户画像、正晚点预测等多个系统的研发工作。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "廖老师", "title": "高级讲师", "info": "13年软件开发管理与教学经验;软件与大数据开发认证工程师,项目经理。曾开发管理过信诚人寿、美的、民生银行、青岛啤酒、联想、SGS e-learning、国家工商总局市场信用分类监管系统等。熟悉分布式、微服务等J2EE及大数据生态圈技术知识体系。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "蒙老师", "title": "高级讲师", "info": "12年互联网项目研发经验及教学经验,曾担任过开发工程师、技术部经理等职务。参与国家电网系统、饿了么外卖平台、每日优鲜O2O平台的设计以及开发工作。精通Java技术栈、对SpringBoot、Redis、Rabbit MQ、ElasticSearch、Docker、Spring Cloud等有深入研究。专注于分布式、高可用、高性能、微服务架构的设计。\t\t\t\t\t\t"},
|
||||||
|
{"name": "何老师", "title": "高级讲师", "info": "6年软件开发经验,曾任职医惠科技开发工程师、阿里巴巴开发工程师岗位,担任过高级开发工程师、项目经理、技术经理等职位。对大型TOB项目如His系统中分布式服务、数字化架构、高并发、高可用、数据一致性等有丰富的项目经验和业务知识。\t\t\t\t\t\t"},
|
||||||
|
{"name": "杨老师", "title": "高级讲师", "info": "5年软件开发及教学经验,先后在多家IT公司担任Android、Java方向软件开发工程师,研发项目涉及,新闻,理财,社交,教育等方向对Android、Java SE、Java Web、MySQL、前端等技术深入研究。\t\t\t\t\t\t"},
|
||||||
|
{"name": "师老师", "title": "高级讲师", "info": "13年的项目开发和教育培训经验,精通Java EE的主流开发框架、Oracle和MySQL等关系型数据库。曾在中科院遥感应用研究所、慧点科技、达利本斯等公司担任软件开发工程师、项目总监,带团队做过边防部队、人寿集团、平安集团等多个企业的大型项目,之后在互联网公司知果科技担任开发经理,完成知果果网的核心产品开发。\t\t\t\t\t\t"},
|
||||||
|
{"name": "杨老师", "title": "高级讲师", "info": "北京航空航天大学 计算机毕业。10年技术开发与管理经验。曾在北大方正、知名游戏公司、互联网公司等担任研发工程师、技术经理。参与移动聊天工具企业版、新媒体营销平台、档案信息管理系统等大型项目研发工作。擅长总结和梳理知识点,深入的对每个技术点进行讲解,引导式教学,注重培养学员能力。\t\t\t\t\t\t"},
|
||||||
|
{"name": "于老师", "title": "高级讲师", "info": "多年教学和开发经验对Java EE技术体系结构、Java Web原理有深刻理解。精通RPC、消息中间件、SSM、SpringCloud等技术,曾参与中国移动门户系统、中国移动集团客户对公平台、CRM系统、健康管理系统等。热衷于技术研究,善于用引导方式教学;授课思路清晰,注重学生基础知识掌握扎实,注重培养学生自主解决问题的能力。\t\t"},
|
||||||
|
{"name": "刘老师", "title": "高级讲师", "info": "多年网络安全及密码学开发经验,服务器研发经验,曾任职国家互联网应急中心关口监测系统研发经理职位。精通Golang、C/C++程序设计,Go与区块链领域先驱者。"},
|
||||||
|
{"name": "单老师", "title": "高级讲师", "info": "8年软件开发及教育相关工作; 有丰富的企业APP、网站、手游开发经验;精通大数据、Java等多种前沿技术,对Linux、MySQL、SSM框架底层、微服务架构 等有一定研究。喜欢钻研,乐于分享。学生遍及阿里、腾讯、苏宁等众多互联网企业。\t\t\t\t\t\t"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "8年Java EE企业级开发经验,5年开发团队管理经验,曾任某大型国有企业项目负责人,对于构建高吞吐、低延迟、分布式架构有丰富经验。精通Java SE、Java Web、Spring、SpringMVC、MyBatis和微服务等主流技术栈。具备丰富的项目重构和性能调优实战经验。秉承“复杂问题简单化,抽象问题具体化”的教学理念,注重学员解决问题能力和个人综合能力的全方位培养。\t\t\t\t\t\t"},
|
||||||
|
{"name": "叶老师", "title": "高级讲师", "info": "9年开发经验,3年授课经验。精通Oracle、DB2、MySQL等数据库使用,精通SSM、MQ、Security等框架使用,熟练Redis、SOA、微服等高可用架构的搭建。曾就职于联想信息产品(深圳)有限公司研发实验室,从事Think产品研发系统的开发与维护。工作积极认真与强烈的责任感、思维视野开阔。"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "10年以上开发以及教育经验,参与过大型的电子商务购物平台、中国电信在线营业厅等项目的开发,在我友科技、杭州数云信息技术担任开发经理职位。曾参与项目:《NewBI》《我友商城》《中国电信套餐直通车》等。\r\n"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "13年开发管理经验,曾先后就职于东亚银行、京东等知名企业,担任过高级开发工程师、项目经理、技术经理、架构师等职位,对电商、金融风控、反欺诈领域及互联网分布式服务、高并发、高可用、秒杀场景等有丰富项目经验和行业知识。精通JavaSE、JavaEE、SSM、Spring全家桶、分布式缓存、各种消息中间件等。对多线程、高并发的解决方案及各种开源技术有着深厚的研究。\t\t\t\t\t\t"},
|
||||||
|
{"name": "蒋老师", "title": "高级讲师", "info": "8年IT从业经验,先后担任高级Java软件工程师、项目组长等职务。具有扎实的Java基本功底和良好的编程规范,精通Java EE当下主流技术SSM,Spring,SpringMVC,Spring Boot,Spring Cloud,Spring Cloud Alibaba和NoSQL数据库;精通MySQL和Oracle数据库产品;多年分布式架构下的开发经验。具备扎实的技术功底、丰富的软件研发、项目管理经验及IT教学经验。幽默风趣,能充分调动学生学习的积极性与主动性,擅长以学员实际掌握情况灵活调整授课方案,以保证学员吸收最大化。\t\t\t\t\t\t"},
|
||||||
|
{"name": "于老师", "title": "高级讲师", "info": "11年软件开发及教学经验,曾先后在360、亚信联创、众信旅游担任研发工程师、技术经理岗位。擅长Java后台程序设计、微服务开发等,特别是在互联网领域有很强的开发经验。授课思路清晰,对学生认真负责,注重学生学习效果。研发以及录制大型新闻资讯项目《黑马头条》。\t\t\t\t\t\t"},
|
||||||
|
{"name": "姜老师", "title": "高级讲师", "info": "7年教学和开发经验。精通Java EE技术体系,对Java SE、Java Web、MySQL、Redis、Spring、SpringMVC以及MyBatis等技术点有深刻理解,授课风格幽默风趣,通俗易懂,条理清晰。关注于学生的成长、极具亲和力!\t\t\t\t\t\t"},
|
||||||
|
{"name": "许老师", "title": "高级讲师", "info": "多年互联网项目与游戏项目研发和管理经验,曾带领公司团队研发电商、社交、实时视频等相关领域项目。涉及H5、Unity3D、小程序等不同平台。对Vue,React,微信小程序等都有研究并具备了丰富的项目架构与研发经验。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "8年Java后台开发及教育工作经验,熟悉Java SE, Java EE, Spring,MyBatis, MySQL等常用框架,熟悉ELK技术栈,SpringCloud生态圈技术。熟练使用Vue.js, Node.js, Webpack等前端技术。曾在多家大型公司担任软件工程师,项目经理职务,涉及在线教育、证券交易、电商等不同领域。目前授课范围:SpringMVC, MyBatis, Lucene, Solr, SolrCloud, 乐优商城。\t\t\t\t\t"},
|
||||||
|
{"name": "赵老师", "title": "高级讲师", "info": "10余年互联网行业开发经验及教学经验,资深架构师,精通Java、C、Python等开发语言。曾就职大型互联网公司从事电商架构相关的设计和Java开发平台以及基础中间件的设计研发工作;曾主导研发了支持高并发处理能力的API网关、高性能数据库连接池以及海量数据归档平台。授课诙谐幽默,讲解通俗易懂。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "刘老师", "title": "高级讲师", "info": "10年Java研发和教学经验。先后任职于东方邦信、明医众禾、开薪点、企家有道等大型互联网企业,担任高级Java研发、技术经理等职务。负责和主导过多个互联网项目,如东方汇、医德帮、薪人薪事,涉及互联网金融、PHC基层医疗生态、人资 SaaS等领域。精通Java EE基础、并发编程、Socket网络编程,对Spring全家桶、Netty、MyBatis、MySQL Oracle、Redis、SpringBoot、Dubbo、Spring Cloud & Alibaba 微服务体系、RabbitMQ、Docker、K8S等多种互联网前沿技术有深入研究,熟悉JS 、Jquery、Bootstrap、Seajs、Backbone、ElementUI等前端技术。专注细致、幽默风趣,善于结合生活化场景和实际企业场景传达知识点。\t\t\t\t\t\t"},
|
||||||
|
{"name": "郭老师", "title": "高级讲师", "info": "5年的Java软件开发经验,5年Java专业教学经验,曾参与设计与开发多个大型互联网项目,主要有质监抽检,青历商城,E贷网P2P,天艺引资评估系统等等。长期致力于Web应用的开发与设计。擅长Java EE核心技术,SSM、Dubbo、SpringBoot、SpringCloud等。\t\t\t"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "6年开发经验,2年教学经验。在大型互联网公司担任TL、架构师,参与设计并搭建大数据、物联网等大型项目。精通Java、SSM框架以及SpringCloud、Dubbo、MQ等微服务架构体系。\t\t\t\t\t\t"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "曾任职于中国移动、平安保险。精通Java EE体系、MySQL、Android、鸿蒙等技术。主导研发《三天从0带你写一个Java小游戏》、《9天快速入门Java》、《Java从入门到起飞》、《鸿蒙应用开发》等多套课程。\t\t\t\t"},
|
||||||
|
{"name": "申老师", "title": "高级讲师", "info": "8年Java研发及教学经验,精通JavaEE技术体系,曾担任开发工程师、架构师等重要角色。参与于采帅令外卖系统、中国中铁集团道岔钢轨测量系统、中仕学社等互联网项目设计研发。曾主导过多个大型企业级项目的研发。对流行框架Spring,Redis、ElasticSearch、MQ中间件等有深入研究,熟悉以SpringCloud为核心的微服务技术体系,以及微服务在企业落地的最佳实践。授课幽默风趣,条理清晰,乐于分享,注重培养学生独立思考的能力。\t\t\t\t\t"},
|
||||||
|
{"name": "律老师", "title": "高级讲师", "info": "5年的软件开发及教学经验,擅长Java EE企业级应用,参与多个大型项目的架构设计、管理、开发等工作。在互联网项目领域具备丰富的经验,掌握Java SE,Java Web、MySQL、Redis以及Spring、SpringMVC、MyBatis、SpringBoot、SpringCloud等分布式架构技术,拥有广泛的技术面与实践经验。\t\t\t\t\t\t"},
|
||||||
|
{"name": "刘老师", "title": "高级讲师", "info": "多年互联网开发经验,深入理解Java虚拟机原理,以及参数优化,对SSM、SpringBoot、SpringCloud微服务等主流框架有深入的理解和使用,对实时流处理框架storm,并Kafka有多年使用经验。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "苗老师", "title": "高级讲师", "info": "15年研发经验,曾担任架构师、项目经理等职位,精通JavaEE技术栈,曾负责全国党员远程教育系统、云南学分银行系统、郑州地铁CCTV网管系统等项目的研发与管理工作。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "袁老师", "title": "高级讲师", "info": "精通C#,Java语言开发,精通MySQL,Oracle,SQL Server数据库,SSM框架,JS,jQuery前段框架。先后在广东源恒科技有限公司、武汉付运通科技有限公司任职, 教学严谨,授课思路清晰,善于语言表达和总结行业经验,因材施教。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "多年开发与教学经验,精通Java企业平台开发技术,熟练掌握并使用设计模式、常用开源框架、分布式架构及微服务架构,先后担任过工程师、项目经理等职位,曾参与过商城项目,主导过智慧医疗等项目研发,具备一定的项目管理经验,同时具有丰富的教学经验,授课认真负责,条理清晰。\t\t\t\t\t\t"},
|
||||||
|
{"name": "邓老师", "title": "高级讲师", "info": "10年Java开发及教学经验,曾在多家公司担任软件开发工程师,技术功底深厚,授课幽默风趣,通俗易懂。精通MySQL,Redis及Spring, MyBatis, SpringMVC, SpringBoot, SpringCloud, SpringData系列框架,并对Solr, ElasticSearch, Dubbo, MQ中间件技术有深入研究。\t\t\t\t\t\t"},
|
||||||
|
{"name": "刘老师", "title": "高级讲师", "info": "9年一线研发与教学经验,曾先后在中石油、久其软件等企业担任研发工程师,参与油气管道全生命周期建设、昆仑燃气等项目,并为国资委、兵工、航天科工等研发CI财报产品。精通Java SE、Java EE技术和SSH/SSM、SpringBoot等常用框架,对Dubbo、ZooKeeper、SpringCloud、MQ、Redis、MongoDB、MySQL等流行框架和技术有深入研究。授课逻辑清晰,通俗易懂,受到众多学生的认可和喜爱。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "翟老师", "title": "高级讲师", "info": "5年Java开发和项目管理经验,3年的授课经验。曾先后于北大医信、泰和诚任开发工程师、项目主管职位,精通Java语言,擅长Java EE技术栈,对MySQL数据库有深入的了解。课堂幽默风趣,善于用生活中的例子讲解Java中晦涩难懂的知识点。"},
|
||||||
|
{"name": "高老师", "title": "高级讲师", "info": "多年开发和教学经验,曾在中星测控、中软国际担任开发工程师,有移动端、PC端、服务端软件等多类型软件的开发经验,授课不拘一格、深入浅出、风默有趣。精通Java开发,对JVM、数据库、Web规范、数据结构与算法以及主流应用框架均有深入研究。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "多年开发与教学经验,对Spring生态系统,消息中间件,数据库等技术有深入理解和研究。先后在陕西出版集团,中软、电讯盈科等担任过软件开发工程师职务,参与开发过书海小说网,延安英雄传后端等项目开发。\t\t\t\t\t\t"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "具有8年软件开发与教学经验,具有丰富的开发经验,先后在四方精创、华侨城文旅科技、达普信科技等公司担任技术研发与项目运维等工作,先后经历过中国银行(香港)私人银行业务开发、华侨城文旅科技公司内部网站建设以及海关平台相关业务的需求研发。熟悉使用SSH、SSM、缓存Redis、MySQL、Oracle、数据报表等。\t\t\t\t\t\t"},
|
||||||
|
{"name": "袁老师", "title": "高级讲师", "info": "从事Java EE开发及教学工作多年,先后在多家公司担任开发工程师,项目经理等职务。精通Redis及Spring、MyBatis、SpringMVC、SpringBoot、SpringCloud系列框架;拥有大数据项目开发经验,对Hadoop生态圈如Hive,Zookeeper,Hbase等技术有深入研究。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "毕业于东北师范大学,五年以上开发经验,多年软件开发教育培训经验,精通Java SE、MySQL等编程开发语言和开发技术,熟练掌握各种数据结构和算法,精通Spring、SpringMVC、MyBatis等常用框架,熟练掌握微服务框架,授课风格幽默风趣,可以将知识化繁为简、深入浅出的教授给学员。\t\t\t\t\t\t"},
|
||||||
|
{"name": "王老师", "title": "高级讲师", "info": "5年软件研发与项目管理经验,精通Java开发语言以及MySQL、Oracle数据库,对Java流行框架有深入研究,曾在企业中参与主导旅游、活动竞赛等领域项目开发。在传智播客有三年教学经验,授课认真负责,注重学员独立分析能力。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "郝老师", "title": "高级讲师", "info": "5年软件开发及教学经验,Android、Java方向软件开发工程师,研发项目涉及教育、新闻、娱乐直播等。对Android、Java SE、Java Web、MySQL、前端等技术深入研究。\t\t\t\t\t\t"},
|
||||||
|
{"name": "陈老师", "title": "高级讲师", "info": "15年研发及技术管理经验,历任Java研发、架构师、技术总监等职位。热衷于研究主流Java技术,擅长微服务、高并发、高可用、大数据处理平台的搭建及主要解决方案的落地实施。曾主持开发电商日志采集系统、电商数据开放平台、电商推荐和搜索分析系统、商家开放平台、物联网冷链监控平台等电商及物联网行业SaaS项目。\t\t\t"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "985,211重点大学毕业,拥有10年的开发经验和架构设计经验,曾在几个大型公司担任系统架构师,精通系统架构,曾主持各种大型网站架构设计与开发,主持设计研发ODPS框架,SWORD框架,授课特点:幽默风趣,通俗易懂,条理清晰,层次分明。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "6年Java软件开发及相关教育工作,熟悉Java EE、Android开发,对主流框架有深入了解。曾参与过联通集成公司的4G系统和结算系统开发;主导过移动健康相关项目应用开发。传智授课3年,讲课风格诙谐幽默,倡导寓教于乐的授课方式。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "刘老师", "title": "高级讲师", "info": "多年J2EE项目研发及管理经验,曾就职于多家大型互联网企业,有着多年的一线开发经验,涉及过互联网电商项目,移动管理系统等,企业ERP系统,手机App项目等。精通Java SE,Java Web,对Spring、MyBatis、SpringMVC、SpringBoot、Android、MySQL、Redis、Solr、Dubbo、FastDFS等有深入研究。"},
|
||||||
|
{"name": "年老师", "title": "高级讲师", "info": "7年软件开发与教学经验,曾负责游戏大数据平台可视化、国家公开信息采集系统、企业电商架构构建等。精通JavaEE,SSM/SSH、Spring全家桶技术。对NoSQL、消息队列、服务集成、微服务、持续集成及各种开源技术有着深厚的研究。\t\t\t\t\t"},
|
||||||
|
{"name": "周老师", "title": "高级讲师", "info": "多年开发和教学经验,涉及到手机应用Web后台开发,精通Java SE、 Java EE、Android。曾多次参与开发国家版权局对应版权业务。\t\t\t\t\t\t"},
|
||||||
|
{"name": "陈老师", "title": "高级讲师", "info": "6年一线研发经验,2年Java教学经验,先后负责国家电网、质检总局、广西海关等单位的多个大型系统研发,后期主做在线教育互联网项目。精通MVC框架、擅长分布式框架、微服务框架,授课有热情、思路清晰、深入浅出。主讲项目阶段及就业冲刺阶段课程。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "黄老师", "title": "高级讲师", "info": "拥有5年的企业开发和教学经验,对于目前主流的SSM, SpingBoot, SpingCloud, SQL优化等常用框架和技术都有深入的理解。熟练掌握Redis缓存技术和缓存方案。对于常用的消息中间件RabbitMQ和ActiveMQ等以及定时任务等都有相关的实际开发经验。对于前端框架Vue.jsp以及其他前端基础都有所涉及。\t\t\t\t\t\t"},
|
||||||
|
{"name": "赵老师", "title": "高级讲师", "info": "14年软件开发与教学经验,具有丰富的技术团队管理经验,精通Java \r\n EE(JSPServlet、JDBC、Struts2、Spring、Hibernate、MyBatis),以及 WebService、Ajax、Oracle、DB2、MySQL、NoSQL、分布式RPC框架Dubbo、SpringCloud、ZooKeeper、MQ、Redis等。曾先后参与江苏媒资系统、中信银行大客户对公平台、胜利油田办公自动化平台、武警部队信息化系统的研发与管理工作。"},
|
||||||
|
{"name": "徐老师", "title": "高级讲师", "info": "JAVA开发工程师。有着多年的软件开发经验,精通Java EE企业级应用技术,精通MySql、Oracle、DB2等主流关系型数据库,有着丰富的数据库开发经验。曾经参与过移动公司的实时人流监控、用户缴费日志实时分析等大数据项目,熟悉大数据相关开发。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "陈老师", "title": "高级讲师", "info": "10年软件研发、项目管理与教学经验,精通Java开发技术,曾先后担任过技术经理、技术主管、项目经理等职位。主导研发超过5个以上大型项目与平台。精通微服务架构,擅长解决高并发,亿级数据量等架构设计,拥有广泛的技术面与实践经验。\t\t\t\t\t\t"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "10年企业一线开发经验,在多家企业担任开发工程师,架构师,项目经理等职位,参与或主持航信-航意险,中彩网,网上商城等项目的开发。专注于JavaEE开发,深入研究Spring全家桶、MyBatis、Dobuo等流行框架,对分布式,微服务架构体系有独到的见解。\t\t\t\t\t\t"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "多年开发和教学经验,对Java EE,iOS,Android多平台的开发有丰富经验,熟练掌握SSM、Dubbo,Spring Security,SpringBoot等框架,能熟练操作Oracle,MySQL等关系型数据库, 授课幽默风趣,通俗易懂,关注学员消化吸收,注重培养学员独立分析能力及动手能力。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "束老师", "title": "高级讲师", "info": "12年工作经验,架构师,多年IT领域研发经验、深入的理解SSM、Redis、RocketMQ、Memcached、Quartz、Dubbo、SpringBoot、SpringCloud等框架,主要负责参与的项目《全国数字物价监测中心》、《上海浦发银行信用卡客户服务中心》、《某金融平台统一支付中心》等项目。\t\t\t\t\t\t"},
|
||||||
|
{"name": "唐老师", "title": "高级讲师", "info": "13年项目开发和教学经验,对SpringData、SpringCloud、Docker等技术有深入的研究,熟练掌握 MySQL、Redis,SSM框架、Dubbo、ZooKeeper等技术,热衷主流Java开源框架,曾参与中国电信计费系统、银行自动服务后台操作系统等。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "刘老师", "title": "高级讲师", "info": "负责公司后台核心系统、资质审核系统、风控审核系统、标的审核系统的设计与搭建,对接存管银行的API,对接第三方银行机构。后台系统基于大数据的车辆对比系统、车辆实时信息联网查询、车辆电池信息以及前台基于百度地图的路径规划、动态围栏等功能。"},
|
||||||
|
{"name": "宋老师", "title": "高级讲师", "info": "10年软件开发经验,曾在用友网络担任项目经理、项目总监等职务,先后主导过佛山美的集团互联网系统应用、白云国际机场商旅电商系统和深圳民太安公估保险移动互联网应用等。 精通Java EE、并发编程、SSM、SpringBoot。对CDN、NoSQL、消息队列、微服务、JVM性能调优、爬虫级各种开源框架等技术。\r\n\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "徐老师", "title": "高级讲师", "info": "10年Java从业经验,曾负责安防视频监控系统、华为VMS语言邮箱系统、电信网络质量监控系统、溯源APP等。精通Java SE,Java EE,SSM/SSH,Spring全家桶。对NoSQL、消息队列、服务集成、流程引擎、微服务、持续集成及各种开源技术有着深厚的研究。\t\t\t\t\t"},
|
||||||
|
{"name": "杨老师", "title": "高级讲师", "info": "从事Java工作多年,有着丰富的开发和教学经验,Java,JSP,Servlet开发,精通SSM、Dubbo,Spring Security,Struts2,Hibernate等框架,能熟练操作Oracle,MySQL等关系型数据库。授课幽默风趣,通俗易懂。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "从事十年大型互联网软件开发和教学工作,具有丰富的软件开发和项目管理经验,精通Java 、Swift、Python等语言,曾主导并参与多个大型项目,包括W3Mobile华为协同办公平台,迪士尼蓝牙点读笔等。具有丰富的教学经验,授课思路清晰,风趣幽默,通俗易懂。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "王老师", "title": "高级讲师", "info": "10多年IT从业经验,北大计算机毕业,曾在中科软从事系统分析与架构工作,精通OOM、PD、DDD建模;对计算机原理、体系结构、常用算法有深入研究;熟练分布式和微服务环境下的主流技术架构。\t\t\t\t\t\t"},
|
||||||
|
{"name": "王老师", "title": "高级讲师", "info": "9年Java开发管理和教学,先后在STS(国外)、艾默生网络能源、华胜天成等担任过软件开发工程师、项目主管等职务。精通MySQL、Oracle等数据库以及市场流行的Web框架(SSM、Spring全家桶等)。参与完成的项目主要有:移动国漫项目、短信平台、流量平台、海外物流等。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "孔老师", "title": "高级讲师", "info": "先后在宜信、顺丰、美菜担任研发工程师,具有近10年的Java实战研发经验,熟练掌握当今主流技术(MyBatis/iBatis、Spring、SpringMVC、Dubbo、Elasticsearch、SpringBoot、SpringCloud),曾参与研发基础医疗His、CRM、美菜搜索、顺丰优选等项目。\t\t\t\t\t"},
|
||||||
|
{"name": "梅老师", "title": "高级讲师", "info": "曾担任过Android应用开发,Java企业级开发工程师,智能家居行业曾获取App软件专利,精通MyBatis,SpringMVC,Spring,Vue等当下主流的框架,以及其底层实现的原理,熟练使用MySQL,Oracle,Redis主流的数据库,有丰富的授课经验。\t\t\t\t\t\t"},
|
||||||
|
{"name": "夏老师", "title": "高级讲师", "info": "上海交大软件工程毕业,10年大型项目实战经验,精通C++、Java、JavaScript等多种主流开发语言。曾在多家500强企业任职,参与金融、物联网、通信等多个领域系统的设计和开发,对常用分布式技术和微服务架构均有深入研究。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "曾经主导和参与过:中国银行网点规划系统、河南移动网上营业厅、郑州市科技局综合性门户网站、河南地税缴费系统等等项目。曾经参与策划和编写过多本书籍并出版发行,例如《Ajax+JSP巧学巧用》《Struts2框架开发从入门到精通》《EJB3从入门到精通》等等。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "陆老师", "title": "高级讲师", "info": "拥有多年开发和教学经验,精通Java EE领域编程语言。 深入研究流行框架 SpringMVC、Spring、Hibernate、MyBatis、缓存系统Redis等。 教学擅长理论与实际相结合,对复杂简单化。 曾参与研发大型项目《万达慧云系统》、《建筑需求响应运营管理系统》等。\t\t\t"},
|
||||||
|
{"name": "周老师", "title": "高级讲师", "info": "2015年加入黑马,精通Servlet、JSP、JavaMail、JDBC、JMS、WebService、Struts2、Spring、SpringMVC框架、MyBatis等技术;精通MySQL、Oracle数据库,Tomcat、JBoss等服务器的搭建和部署。在中软等企业从事大型Web项目的设计开发多年,曾任项目经理等职位。\t\t\t"},
|
||||||
|
{"name": "王老师", "title": "高级讲师", "info": "多年软件开发及项目管理经验,精通Java、PHP、C++等编程语言;先后在北京K2地产、由米定制等企业担任开发及管理工作;精通Struts2、Spring、Hibernate、SpringMVC、MyBatis等常用框架;对Oracle,MySQL,Redis,MongoDB等数据库技术有深入研究。"},
|
||||||
|
{"name": "何老师", "title": "高级讲师", "info": "拥有多年开发经验,先后在中科大洋、易宝支付等公司担任软件开发工程师等职务。热衷于研究主流Java开源框架、Web开发技术。擅长J2EE技术栈中的Spring、SpringMVC, MyBatis,SpringBoot等流行框架,以及对Tomcat, ElasticSearch, Oracle, MySQL,Redis等有深入研究。对待学生循循善诱,讲解知识深入浅出。"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "8年Java EE开发与教学经验,精通Java EE技术体系,对Java Web以及Spring、SpringMVC、Struts2、Hibernate、MyBatis等技术有深入的研究。对微服务架构SpringBoot、SpringData、SpringCloud、Docker等技术有系统的研究。熟练应用Vue.js,Node.js,Angular.js等前端框架。精通MySQL、Oracle、Redis、MongoDB等数据的搭建和优化等,曾参与研发黑龙江联通管理系统,国家电网项目,中国电建招标平台系统等开发与管理工作。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "饶老师", "title": "高级讲师", "info": "Java EE开发与教学多年,精通Java EE技术体系,对流程SSH,SSM以及潮流的SpringData、SpringCloud、Docker等技术有深入的研究。授课逻辑严谨、条理清晰,注重学生独立解决问题的能力,善于总结一类问题,启发式教学。\t\t\t\t"},
|
||||||
|
{"name": "胡老师", "title": "高级讲师", "info": "从事软件开发工作多年,涉及.Net、HTML5、Unity3d、IOS等平台,曾参与乌龟猜猜,敲打乐敲你妹等跨平台游戏项目的开发,之后投身教育行业,授课过程中擅长使用图片、动画把知识点化繁为简,深受学员喜爱。"},
|
||||||
|
{"name": "王老师", "title": "高级讲师", "info": "具备多年电商&互联网移动APP市场&物联网行业的软件开发经验,对主流MVVM技术框架(React、微信小程序、Vue),UI框架,模块化,原生JavaScript,Node.js,数据库,代码管理工具等有着丰富的实战运用经验和团队协作经验。曾带领团队完成企业级系统应用设计、搭建、开发、上线等一整套的流程。\t\t\t\t\t"},
|
||||||
|
{"name": "王老师", "title": "高级讲师", "info": "秉承务实、责任、创新、育人的价值观,用爱成就每一位学生。拥有多年互联网前端应用和软件开发经验,擅长React、Vue。曾就职于TalkingData、用友等公司,负责过多个大型数据分析和可视化平台、移动电商等项目架构和研发工作。"},
|
||||||
|
{"name": "苏老师", "title": "高级讲师", "info": "6年+从业经验,精通HTML5、CSS3、JavaSript, 熟悉Vue、React、Angular、jQuery、BootStrap。 特别擅长微信小程序,首次研发和实施了完整的微信小程序商城项目。 教学细腻,能够深入浅出地剖析知识点。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "潘老师", "title": "高级讲师", "info": "擅长前端企业级项目,在前端领域有自己的发明专利,精通大前端各个方向技术,走在技术的前沿,授课风格幽默,课堂氛围活跃,有强烈的责任心和使命感,能将教学知识与技术应用场景相结合,做到让学生学有所成,学以致用。"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "毕业于211院校,曾就职于大型在线教育公司,主导通用组件库的研发,有丰富的项目开发经验和授课经验。擅长移动端开发以及前端主流框架Vue,React。上课风趣幽默,善于将晦涩难懂的术语用生活情境演绎;课后提炼重点,帮助学生高效学习。真正做到让学生知其然,并且知其所以然。\t\t\t\t\t\t"},
|
||||||
|
{"name": "梁老师", "title": "高级讲师", "info": "毕业于巴黎第十三大学网络多媒体专业,旅法期间服务于艾姆家居,Cibox(法国),曾任微来中国前端负责人,主导澳蚁,趣拼标前端架构。精通JavaScript、Vue、Node.js、jQuery,熟悉 PHP、MySQL,性格乐观开朗,上课善于带动学生的学习激情。"},
|
||||||
|
{"name": "万老师", "title": "高级讲师", "info": "开发全栈开发工程师,曾主导开发广铁运输、智能设备项目。精通Node.js、Webpack、Vue、React、微信小程序,热衷于技术分享,在B站上发布的微信小程序项目访问排名靠前。教学风格幽默、细腻、能快准狠的将知识传达给学生。\t\t\t"},
|
||||||
|
{"name": "赵老师", "title": "高级讲师", "info": "多年软件开发经验,曾负责上海银行App架构搭建,主导组件化开发;曾负责51CTO主站重构,及直播平台搭建,及负责鸿蒙社区维护,熟练使用redis缓存及服务端渲染;擅长JavaScript、Vue.js技术栈。\t\t\t\t"},
|
||||||
|
{"name": "毛老师", "title": "高级讲师", "info": "拥有多年电商&互联网金融行业的软件开发经验,曾在招商基金、eims、TCL集团担任项目经理与技术负责人职位,对主流的MVVM框架、移动端开发框架、UI框架、SPA、构建工具、Serverless、代码版本管理软件、模块化、RxJS、Node.js、数据库等技术有丰富的开发和团队协同经验。\t\t\t\t\t\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "柴老师", "title": "高级讲师", "info": "Web前端开发工程师,五年开发经验,两年团队管理经验,Vue资深用户。先后参加多个大型管理系统开发,负责前端技术架构,公共业务组件封装;精通前端技术体系,熟练使用CSS3、ES6、Vue、React等前端技术;授课清晰和蔼,擅长调用学员的思考能力,深受学员喜爱。\t\t\t\t\t\t"},
|
||||||
|
{"name": "周老师", "title": "高级讲师", "info": "十年Java与Web前端项目研发与教学经验,曾担任系统架构师、前端主管等职位。曾主导和研发物联网、网银、团购、电商、金融等相关领域的项目。对Node.js、Vue、小程序、React、移动App、数据可视化等前端技术有深入研究并有丰富的项目架构和研发经验。授课条理清晰,循序渐进,深入浅出,认真耐心细致的将知识传授给每一位学员。\t\t\t\t"},
|
||||||
|
{"name": "高老师", "title": "高级讲师", "info": "八年团队研发经验,前后端各类技术均有涉猎,前后研发了多个平台级项目产品,曾担任某大型软件企业的前端架构师,负责公司平台级应用开发工具的设计和架构,精通OTO类移动开发业务,曾担任某大型餐饮软件公司前端负责人,负责公司移动端产品设计和技术架构的开发工作。"},
|
||||||
|
{"name": "蒋老师", "title": "高级讲师", "info": "Web前端工程师,多年前端开发和实践教学经验,精通JavaScript、Ajax、jQuery、Vue、React、小程序以及Node.js、PHP、MySQL等前后端技术。喜欢钻研,热爱源码封装,授课风趣幽默,由浅入深,广为好评!\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "Web前端开发工程师,具有多年的Web开发经验和教学经验。精通HTML,CSS、JavaScript等,对于前端主流框架Vue、React等有深入研究。不但授课清晰, 而且指导超过千余名学生成功就业, 具有丰富的IT行业经验。授课风格幽默风趣,讲解课程细致深入浅出,授课过程中注重与学生的沟通,广受学生好评。\t\t\t\t\t"},
|
||||||
|
{"name": "宋老师", "title": "高级讲师", "info": "六年前端开发经验,曾担任核心技术团队前端负责人,对JavaScript, 小程序、Vue, Node等技术有深入的研发,擅长以项目、案例驱动教学,懂得如何以学生的角度去思考问题,亲和力强。曾参与华为云官网、华为云社区等多个大型项目的研发。\t\t\t\t\t\t"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "06年软件工程毕业,资深全栈讲师,从前端到后端架构有一套完整体系,入行前带领技术团队完成用户日增长量10W+的翼推送项目、天翼宽带、页游平台及分成系统架构和研发。讲课深入浅出,思路清晰到位,深受学生好评。"},
|
||||||
|
{"name": "赵老师", "title": "高级讲师", "info": "多年开发经验,精通HTML5、CSS3、JavaScript、jQuery、Vue、React等前端技术,曾先后主导多个大型项目开发。授课认真负责、深入浅出,致力于让不同基础的学生日有所学、日有所长。\t\t\t\t\t\t"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "Apache Flink源码贡献者,专注大数据实时计算领域,ApacheCon Asia 2022亚洲峰会特邀讲师"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "985计算机硕士,Apache Doris社区贡献者。\t\t\t\t\t"},
|
||||||
|
{"name": "赵老师", "title": "高级讲师", "info": "985计算机硕士,多年深耕大数据、人工智能领域,ApacheCon Asia 2022亚洲峰会特邀讲师\t\t\t\t"},
|
||||||
|
{"name": "曹老师", "title": "高级讲师", "info": "Apache Flink源码贡献者,擅长大数据云平台技术领域。\t\t"},
|
||||||
|
{"name": "赵老师", "title": "高级讲师", "info": "Apache Pulsar社区贡献者,擅长数仓领域技术。"},
|
||||||
|
{"name": "闻老师", "title": "高级讲师", "info": "擅长数仓领域技术,擅长海量数据下的流式计算和离线数据处理。"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "10年开发和教学经验,擅长大数据实时计算,拥有互联网停车平台项目经验。\t\t\t\t"},
|
||||||
|
{"name": "孔老师", "title": "高级讲师", "info": "Apache DolphinScheduler社区贡献者,擅长离线数仓领域。\t\t\t\t"},
|
||||||
|
{"name": "江老师", "title": "高级讲师", "info": "大数据架构师,主导基于Flink的实时反欺诈风控、实时地铁故障预警等流式计算平台的设计和研发。\t\t\t\t\t\t"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "擅长实时领域,拥有金融行业大数据应用架构及开发经验。\t\t\t\t"},
|
||||||
|
{"name": "原老师", "title": "高级讲师", "info": "北京大学计算机硕士,擅长大数据/人工智能领域技术。\t\t"},
|
||||||
|
{"name": "谢老师", "title": "高级讲师", "info": "擅长数仓领域技术,拥有丰富的安全领域大数据行业经验。\t"},
|
||||||
|
{"name": "史老师", "title": "高级讲师", "info": "大数据架构师,拥有丰富的技术攻坚经验。\t\t"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "北京化工大学工学硕士,多家互联网公司首席信息官,算法专家,具备多年机器学习,深度学习等人工智能相关算法的研发经验, 熟悉Python、Java等常用开发语言,对PyTorch,Tensorflow,PaddlePaddle等深度学习框架熟练使用,在自然语言处理应用方面具备多年的企业实践经验。\t\t\t\t"},
|
||||||
|
{"name": "原老师", "title": "高级讲师", "info": "北京大学电子与通信工程硕士, 多年开发经验,对数据分析,大数据,机器学习,后端开发等技术有深入了解, 精通java Python等常用开发语言,在多家软件公司担任软件工程师, 项目经理, 有新浪微博,中新网新闻发布系统等多个大型项目经验。\t\t\t\t\t\t"},
|
||||||
|
{"name": "赵老师", "title": "高级讲师", "info": "擅长人工智能领域技术,多年模式识别和数据挖掘开发经验,主导研发多项国家和省级科研项目,负责企业级信贷风控模型和智能医疗数据平台开发,专注ML/DL/PR/KG领域相关算法的应用,曾任职美团搜索部负责NER及Bert搜索排序优化对Hadoop、SparkTensorflow和PyTorch等大数据、人工智能技术有多年企业实践经验。\t\t\t\t\t"},
|
||||||
|
{"name": "魏老师", "title": "高级讲师", "info": "多年数据开发经验,曾参与过国云数据公司的数据中台开发,以及甲乙丙丁公司商品推荐系统开发。精通Python、MySQL编程语言,机器学习以及推荐相关算法,熟练应用Hadoop、Hive离线数仓等相关技术。曾担任过BI数据分析师,数据挖掘,推荐算法工程师,数据仓库工程师等数据以及算法相关岗位。\t\t\t\t\t\t"},
|
||||||
|
{"name": "刘老师", "title": "高级讲师", "info": "负责公司后台核心系统、资质审核系统、风控审核系统、标的审核系统的设计与搭建,对接存管银行的API,对接第三方银行机构。后台系统基于大数据的车辆对比系统、车辆实时信息联网查询、车辆电池信息以及前台基于百度地图的路径规划、动态围栏等功能。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "姚老师", "title": "高级讲师", "info": "毕业于哈尔滨工程大学,擅长GIS行业工程实战,在图像分割、检测、追踪等方面有多年从业经历,参与多项国家级/部委级重大项目,具备丰富的工程落地经验。\t\t\t\t\t\t"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "曾就职于多家上市公司,并担任高级算法工程师、算法专家。研究领域包括NLP、目标检测、视频跟踪、大语言模型、多模态、模型推理加速等。"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "6年开发经验,2年教学经验。在大型互联网公司担任TL、架构师,参与设计并搭建大数据、物联网等大型项目。精通Java、SSM框架以及SpringCloud、Dubbo、MQ等微服务架构体系。\t\t\t\t\t\t"},
|
||||||
|
{"name": "刘老师", "title": "高级讲师", "info": "拥有10年设计经验,曾服务北京正邦品牌策划,百度用户体验中心,北京资海科技集团,龙采科技集团,优逸客科技教育集团,洛杉矶张大钦律师事务所等众多一线互联网设计与外包平台。担任视觉设计师。致力于研究视觉界面设计、品牌服务设计、人机交互等方向,项目经验丰富。"},
|
||||||
|
{"name": "闫老师", "title": "高级讲师", "info": "拥有7年的设计经验,视觉传达设计专业。精通photoshop、illusstrator,Axure等常用设计软件,熟练Html,CSS等前端技术。曾创办独立设计工作室。授课风格幽默,思路清晰。时常告诫学生莫忘设计初心,才能方得始终!\t\t\t\t\t"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "拥有8年设计经验,艺术设计专业出身。涉及领域包括UI设计、网站设计、平面印刷广告、包装设计、手绘、VI设计等。曾为武汉理工孵化器、中国语料库等知名企业设计VI视觉识别系统,进行企业品牌推广。具备多年的网页与APP项目开发经验。\t\t\t\t\t"},
|
||||||
|
{"name": "曾老师", "title": "高级讲师", "info": "从事设计行业7年,精通多种设计软件。曾在广告公司担任设计师及设计总监。服务企业有深圳海洋局、招商地产、香港珠宝、华润集团等。2012年投身教育事业,深受广大学员爱戴。"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "毕业于中央美术学院视觉传达专业,从事艺术设计类行业多年,曾任设计主管职位。主导进行7个品牌的提案,建立,维护,及后期升级的全案设计,服务于瑞幸,星巴克等30多个品牌。涉及品牌的线上视觉,线下电商,三维视觉,包装设计等,项目实战经验丰富。\t\t\t\t\t\t"},
|
||||||
|
{"name": "高老师", "title": "高级讲师", "info": "国内设计色彩搭配知名博主、Adobe认证讲师、十三年工作经验。擅长软件:Photoshop、Illustrator、CorelDRAW、Sketch、AxureRP、C4D、Principle等。服务过的部分知名客户:欧莱雅、万科地产、嘉顿食品、盛大游戏、宝马、阿里巴巴、新浪网、腾讯大粤网、福特汽车等。\t\t\t\t\t\t"},
|
||||||
|
{"name": "谭老师", "title": "高级讲师", "info": "14年互联网设计经验,首批移动互联网UI设计师,知名WEB设计师,对视觉设计、平面设计、界面设计、体验设计、交互设计、动画制作、影视后期等多方面有研究。曾主导腾讯、小米、IBM、路虎汽车、湖南卫视、上海世博会等500强企业互联网项目。"},
|
||||||
|
{"name": "邢老师", "title": "高级讲师", "info": "10年Linux平台互联网开发经验,业界资深讲师。精通Linux内核开发、内核系统移植、ARM SOC体系结构设计、C/C++、Python、JavaScript、LISP、ARM/X86汇编等编程语言,全栈工程师对计算机原理从上到下融会贯通。"},
|
||||||
|
{"name": "许老师", "title": "高级讲师", "info": "10年以上软件测试开发、质量管理、项目管理经验,熟练使用Java、Python开发语言,擅长功能测试、接口测试、自动化测试、性能测试等;具有丰富的教学经验,授课幽默风趣,能积极调动学员的积极性。"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "8年软件测试及项目管理经验,曾任职于蔚来汽车研发部门,在大型电商公司负责测试平台开发,测试管理工作;参与测试的项目有互联网出行,电子商务等,拥有丰富的Java和Python语言经验,有性能测试、自动化测试及测试平台的开发经验。"},
|
||||||
|
{"name": "刘老师", "title": "高级讲师", "info": "从事软件开发和软件测试10年, 熟悉软件项目开发和软件测试流程;熟悉多种测试环境搭建,熟练操作数据库,熟悉Java、Python、H5语言,对Web端自动化测试、接口测试有着丰富经验积累,并有丰富企培、校企合作专业领域培训经验。"},
|
||||||
|
{"name": "朱老师", "title": "高级讲师", "info": "8年以上软件测试及项目管理经验,能熟练运用Python等编程语言,擅长功能测试,接口测试,及自动化测试,能够通过丰富的项目实战经验激发学生学习兴趣,培养学生独立思考和解决问题的能力。具有国家信息系统项目管理师认证、ACP认证。\t\t\t\t\t"},
|
||||||
|
{"name": "梁老师", "title": "高级讲师", "info": "7年互联网营销推广工作经验,对互联网+新营销有独到的见解和认知,曾为中国移动,中国电信,爱立信一线运营部进行营销培训,擅长以营销思维和锋利的创意解决问题。讲课风格循序渐进,让受训学员看得见、摸得着、体验得到的亲民教学,落到实处。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "刘老师", "title": "高级讲师", "info": "6年的互联网新媒体运营经验,对文字营销和视频营销有着独到的见解,为上百家企业做过新媒体营销策划方案。曾用2个月的时间孵化出0到200万粉丝的种草推荐类短视频账号,对热点事件极具敏感性。擅长讲故事,脱口秀,授课方式轻松幽默。\t\t\t\t\t\t"},
|
||||||
|
{"name": "吴老师", "title": "高级讲师", "info": "互联网行业从业十多年,曾任网站和电子杂志主编、市场营销主管、媒介主管、文案策划主管,文案策划、市场营销、网站运营和媒介监测经验丰富。曾主导腾讯游戏发布、腾讯动漫整体媒介营销、设计行业大赛策划和运营。"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "5年短视频直播实战经验,曾担任多家企业运营总监、操盘手。擅长流量整体规划操盘、0-1IP孵化及流量变现。孵化的蓝V账号曾在抖音星图地产赛道排名第一,授课风格幽默严谨,擅长用案例启发思考。\t\t\t\t\t"},
|
||||||
|
{"name": "王老师", "title": "高级讲师", "info": "致力于网站策划运营、网络营销推广SEM/SEO、淘宝SEO、QQ群优化、数据分析等媒体方面的研究与实践五年有余,经验丰富。在多家高热度网站拥有个人专栏,为众多互联网从业人员提供免费职业辅导和工作指导,拥有忠实粉丝圈,口碑在业界广为人知。"},
|
||||||
|
{"name": "彭老师", "title": "高级讲师", "info": "6年新媒体短视频运营经验,创业做过新媒体代运营公司,有丰富的甲方、乙方、MCN机构等行业经验,在短视频以及公众号时代分别做过百万+、十万+等大小账号,合作过的企业有:招行、中行、平安、华润三九、达利、泰康、晨光、东鹏特饮等,擅长新媒体短视频ip孵化,直播带货等新媒体知识分享。\t\t\t\t\t"},
|
||||||
|
{"name": "尹老师", "title": "高级讲师", "info": "红粉笔联合创始人,曾在中山大学、河北经贸大学等二十余所高校讲授短视频、电商实训项目。具有多个领域商业变现经验,涵盖教育、娱乐、剧情、旅行、电商种草等领域。指导众多学员项目案例,学员零启动美食账号单个作品涨粉20W+、零启动新奇特特效账号首作品流量破100w+,单条带货视频变现8W+。"},
|
||||||
|
{"name": "赵老师", "title": "高级讲师", "info": "四年短视频和直播运营经验,创过业,北抖会创始人,哈尔滨工业大学毕业,曾任百度、苏宁AI架构师和AI产品经理,擅长知识类IP孵化和AI创作爆款短视频。运营过2个百万粉丝大号和3个同时在线过千人的直播间,创作过单条超一千万播放量和多条过百万播放量的爆款短视频,研发课程《AI制作爆款短视频》,抖音账号:野哥玩AI。"},
|
||||||
|
{"name": "宋老师", "title": "高级讲师", "info": "毕业于中国矿业大学新闻传播学,8年文旅媒体行业从业经验。从传统电视媒体转型新媒体短视频行业,深耕短视频及直播运营,擅长社交媒体平台机制及玩法,主导从0-1短视频矩阵及直播商业化变现。擅长以短视频及社群赋能上市旅企高质量发展,媒体营销实战经验丰富,操盘10+上市旅企的新媒体及社群运营工作,包括八达岭长城、天山天池、峨眉山、国际大巴扎、少林寺等5A、4A世界级旅游度假型景区。"},
|
||||||
|
{"name": "张老师", "title": "高级讲师", "info": "中国开放原子开源基金会银牌讲师,广东省人力资源与社会保障厅师资培训基地人工智能、区块链技术专家讲师。广东省职业教育“双师型”名师工作室成员,厦门大学大数据实验室百家讲坛特邀讲师。多本畅销软件开发教材的编写人和审稿人,国家十三五教材审稿人,在教学方面有丰富的经验。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "李老师", "title": "高级讲师", "info": "开放原子开源基金会银牌讲师。具有多年常见指令集架构下的单片机外设、嵌入式操作系统下的开发经验。擅长机器视觉、深度学习结合各类传感器在智能机器人领域的应用。多年的教学经验,在基础理论和高等数学等方向的教学有深入的研究。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "肖老师", "title": "高级讲师", "info": "开放原子开源基金会银牌讲师,毕业于深圳大学,10年的软件开发,机器学习和人工智能算法研发经验。精通C/C++, Python等开发语言, 对智能机器人以及Pytorch有丰富的项目授课经验,对项目全流程开发有丰富的架构经验,对算法工程实践有深入的研究。授课风格风趣幽默, 知识讲解结构层次分明。\t\t\t\t\t\t\t"},
|
||||||
|
{"name": "吴老师", "title": "高级讲师", "info": "传智教育高级讲师,拥有多年智能机器人、物联网行业经验。精通C++、C、Python、Java等多种编程语言,精通ROS机器人操作系统,对机器人开发有深入研究。\t\t\t\t\t\t"},
|
||||||
|
{"name": "肖老师", "title": "高级讲师", "info": "传智教育高级讲师,鸿蒙开发先行者。精通C、C++、Python、Java等多种编程语言,熟悉电子电路设计,拥有多年物联网行业经验,精通ROS机器人操作系统,对机器人开发有一定见解。教学方面能够激发学生的学习兴趣,帮助他们发掘自己的潜能,能够为学生提供专业的技术指导,帮助他们解决实际开发中遇到的问题。\t\t\t\t\t\t"},
|
||||||
|
{"name": "唐老师", "title": "高级讲师", "info": "中国开放原子开源基金会银牌讲师,擅长物联网协议、物联网设备的软硬件开发部署。精于通过编写优质C、C++代码,实现芯片功能。对智能硬件设计开发、机器人运动控制、传感器数据处理、人工智能算法有深入的理解和丰富的经验。\t\t\t\t\t\t"},
|
||||||
|
{"name": "江老师", "title": "高级讲师", "info": "高级讲师,资深开发工程师,10多年研发经验和教学经验。精通C/C++/Python语言编程,对GTK+、Qt图形界面编程有深入研究,精通嵌入式、物联网开发,熟练自动化测试。拥有丰富的授课及培训技巧,讲课幽默生动有趣,深入浅出。"},
|
||||||
|
{"name": "覃老师", "title": "高级讲师", "info": "精通C、C++、Python、Java等多种编程语言,擅长基于ROS下的工业互联网智能化开发,尤其在激光雕刻等工控机方向有较丰富的经验。熟悉物联网开发,多年教学经验,擅长启发学生思考,课堂风格轻松有趣。\t\t\t\t\t"}
|
||||||
|
]
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# Automatically created by: scrapy startproject
|
||||||
|
#
|
||||||
|
# For more information about the [deploy] section see:
|
||||||
|
# https://scrapyd.readthedocs.io/en/latest/deploy.html
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
default = wangyizhaopin.settings
|
||||||
|
|
||||||
|
[deploy]
|
||||||
|
#url = http://localhost:6800/
|
||||||
|
project = wangyizhaopin
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Define here the models for your scraped items
|
||||||
|
#
|
||||||
|
# See documentation in:
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/items.html
|
||||||
|
|
||||||
|
import scrapy
|
||||||
|
|
||||||
|
|
||||||
|
class WangyizhaopinItem(scrapy.Item):
|
||||||
|
# define the fields for your item here like:
|
||||||
|
name = scrapy.Field()
|
||||||
|
postTypeFullName = scrapy.Field()
|
||||||
|
description = scrapy.Field()
|
||||||
|
reqEducationName = scrapy.Field()
|
||||||
|
reqWorkYearsName = scrapy.Field()
|
||||||
|
requirement = scrapy.Field()
|
||||||
|
workPlaceNameList = scrapy.Field()
|
||||||
|
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
# Define here the models for your spider middleware
|
||||||
|
#
|
||||||
|
# See documentation in:
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/spider-middleware.html
|
||||||
|
|
||||||
|
from scrapy import signals
|
||||||
|
|
||||||
|
# useful for handling different item types with a single interface
|
||||||
|
from itemadapter import is_item, ItemAdapter
|
||||||
|
|
||||||
|
|
||||||
|
class WangyizhaopinSpiderMiddleware:
|
||||||
|
# Not all methods need to be defined. If a method is not defined,
|
||||||
|
# scrapy acts as if the spider middleware does not modify the
|
||||||
|
# passed objects.
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_crawler(cls, crawler):
|
||||||
|
# This method is used by Scrapy to create your spiders.
|
||||||
|
s = cls()
|
||||||
|
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
|
||||||
|
return s
|
||||||
|
|
||||||
|
def process_spider_input(self, response, spider):
|
||||||
|
# Called for each response that goes through the spider
|
||||||
|
# middleware and into the spider.
|
||||||
|
|
||||||
|
# Should return None or raise an exception.
|
||||||
|
return None
|
||||||
|
|
||||||
|
def process_spider_output(self, response, result, spider):
|
||||||
|
# Called with the results returned from the Spider, after
|
||||||
|
# it has processed the response.
|
||||||
|
|
||||||
|
# Must return an iterable of Request, or item objects.
|
||||||
|
for i in result:
|
||||||
|
yield i
|
||||||
|
|
||||||
|
def process_spider_exception(self, response, exception, spider):
|
||||||
|
# Called when a spider or process_spider_input() method
|
||||||
|
# (from other spider middleware) raises an exception.
|
||||||
|
|
||||||
|
# Should return either None or an iterable of Request or item objects.
|
||||||
|
pass
|
||||||
|
|
||||||
|
def process_start_requests(self, start_requests, spider):
|
||||||
|
# Called with the start requests of the spider, and works
|
||||||
|
# similarly to the process_spider_output() method, except
|
||||||
|
# that it doesn’t have a response associated.
|
||||||
|
|
||||||
|
# Must return only requests (not items).
|
||||||
|
for r in start_requests:
|
||||||
|
yield r
|
||||||
|
|
||||||
|
def spider_opened(self, spider):
|
||||||
|
spider.logger.info("Spider opened: %s" % spider.name)
|
||||||
|
|
||||||
|
|
||||||
|
class WangyizhaopinDownloaderMiddleware:
|
||||||
|
# Not all methods need to be defined. If a method is not defined,
|
||||||
|
# scrapy acts as if the downloader middleware does not modify the
|
||||||
|
# passed objects.
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_crawler(cls, crawler):
|
||||||
|
# This method is used by Scrapy to create your spiders.
|
||||||
|
s = cls()
|
||||||
|
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
|
||||||
|
return s
|
||||||
|
|
||||||
|
def process_request(self, request, spider):
|
||||||
|
# Called for each request that goes through the downloader
|
||||||
|
# middleware.
|
||||||
|
|
||||||
|
# Must either:
|
||||||
|
# - return None: continue processing this request
|
||||||
|
# - or return a Response object
|
||||||
|
# - or return a Request object
|
||||||
|
# - or raise IgnoreRequest: process_exception() methods of
|
||||||
|
# installed downloader middleware will be called
|
||||||
|
return None
|
||||||
|
|
||||||
|
def process_response(self, request, response, spider):
|
||||||
|
# Called with the response returned from the downloader.
|
||||||
|
|
||||||
|
# Must either;
|
||||||
|
# - return a Response object
|
||||||
|
# - return a Request object
|
||||||
|
# - or raise IgnoreRequest
|
||||||
|
return response
|
||||||
|
|
||||||
|
def process_exception(self, request, exception, spider):
|
||||||
|
# Called when a download handler or a process_request()
|
||||||
|
# (from other downloader middleware) raises an exception.
|
||||||
|
|
||||||
|
# Must either:
|
||||||
|
# - return None: continue processing this exception
|
||||||
|
# - return a Response object: stops process_exception() chain
|
||||||
|
# - return a Request object: stops process_exception() chain
|
||||||
|
pass
|
||||||
|
|
||||||
|
def spider_opened(self, spider):
|
||||||
|
spider.logger.info("Spider opened: %s" % spider.name)
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
# Define your item pipelines here
|
||||||
|
#
|
||||||
|
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
|
||||||
|
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
|
||||||
|
|
||||||
|
|
||||||
|
# useful for handling different item types with a single interface
|
||||||
|
from itemadapter import ItemAdapter
|
||||||
|
|
||||||
|
|
||||||
|
class WangyizhaopinPipeline:
|
||||||
|
def open_spider(self, spider):
|
||||||
|
if spider.name == "wyzp":
|
||||||
|
print("数据爬取开始")
|
||||||
|
self.f = open("wyzp.csv", mode="a", encoding="utf-8")
|
||||||
|
|
||||||
|
def close_spider(self, spider):
|
||||||
|
if spider.name == "wyzp":
|
||||||
|
print("数据爬取结束")
|
||||||
|
if self.f:
|
||||||
|
self.f.close()
|
||||||
|
|
||||||
|
def process_item(self, item, spider):
|
||||||
|
if spider.name == "wyzp":
|
||||||
|
# csv写入
|
||||||
|
self.f.write(f"{item['name']}\n")
|
||||||
|
return item
|
||||||
|
|
||||||
|
|
||||||
|
class WangyizhaopinPipeline1:
|
||||||
|
def open_spider(self, spider):
|
||||||
|
if spider.name == "wyzp1":
|
||||||
|
print("数据爬取开始")
|
||||||
|
self.f = open("wyzp1.csv", mode="a", encoding="utf-8")
|
||||||
|
|
||||||
|
def close_spider(self, spider):
|
||||||
|
if spider.name == "wyzp1":
|
||||||
|
print("数据爬取结束")
|
||||||
|
if self.f:
|
||||||
|
self.f.close()
|
||||||
|
|
||||||
|
def process_item(self, item, spider):
|
||||||
|
if spider.name == "wyzp1":
|
||||||
|
# csv写入
|
||||||
|
self.f.write(f"{item['name']}\n")
|
||||||
|
return item
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
# Scrapy settings for wangyizhaopin project
|
||||||
|
#
|
||||||
|
# For simplicity, this file contains only settings considered important or
|
||||||
|
# commonly used. You can find more settings consulting the documentation:
|
||||||
|
#
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/settings.html
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
|
||||||
|
# https://docs.scrapy.org/en/latest/topics/spider-middleware.html
|
||||||
|
|
||||||
|
BOT_NAME = "wangyizhaopin"
|
||||||
|
|
||||||
|
SPIDER_MODULES = ["wangyizhaopin.spiders"]
|
||||||
|
NEWSPIDER_MODULE = "wangyizhaopin.spiders"
|
||||||
|
LOG_LEVEL = "WARNING"
|
||||||
|
|
||||||
|
|
||||||
|
# Crawl responsibly by identifying yourself (and your website) on the user-agent
|
||||||
|
#USER_AGENT = "wangyizhaopin (+http://www.yourdomain.com)"
|
||||||
|
|
||||||
|
# Obey robots.txt rules
|
||||||
|
ROBOTSTXT_OBEY = True
|
||||||
|
|
||||||
|
# Configure maximum concurrent requests performed by Scrapy (default: 16)
|
||||||
|
#CONCURRENT_REQUESTS = 32
|
||||||
|
|
||||||
|
# Configure a delay for requests for the same website (default: 0)
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
|
||||||
|
# See also autothrottle settings and docs
|
||||||
|
#DOWNLOAD_DELAY = 3
|
||||||
|
# The download delay setting will honor only one of:
|
||||||
|
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
|
||||||
|
#CONCURRENT_REQUESTS_PER_IP = 16
|
||||||
|
|
||||||
|
# Disable cookies (enabled by default)
|
||||||
|
#COOKIES_ENABLED = False
|
||||||
|
|
||||||
|
# Disable Telnet Console (enabled by default)
|
||||||
|
#TELNETCONSOLE_ENABLED = False
|
||||||
|
|
||||||
|
# Override the default request headers:
|
||||||
|
#DEFAULT_REQUEST_HEADERS = {
|
||||||
|
# "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
||||||
|
# "Accept-Language": "en",
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable or disable spider middlewares
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
|
||||||
|
#SPIDER_MIDDLEWARES = {
|
||||||
|
# "wangyizhaopin.middlewares.WangyizhaopinSpiderMiddleware": 543,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable or disable downloader middlewares
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
|
||||||
|
#DOWNLOADER_MIDDLEWARES = {
|
||||||
|
# "wangyizhaopin.middlewares.WangyizhaopinDownloaderMiddleware": 543,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Enable or disable extensions
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/extensions.html
|
||||||
|
#EXTENSIONS = {
|
||||||
|
# "scrapy.extensions.telnet.TelnetConsole": None,
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Configure item pipelines
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
|
||||||
|
ITEM_PIPELINES = {
|
||||||
|
"wangyizhaopin.pipelines.WangyizhaopinPipeline": 300,
|
||||||
|
"wangyizhaopin.pipelines.WangyizhaopinPipeline1": 301,
|
||||||
|
}
|
||||||
|
|
||||||
|
# Enable and configure the AutoThrottle extension (disabled by default)
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
|
||||||
|
#AUTOTHROTTLE_ENABLED = True
|
||||||
|
# The initial download delay
|
||||||
|
#AUTOTHROTTLE_START_DELAY = 5
|
||||||
|
# The maximum download delay to be set in case of high latencies
|
||||||
|
#AUTOTHROTTLE_MAX_DELAY = 60
|
||||||
|
# The average number of requests Scrapy should be sending in parallel to
|
||||||
|
# each remote server
|
||||||
|
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
|
||||||
|
# Enable showing throttling stats for every response received:
|
||||||
|
#AUTOTHROTTLE_DEBUG = False
|
||||||
|
|
||||||
|
# Enable and configure HTTP caching (disabled by default)
|
||||||
|
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
|
||||||
|
#HTTPCACHE_ENABLED = True
|
||||||
|
#HTTPCACHE_EXPIRATION_SECS = 0
|
||||||
|
#HTTPCACHE_DIR = "httpcache"
|
||||||
|
#HTTPCACHE_IGNORE_HTTP_CODES = []
|
||||||
|
#HTTPCACHE_STORAGE = "scrapy.extensions.httpcache.FilesystemCacheStorage"
|
||||||
|
|
||||||
|
# Set settings whose default value is deprecated to a future-proof value
|
||||||
|
REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7"
|
||||||
|
TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
|
||||||
|
FEED_EXPORT_ENCODING = "utf-8"
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# This package will contain the spiders of your Scrapy project
|
||||||
|
#
|
||||||
|
# Please refer to the documentation for information on how to create and manage
|
||||||
|
# your spiders.
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# import requests
|
||||||
|
#
|
||||||
|
# url = "https://hr.163.com/api/hr163/position/queryPage"
|
||||||
|
#
|
||||||
|
# a = requests.get(url)
|
||||||
|
# print(a.text)
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
import scrapy
|
||||||
|
from scrapy.linkextractors import LinkExtractor
|
||||||
|
from scrapy.spiders import CrawlSpider, Rule
|
||||||
|
|
||||||
|
#无法传参,只能应用于数据在一个页面里传参
|
||||||
|
class TencentCrawlSpider(CrawlSpider):
|
||||||
|
name = "tencent_crawl"
|
||||||
|
allowed_domains = ["tencent.com"]
|
||||||
|
start_urls = ["https://careers.tencent.com/search.html?pcid=40001 "]
|
||||||
|
|
||||||
|
#链接提取规则
|
||||||
|
rules = (
|
||||||
|
#使用Rule类生成连接提取规则对象
|
||||||
|
# LinkExtracto 用于设置连接提取规则,一般永allow,接受正则表达式
|
||||||
|
# follow参数决定是否在提取后的响应中继续提取链接
|
||||||
|
|
||||||
|
# 设置详情页面链接提取规则
|
||||||
|
Rule(LinkExtractor(allow=r"https://careers.tencent.com/jobdesc.html?postId=\d+"), callback="parse_item"),)
|
||||||
|
# Rule(LinkExtractor(allow=r"https://careers.tencent.com/jobdesc.html?postId=\?"), callback="parse_item", follow=True),)
|
||||||
|
|
||||||
|
def parse_item(self, response):
|
||||||
|
item = {}
|
||||||
|
print(response.url)
|
||||||
|
# item["domain_id"] = response.xpath('//input[@id="sid"]/@value').get()
|
||||||
|
# item["name"] = response.xpath('//div[@id="name"]').get()
|
||||||
|
# item["description"] = response.xpath('//div[@id="description"]').get()
|
||||||
|
return item
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
import scrapy
|
||||||
|
import json
|
||||||
|
from wangyizhaopin.items import WangyizhaopinItem
|
||||||
|
|
||||||
|
#该项目无法翻页,需要scrapy结合selenium等模拟点击
|
||||||
|
|
||||||
|
class WyzpSpider(scrapy.Spider):
|
||||||
|
name = "wyzp"
|
||||||
|
allowed_domains = ["hr.163.com"]
|
||||||
|
start_urls = ["https://hr.163.com/job-list.html"]
|
||||||
|
|
||||||
|
def start_requests(self):
|
||||||
|
|
||||||
|
|
||||||
|
post_body = {"currentPage": 1, "pageSize": 10}
|
||||||
|
url = "https://hr.163.com/api/hr163/position/queryPage"
|
||||||
|
|
||||||
|
yield scrapy.Request(
|
||||||
|
url=url,
|
||||||
|
callback=self.parse_detail,
|
||||||
|
body=json.dumps(post_body),
|
||||||
|
method='POST',
|
||||||
|
headers={'Content-Type': 'application/json;charset=UTF-8'}
|
||||||
|
)
|
||||||
|
|
||||||
|
# yield scrapy.Request(
|
||||||
|
# url=self.start_urls[0],
|
||||||
|
# callback=self.parse,
|
||||||
|
# headers={'Content-Type': 'application/json;charset=UTF-8'}
|
||||||
|
# )
|
||||||
|
# def parse(self, response, **kwargs):
|
||||||
|
# part_url = response.xpath('//li[@class=" ant-pagination-next"]').extract_first()
|
||||||
|
# print(part_url)
|
||||||
|
# print(response.json)
|
||||||
|
#
|
||||||
|
# if part_url != response.xpath('//li[@class="ant-pagination-disabled ant-pagination-next"]').extract_first():
|
||||||
|
# pass
|
||||||
|
|
||||||
|
def parse_detail(self, response):
|
||||||
|
# 打印整个响应对象
|
||||||
|
# print(response.json())
|
||||||
|
# 解析JSON响应
|
||||||
|
data = response.json()
|
||||||
|
# print(1)
|
||||||
|
# 提取您需要的数据
|
||||||
|
for item in data['data']['list']:
|
||||||
|
info = WangyizhaopinItem()
|
||||||
|
info["name"] = item.get('name')
|
||||||
|
info["postTypeFullName"] = item.get('postTypeFullName')
|
||||||
|
info["description"] = item.get('description')
|
||||||
|
info["reqEducationName"] = item.get('reqEducationName')
|
||||||
|
info["reqWorkYearsName"] = item.get('reqWorkYearsName')
|
||||||
|
info["requirement"] = item.get('requirement')
|
||||||
|
info["workPlaceNameList"] = item.get('workPlaceNameList')
|
||||||
|
yield info
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
import scrapy
|
||||||
|
import json
|
||||||
|
from wangyizhaopin.items import WangyizhaopinItem
|
||||||
|
|
||||||
|
#该项目无法翻页,需要scrapy结合selenium等模拟点击
|
||||||
|
|
||||||
|
class WyzpSpider(scrapy.Spider):
|
||||||
|
name = "wyzp1"
|
||||||
|
allowed_domains = ["hr.163.com"]
|
||||||
|
start_urls = ["https://hr.163.com/job-list.html"]
|
||||||
|
|
||||||
|
def start_requests(self):
|
||||||
|
|
||||||
|
|
||||||
|
post_body = {"currentPage": 1, "pageSize": 10}
|
||||||
|
url = "https://hr.163.com/api/hr163/position/queryPage"
|
||||||
|
|
||||||
|
yield scrapy.Request(
|
||||||
|
url=url,
|
||||||
|
callback=self.parse_detail,
|
||||||
|
body=json.dumps(post_body),
|
||||||
|
method='POST',
|
||||||
|
headers={'Content-Type': 'application/json;charset=UTF-8'}
|
||||||
|
)
|
||||||
|
|
||||||
|
# yield scrapy.Request(
|
||||||
|
# url=self.start_urls[0],
|
||||||
|
# callback=self.parse,
|
||||||
|
# headers={'Content-Type': 'application/json;charset=UTF-8'}
|
||||||
|
# )
|
||||||
|
# def parse(self, response, **kwargs):
|
||||||
|
# part_url = response.xpath('//li[@class=" ant-pagination-next"]').extract_first()
|
||||||
|
# print(part_url)
|
||||||
|
# print(response.json)
|
||||||
|
#
|
||||||
|
# if part_url != response.xpath('//li[@class="ant-pagination-disabled ant-pagination-next"]').extract_first():
|
||||||
|
# pass
|
||||||
|
|
||||||
|
def parse_detail(self, response):
|
||||||
|
# 打印整个响应对象
|
||||||
|
# print(response.json())
|
||||||
|
# 解析JSON响应
|
||||||
|
data = response.json()
|
||||||
|
|
||||||
|
# 提取您需要的数据
|
||||||
|
for item in data['data']['list']:
|
||||||
|
info = WangyizhaopinItem()
|
||||||
|
info["name"] = item.get('name')
|
||||||
|
info["postTypeFullName"] = item.get('postTypeFullName')
|
||||||
|
info["description"] = item.get('description')
|
||||||
|
info["reqEducationName"] = item.get('reqEducationName')
|
||||||
|
info["reqWorkYearsName"] = item.get('reqWorkYearsName')
|
||||||
|
info["requirement"] = item.get('requirement')
|
||||||
|
info["workPlaceNameList"] = item.get('workPlaceNameList')
|
||||||
|
yield info
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
内容运营实习生(AI音乐)
|
||||||
|
高级游戏测试工程师(仙侠单机)
|
||||||
|
算法实习生(搜索LLM和多模态技术)
|
||||||
|
资深VFX特效设计师(界面)-第五人格
|
||||||
|
资深UI视觉设计师-七日世界
|
||||||
|
资深动画设计师-风格化在研
|
||||||
|
资深概念设计师(场景)(天下)
|
||||||
|
资深UI视觉设计师-卡通风格
|
||||||
|
概念设计专家(角色)-萤火突击
|
||||||
|
资深级UI 视觉设计师(萤火突击)
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user