编程杂谈

案例效果涉及的重要知识当前标签的索引获取index()HTML代码<divclass="wrapper"><ulid="left"><li><ahref="#">女靴</a></li><li><ahref="#">雪地靴</a></li><li><ahref="#">冬裙</a></li><li><ahref="#">呢大衣</a></li><li><ahref="#">毛衣</a></li><li><ahref="#">棉服</a></li><li><ahref="#">女裤</a></li><li><ahref="#">羽绒服</a></li><li><ahref="#">牛仔裤</a></li></ul><ulid="center"><li><ahref="#"><imgsrc="img/女靴.jpg"/></a></li><li><ahref="#"><imgsrc="img/雪地靴.jpg"/></a></li><li><ahref="#"><imgsrc="img/冬裙.jpg"/></a></li><li><ahref="#"><imgsrc="img/呢大衣.jpg"/></a></li><li><ahref="#"><imgsrc="img/毛衣.jpg"/></a></li><li><ahref="#"><imgsrc="img/棉服.jpg"/></a></li><li><ahref="#"><imgsrc="img/女裤.jpg"></a></li><li><ahref="#"><imgsrc="img/羽绒服.jpg"/></a></li><li><ahref="#"><imgsrc="img/牛仔裤.jpg"/></a></li><li><ahref="#"><imgsrc="img/女包.jpg"/></a></li><li><ahref="#"><imgsrc="img/男包.jpg"/></a></li><li><ahref="#"><imgsrc="img/登山鞋.jpg"/></a></li><li><ahref="#"><imgsrc="img/皮带.jpg"/></a></li><li><ahref="#"><imgsrc="img/围巾.jpg"/></a></li><li><ahref="#"><imgsrc="img/皮衣.jpg"/></a></li><li><ahref="#"><imgsrc="img/男毛衣.jpg"/></a></li><li><ahref="#"><imgsrc="img/男棉服.jpg"/></a></li><li><ahref="#"><imgsrc="img/男靴.jpg"/></a></li></ul><ulid="right"><li><ahref="#">女包</a></li><li><ahref="#">男包</a></li><li><ahref="#">登山鞋</a></li><li><ahref="#">皮带</a></li><li><ahref="#">围巾</a></li><li><ahref="#">皮衣</a></li><li><ahref="#">男毛衣</a></li><li><ahref="#">男棉服</a></li><li><ahref="#">男靴</a></li></ul></div>CSS代码*{margin:0;padding:0;font-size:12px;}ul{list-style:none;}a{text-decoration:none;}.wrapper{width:298px;height:248px;margin:100pxauto0;border:1pxsolidpink;overflow:hidden;}#left,#center,#right{float:left;}#leftli,#rightli{background:url(../img/lili.jpg)repeat-x;}#leftlia,#rightlia{display:block;width:48px;height:27px;border-bottom:1pxsolidpink;line-height:27px;text-align:center;color:black;}#leftlia:hover,#rightlia:hover{color:#fff;background-image:url(../img/abg.gif);}#center{border-left:1pxsolidpink;border-right:1pxsolidpink;}img{width:200px;height:250px;}JS代码$(function(){//绑定左边的li标签鼠标属性$('#leftli').mouseover(function(){//获取当前li标签索引varindex=$(this).index();//展示相应索引图片$('#centerli').eq(index).show();//隐藏其他图片$('#centerli').eq(index).siblings('li').hide()//链式写法$('#centerli').eq(index).show().siblings('li').hide();});//绑定右边的li标签鼠标属性$('#rightli').mouseover(function(){//获取鼠标当前索引9是左边的图片是9开始的varindex=$(this).index()+9;//展示相应索引图片$('#centerli').eq(index).show();//隐藏其他索引图片$('#centerli').eq(index).siblings('li').hide()//链式写法$('#centerli').eq(index).show().siblings('li').hide();})})案例图片下载:淘宝服饰案例

编程杂谈

效果CSS代码*{padding:0;margin:0;}ul{list-style-type:none;margin:100px;}.menu-head{width:185px;height:47px;line-height:47px;padding-left:38px;font-size:17px;color:#475052;cursor:pointer;border:1pxsolid#e1e1e1;position:relative;margin:0px;font-weight:bold;background:#f1f1f1centerrightno-repeat;}.menu-list.current{background:#f1f1f1centerrightno-repeat;}.menu-body{width:223px;height:auto;overflow:hidden;line-height:38px;border-left:1pxsolid#e1e1e1;backguound:#fff;border-right:1pxsolid#e1e1e1;display:none;}.menu-bodya{display:block;width:223px;height:38px;line-height:38px;padding-left:38px;color:#777;background:#fff;text-decoration:none;border-bottom:1pxsolid#e1e1e1;}HTML代码<body><ulclass="menu-list"><li><pclass="menu-head">目标管理</p><divclass="menu-body"><ahref="#">主题空间</a><ahref="#">项目任务</a><ahref="#">工作计划</a><ahref="#">日程事件</a><ahref="#">时间视图</a></div></li><li><pclass="menu-head">会议管理</p><divclass="menu-body"><ahref="#">主题空间</a><ahref="#">会议安排</a><ahref="#">待开会议</a><ahref="#">已开会议</a><ahref="#">会议资源</a></div></li><li><pclass="menu-head">知识社区</p><divclass="menu-body"><ahref="#">我的收藏</a><ahref="#">知识广场</a><ahref="#">文档中心</a><ahref="#">我的博客</a><ahref="#">文档库管理</a></div></li></ul></body>JS代码第一代$(function(){//鼠标经过$('.menu-head').mouseover(function(){//$(this)JQuery当前元素//查找当前元素的,同级元素$(this).siblings('.menu-body').show()})//鼠标离开$('.menu-head').mouseout(function(){//$(this)JQuery当前元素$(this).siblings('.menu-body').hide()})})JS代码第二代利用hover()函数,合并鼠标的经过与离开的事件hover([over,]out)参数:over:鼠标移到元素上要触发的函数out:鼠标移出元素要触发的函数//组合写法$('.menu-head').hover(//鼠标经过function(){$(this).siblings('.menu-body').slideDown()},//鼠标离开function(){$(this).siblings('.menu-body').slideUp()});JS代码第三代利用hover()函数,合并鼠标的经过与离开的事件hover([over,]out)只写一个参数,代表无论鼠标经过还是鼠标退出,都要执行这个函数//组合写法$('.menu-head').hover(//鼠标事件,切换滑动function(){$(this).siblings('.menu-body').slideToggle()})

编程杂谈

数组遍历方法:forEach()原生JS方法原生的JSforEach()不能遍历伪数组vara=[11,12,13,14,15,16];//遍历数组,但不能遍历伪数组,一个回调函数a.forEach(function(value,index){console.log(value,index);});数组遍历方法:each()JQuery静态方法JQueryeach()静态方法,可以遍历数组,也可以遍历伪数组//伪数组就是一个对象varb={'a':1,'b':2,'c':3,'d':4,length:4};//使用JQuery的each静态方法遍历伪数组$.each(b,function(index,value){console.log(index,value);})数组遍历方法:map()原生JS方法与foeEach()函数一样,不能遍历伪数组map(function(值,索引,该数组){})vara=[11,12,13,14,15,16];a.map(function(value,index,array){console.log(value,index,array);});数组遍历方法:map()JQuery静态方法JQuerymap()静态方法,可以遍历数组,也可以遍历伪数组varb={1:1,2:2,3:3,4:4,length:4};res=$.map(b,function(value,index){returnvalue+index});console.log(res)map()函数的作用是:遍历数组,然后对数组的值进行操作,返回一个新的数组trim()作用:去除字符串前后的空格参数:需要去除的字符串返回值:去除后的字符串vara='aaa';console.log("---"+a+"---");varres=$.trim(a);console.log(res)isWindow()作用:判断传入的参数是否是Window是否是Window对象参数:需要判断的对象返回值:true/false//真数组vararr=[1,2,3,4,5,6];//伪数组vararrlike={0:1,1:3,2:5,3:6,4:7,length:5};//对象varobj={"name":"aaa","age":5};//函数varfn=function(){};//window对象varw=window;varres=$.isWindow(w);console.log(res);isArray()作用:判断传入的参数是否是真数组参数:需要判断的对象返回值:true/false//真数组vararr=[1,2,3,4,5,6];//伪数组vararrlike={0:1,1:3,2:5,3:6,4:7,length:5};//对象varobj={"name":"aaa","age":5};//函数varfn=function(){};//window对象varw=window;varres=$.isArray(w);console.log(res);isFunction()作用:判断传入的参数是否是函数参数:需要判断的对象返回值:true/falsevarres=$.isFunction($);console.log(res);//-->true说明JQuery本质上是一个函数

编程杂谈

jQuery基础选择器名称用法描述ID选择器$("#id")获取指定ID的元素类选择器$(".class")获取同一类的class的元素标签选择器$("div")获取同一类标签的所有元素全选选择器$("*")匹配所有元素并集选择器$("div,p,li")选取多个元素交集选择器$("li.current")交集元素jQuery层级选择器名称用法描述子代选择器$("ul>li");使用>查找下一级标签,不会获取孙子层元素后代选择器$("ulli");使用空格,代表获取ul下的所有li元素,包括孙子等jQuery筛选选择器语法用法描述:first$("li:first")选择第一个li标签:last$("li:last")选择最后一个li标签:eq(index)$("li:eq(0)")选择索引为0的li标签:odd$("li:odd")选择索引为奇数的li标签:even$("div,p,li")选择索引为偶数的li标签jQuery筛选方法selector代表选择器的意思语法用法描述parent()$("li").parent()查找父级元素children(selector)$("ul").children("li")相当于$("ul>li"),最近的一级find()$("ul").find("li")相当于后代选择器$("ulli")siblings(selector)$(".first").siblings("li")查找同级的li标签nextAll([expr])$("div").nextAll()查找当前元素之后的所有同级元素prevAll([expr])$("div").prevtAll([expr])查找当前元素之前的所有同级元素hasClass(class)$("divi").hasClass('pro')检查某个标签是否包含某个特定的class,有返回trueeq(index)$("div").eq(0)相当于$("div:eq(0)")标签过滤器小例子//查找div下的第一个li,设置为pink色$("divli:first").css("color","pink");//查找同级的所有标签$("span").siblings()//查找同级的所有标签$("span").siblings()

编程杂谈

登录数据库Mysql为了安全,默认不允许远程用户root登录mysql-p[]-u[]-p[]mysql-hlocalhost-uroot-p参数作用-h主机地址:-p127.0.0.1:3306-u用户名:-uroot-p密码:-p密码查看数据库showdatabases;进入数据库use[数据库名];查看数据库的全部表第一种方法:首先要进入数据库:use[数据库名];然后查看表:showtables;第二种方法:直接查看showtablesfrom[数据库名];查看当前操作的数据库selectdatabase();mysql>selectdatabase();+------------+|database()|+------------+|news|+------------+1rowinset(0.00sec)创建数据库createdatabase[数据库名];删除数据库dropdatabaes[数据库名];退出Mysqlexitmysql>exitByeC:\Users\ASUS>打开数据库登录MySQL后,需要对数据库进行操作,例如查询、创建表等。需要先用use命令打开相应数据库,才能对该数据库进行后续操作。use[数据库名];mysql>usenews;Databasechangedmysql>创建数据库表打开相应数据库后,才能进行这项操作,最后一个字段不写逗号createtable[表名]([字段名1][类型1][类型2],[字段名2][类型1][类型2],....);createtablestudent(idint(4)primarykeyauto_increment,namechar(20)notnull,sexint(4)notnulldefault'0'#不写逗号);删除数据库表droptables[表名];droptablesstudent;查看MySQL的版本第一种方法:mysql>selectversion();+------------+|version()|+------------+|5.6.43-log|+------------+1rowinset(0.01sec)第二种方法:在CMD执行:mysql--version或者mysql-VC:\Users\ASUS>mysql--versionmysqlVer14.14Distrib5.6.43,forWin64(x86_64)

2019-11-21 104 1
编程杂谈

0x00创建爬虫工程进入要创建爬虫的文件下,执行下面命令scrapystartprojectbigdataboy0x01创建爬虫项目进入爬虫工程目录,执行命令,创建第一个爬虫scrapygenspiderbigdataboy_spiderbigdataboy.cn0x02设置爬虫打开settings.py文件,取消下面代码的注释#开启pipelines功能#Configureitempipelines#Seehttps://docs.scrapy.org/en/latest/topics/item-pipeline.htmlITEM_PIPELINES={'bigdataboy.pipelines.BigdataboyPipeline':300,}#添加'User-Agent'#Crawlresponsiblybyidentifyingyourself(andyourwebsite)ontheuser-agentUSER_AGENT=''}0x03编写网页的解析打开bigdataboy_spider.py文件有一个defparse(self,response):函数:这个函数的response是Scrapy框架爬取网页的相应返回值,它是一个scrapy.http.response.html.HtmlResponse对象,所以可以使用xpath,css…提取数据#导入item模型frombigdataboy.itemsimportBigdataboyItemdefparse(self,response):#使用xpath解析网页articleUrl=response.xpath('//div[@class="item-desc"]/a/@href').extract()item=BigdataboyItem(url=articleUrl)#使用定义的item定义的传输参数进行传递yielditem#获取下一页的连接nextUrl=response.xpath('//*[@id="pagenavi"]/div/ol//*[@class="next"]/a/@href').get()#print(nextUrl)ifnextUrl:#传入连接,然后执行的函数yieldscrapy.Request(nextUrl)else:return0x04定义item模型打开items.py文件classBigdataboyItem(scrapy.Item):#definethefieldsforyouritemherelike:#name=scrapy.Field()url=scrapy.Field()#自定义的模型0x05导出数据打开pipeline.py文件fromscrapy.exportersimportJsonItemExporterclassBigdataboyPipeline(object):def__init__(self):self.openFile=open("url.json","wb")#需要使用二进制打开文件,因为在导出过程中是使用的[字节]方式#传入文件打开对象self.exporter=JsonItemExporter(self.openFile)#准备导出self.exporter.start_exporting()#爬虫开始执行调用这个函数defopen_spider(self,spider):print("爬虫开始执行")defprocess_item(self,item,spider):#导出数据self.exporter.export_item(item)returnitem#爬虫执行结束调用这个函数defclose_spider(self,spider):#完成导出self.exporter.finish_exporting()#关闭文件打开self.openFile.close()print("爬虫执行完成")0x06运行爬虫执行命令在Pycharm的Terminal里执行scrapycrawlbigdataboy_spider查看运行结果

编程杂谈

项目背景我们可以通过爬虫来模拟登录来查询自己的成绩,这其中最重要的就是登录这个关卡,只要通过了,就可以方便的查询自己的成绩了。但是我们还是要在法律的允许条件下爬取数据,下列的代码已进行隐私处理,并不针对任何组织。爬虫分析通过抓包,发现登录需要提交学号、密码、验证码、VIEWSTATE通过分析发现其中的VIEWSTATE参数就在网页中,所以我们可以通过正则表达式匹配出来爬虫项目结构importreimportrequestsclassAPI(object):...classTool(object):...API类·通过抓包,知道了以下接口classAPI(object):#登录页GET_INDEX="http://XXXXXXXX:XXXX/"#获取验证码GET_YZM_URL='http://XXXXXXXX:XXXX/CheckCode.aspx'#登录POST_LOGIN='http://XXXXXXXX:XXXX/default2.aspx'Tool类classTool(object):session=requests.session()VIEWSTATE=""#获取VIEWSTATE参数@classmethoddefgetHtml(cls):response=cls.session.get(API.GET_INDEX).textcls.VIEWSTATE=re.search(r'__VIEWSTATE"value="(.*?)"/>',response).group(1)#下载验证码在当前路径@classmethoddefdownload_yzm(cls):yzm_image=cls.session.get(url=API.GET_YZM_URL)withopen("yzm.jpg",'wb')asfile:file.write(yzm_image.content)#登录方法@classmethoddeflogin(cls,account,pwd,yzm):data={"__VIEWSTATE":cls.VIEWSTATE,"TextBox1":account,"TextBox2":pwd,"TextBox3":yzm,"RadioButtonList1":"%D1%A7%C9%FA","Button1":"",}response=cls.session.post(url=API.POST_LOGIN,data=data)response.encoding=response.apparent_encodingresponse=response.texttry:message=re.search(r">alert\('(.*?)'\);</script>",response).group(1)except:#登录成功跳转到详情页xm=re.search(r'<spanid="xhxm">(.*?)同学</span>',response).group(1)print("欢迎"+xm+"登录成功")else:#打印出登录失败信息print(message)主函数defmain():t=Tool()#实例化类t.getHtml()#获取VIEWSTATEt.download_yzm()#下载验证码account=input("请输入你的学号:")pwd=input("请输入你的密码:")yzm=input("请输入验证码:")t.login(account,pwd,yzm)#运行登录方法

编程杂谈

案例背景电脑通常是支持USB设备的功能,通过USB可以连接鼠标、键盘等,还能进行鼠标的点击,键盘的输入等鼠标的特有操作案例分析进行操作的主类,电脑类,实现电脑使用USB鼠标,USB键盘USB接口类:包含打开设备和关闭设备功能电脑类:包含开机、关机和使用USB设备的功能鼠标:实现USB接口,并有点击的功能键盘:实现USB接口,必有输入的方法案例实现定义USB接口类:publicinterfaceUSB{//开启设备publicabstractvoidopen();//关闭接口publicabstractvoidclose();}定义电脑类:publicclassComputer{//开启电脑方法publicvoidon(){System.out.println("开启电脑");}//关闭电脑方法publicvoidoff(){System.out.println("关闭电脑");}//使用设备publicvoiduseDevice(USBuse){use.open();//USB设备的开启//USB设备特有方法的使用if(useinstanceofMouse){//判断Mouse的父类是不是USBMouseuseMouse=(Mouse)use;//向下转型useMouse.click();}elseif(useinstanceofKeyboard){((Keyboard)use).input();//向下转型}use.close();//USB设备的关闭};}鼠标类:publicclassMouseimplementsUSB{@Overridepublicvoidopen(){System.out.println("打开鼠标");}@Overridepublicvoidclose(){System.out.println("关闭鼠标");}//鼠标的特有操作publicvoidclick(){System.out.println("鼠标点击了");}}键盘类:publicclassKeyboardimplementsUSB{//打开键盘@Overridepublicvoidopen(){System.out.println("键盘打开");}@Overridepublicvoidclose(){System.out.println("键盘关闭");}//键盘的特有操作publicvoidinput(){System.out.println("正在输入中......");}}操作的主类:publicclassMainDemo{publicstaticvoidmain(String[]args){//实例化电脑类Computercomputer=newComputer();computer.on();//电脑开机//USB鼠标的操作USBmouse=newMouse();//多态的写法computer.useDevice(mouse);//USB键盘的操作Keyboardkeyboard=newKeyboard();//不是多态写法USBusbKeyboard=keyboard;//向上转型为USB类computer.useDevice(usbKeyboard);computer.off();//电脑关机}}