之前想爬取一些淘宝的数据,后来发现需要登录,找了很多的资料,有个使用request的sessions加上cookie来登录的,cookie的获取在登录后使用开发者工具可以找到。不过这个登录后获得的网页的代码是静态的,获取动态网页还得另寻他法,一般需要的数据可以在网页的源码中得到,但是你知道的,有些动态加载的就不是那么简单了,而且我发现这样获得的源码中,有些想要获取的数据的格式是经过改动的,比如我要某个商品的具体链接,发现并不能直接使用。总体而言,这是一次失
系统 2019-09-27 17:54:47 1828
今天在网上找了半天,发现很多关于此题目的程序都只能接收数据,所以随便找了个程序研究了一下,然后做出一些修改代码如下:fromsocketimport*importthreadingtcp_socket=socket(AF_INET,SOCK_STREAM)tcp_socket.connect(('192.168.1.102',8080))true=Truedefrece_msg(tcp_socket):globaltruewhiletrue:recv_ms
系统 2019-09-27 17:54:41 1828
什么是可变/不可变对象不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变。Python中,数值类型(int和float)、字符串str、元组tuple都是不可变类型。
系统 2019-09-27 17:54:37 1828
pycharm软件很好,但是不能在无图形的终端下使用,另外它们是“重量级选手”。如果偶尔需要vim编辑python程序,让vim支持python的语法提示不是更好!实际上,vim支持python提示,就是把python以及各种各样模块的常用指令都写到一个字典里。操作步骤如下:1、创建vim插件工作目录[root@zsl~]#mkdir-p~/.vim/bundle/2、下载插件[root@zsl~]#cd~/.vim/bundle/[root@zsl~]#
系统 2019-09-27 17:54:31 1828
【摘要】在前一章中,我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取。比如,淘宝,它的整个页面数据确实也是通过Ajax获取的,但是这些Ajax接口参数比较复杂,可能会包含加密密钥等,所以如果想自己构造Ajax参数,还是比较困难的。对于这种页面,最方便快捷的抓取方法就是通过Selenium。本节中,我们就用Selenium来模拟浏览器操作,抓取淘宝的商品信息,并将结果保存到MongoDB。1.本节目标本节中,我们
系统 2019-09-27 17:54:29 1828
戳这里~小结Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!要注意定义可变参数和关键字参数的语法:*args是可变参数,args接收的是一个tuple;**kw是关键字参数,kw接收的是一个dict。以及调用函数时如何传入可变参数和关键字参数的语法:可变参数既可以直接传入:func(1,2,3),又可以先组装list或tuple,再通过*args传
系统 2019-09-27 17:54:27 1828
一些讨论Python中使用配置文件的最佳实践Python中使用配置文件的最好方法Python符号常量多种配置文件方案对比我的建议1.排除yamlyaml不是一个好主意,因为需要给项目引入额外的依赖。首先排除它,除非是你的个人项目,或者你的项目已经引入了这个package。2.使用setting.py如果你只是需要配置一些全局的符号常量(symbolicconstants),参考Django的做法,使用setting.py,参见:https://github
系统 2019-09-27 17:54:23 1828
主要使用函数的递归方法,考虑过程如下:n,a,b,c(n代表罗汉塔块数,a,b,c代表三块柱子)若n=1时,只需从a》》》c若n>1时,需要把上面n-1块从a移动到b,底下1块从a移动到c,再把b上n-1移动到c函数实现如下:defmove(n,a,b,c):ifn==1:print(a,'>>>',c)else:move(n-1,a,c,b)move(1,a,b,c)move(n-1,b,a,c)print(move(3,'a','b','c'))
系统 2019-09-27 17:53:43 1828
定义通常,一个descriptor是具有“绑定行为”的对象属性。所绑定行为可通过descriptor协议被自定义的__get__(),__set__()和__delete__()方法重写。如果一个对象的上述三个方法任意一个被重写,则就可被称为descriptor。属性的默认操作是从对象字典中获取、设置和删除一个属性。例如,a.x有一个查找链,先a.__dict__['x'],若没有则type(a).__dict__['x'],若没有增往上查找父类直到元类。
系统 2019-09-27 17:53:41 1828
getpwname只能得到gid一个username。importpwdmyGroupId=pwd.getpwnam(username).pw_gidgetgroups只能获取groups脚本用户。importosmyGroupIds=os.getgroups()我怎么能得到所有groups的任意一个username,比如id-Gn命令?id-Gn`whoami`解决方案#!/usr/bin/envpythonimportgrp,pwduser="myna
系统 2019-09-27 17:53:36 1828