把获取到的信息转码为gbk就可以了
0 1 2 |
ss = '\xc7\xeb\xc7\xf3\xb9\xfd\xbf\xec\xa3\xac\xc7\xeb\xd4\xd9\xb5\xc84\xc3\xeb' print ss.decode('gbk') # 请求过快,请再等4秒 |
把获取到的信息转码为gbk就可以了
0 1 2 |
ss = '\xc7\xeb\xc7\xf3\xb9\xfd\xbf\xec\xa3\xac\xc7\xeb\xd4\xd9\xb5\xc84\xc3\xeb' print ss.decode('gbk') # 请求过快,请再等4秒 |
前几天给使用Python写的爬虫加上了可以使用代理访问爬取页面内容的功能,刚开始几天测试是正常的,可以正确返回所需内容,突然这两天一使用代理就全部返回“403: Forbidden”,怎么也没想明白是哪儿的问题,后来我都怀疑是不是我脚本哪里写错了……
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
def mrdede(url, headers={}, data=None, proxyip=None): # socket.setdefaulttimeout(6) info = '' if not proxyip: info += '非代理采集 ' urllib2._opener = None request = urllib2.Request(url, headers=headers) else: info += '使用代理采集 ' proxy_support = urllib2.ProxyHandler({'http': proxyip}) opener = urllib2.build_opener(proxy_support) urllib2.install_opener(opener) request = urllib2.Request(url, headers=headers) if data is not None: data = urllib.urlencode(data) info += '[POST] data: %s' % data else: info += '[GET] ' print info.decode('utf-8') # ##### try: resp = urllib2.urlopen(request, data, timeout=8) # resp = opener.open(url, data) print resp.read().decode('utf-8') # time.sleep(random.randint(60, 180)) except urllib2.HTTPError as e: print 'HTTPError! The bad proxy is %s %s' % (proxyip, e) except urllib2.URLError as e: print 'URLError! The bad proxy is %s %s' % (proxyip, e) except BaseException as e: print 'Unknown Errors! The bad proxy is %s %s' % (proxyip, e) |
上面是一段测试代码,使用代理就返回403,最后实在是没办法了,想着在群里请教一下,结果有一位群友(3245935173)说让我试试使用“https”,测试结果,返回正确数据了,原来这是错在这里。
因为之前使用http协议是正确的,一定是代理网站后来修改了访问协议(http -> https),真是万万没想到啊。
登录mysql:
mysql -u 用户名 -p
Enter password: 输入mysql密码
通过CMD进入没有设置环境变量的MYSQL
先进入到MYDQL安装目录下的./bin文件夹,之后输入
./mysql.exe -h localhost -u root -p
或
./mysql.exe -u root -p
回车
Enter password: 输入mysql密码
显示所有数据库列表:
mysql> show databases;
显示所有数据表列表:
mysql> show tables;
选择进入某数据库:
use mysql;
显示数据表的结构:
describe 表名;
建库:
create database 库名;
建表:
use 库名;
create table 表名 (字段设定列表);
删库和删表:
drop database 库名;
drop table 表名;
将表中记录清空:
delete from 表名;
显示表中的记录:
select * from 表名
修改表名:
ALTER TABLE admin_user RENAME TO a_user
命令行导入数据库.sql文件:
mysql> use dbname;
mysql> source /root/databack.sql
或:
mysql -u 数据库用户名 -p 数据库名 < 预导入的文件名.sql (最后没有分号)
mysql -u abc -p dbname < databack.sql
命令行导出数据库.sql文件:
mysqldump -u 数据库用户名 -p 目标数据库 > 存储的文件名
mysqldump -u root -p dbname >abc.sql
然后回车输入密码即可
命令行导出多个数据库:
mysqldump -u root -p –add-drop-database –databases dbName1 dbName2… > sqlFilePath
–add-drop-database : 该选项表示在创建数据库的时候先执行删除数据库操作
–database : 该选项后面跟着要导出的多个数据库,以空格分隔
命令行导出某个数据库的某个表:
mysqldump -u root -p dbName tableName > sqlFilePath
命令行只导出数据库结构,不带数据:
mysqldump -u root -p -d dbName > sqlFilePath
-d : 只备份结构,不备份数据。也可以使用”–no-data”代替”-d”,效果一样。
ALTER TABLE admin_user RENAMETO a_user
备份数据库
1、cmd进入mysql安装目录下的bin文件夹;
2、输入命令:
0 1 |
# 例 mysqldump -u [数据库用户名] -p [数据库名] > [保存的目录及文件名] mysqldump -u root -p databasename > e:\mydata.sql |
3、然后输入数据数据库密码。
4、备份完成。
恢复(还原)数据库
1、将要导入的.sql文件移至mysql安装目录下的bin文件下,这样的路径比较方便(当然如果不这么做的话,使用绝对路径)
2、CMD进入mysql安装目录下的bin文件夹
3、进入MySQL:mysql -u 用户名 -p
如我输入的命令行:mysql -u root -p (输入同样后会让你输入MySQL的密码)
4、在MySQL-Front中新建你要建的数据库,这时是空数据库,如新建一个名为news的目标数据库
或输入:
4-1、CREATE DATABASE 数据库名;
4-2、 GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON 数据库名.* TO 数据库名@localhost IDENTIFIED BY ‘密码’;
4-3、 SET PASSWORD FOR
‘数据库名’@'localhost’ = OLD_PASSWORD(‘密码’);
依次执行3个命令完成数据库创建。注意:中文 “密码”和“数据库名”是户自己需要设置的。
5、输入:mysql>use 目标数据库名
如我输入的命令行:mysql>use news;
6,导入文件:mysql>source 导入的文件名;
如我输入的命令行:mysql>source news.sql;
MySQL备份和还原,都是利用mysqldump、mysql和source命令来完成的。
在程序流程控制中,个人一直的习惯是判断某变量值是否为真……否则……
今天无意间有一个想法,想测试一个判断为真和判断为假哪个用时更短?结果有些出乎我的意料……
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
a = True t1 = time.time() for i in range(10000000): # A:判断是否为假 if not a: s = 100000 * 10 else: sub2 = time.time() - t1 print sub2 t2 = time.time() for i in range(10000000): # B:判断是否为真 if a: s = 100000 * 10 else: sub1 = time.time() - t2 print sub1 print sub1 / sub2 # 反复运行了有10多次,平均每次的输出值大约为2 |
通过上面的小例子,可以说明在python项目的流程控制中,以否定的“逻辑非”来进行判断应该是首选的。
如果有异议,请一起学习交流。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
if (!function_exists('getallheaders')) { function getallheaders() { foreach ($_SERVER as $name => $value) { if (substr($name, 0, 5) == 'HTTP_') { $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; } } return $headers; } } print_r(getallheaders()) |
一般情况,原因是python项目编码是utf-8,面CMD默认编码是gbk,所以CMD运行python项目中文才会乱码的,那么我们如果不想修改python项目编码的话,那么就需要修改CMD的默认编码了,方法如下:
CMD窗口输入
0 |
chcp |
如果返回当前CMD的编码
0 |
Active code page: 936 |
修改为utf-8编码的命令
0 |
chcp 65001 |
现在运行python项目应该就不会乱码了。
假如还是乱码的话,那就把刚才的修改逆向改回去,再查原因吧,但是暂时我还没有发现这种情况。
0 1 |
chcp 65001 #转换为utf-8代码页 chcp 936 #转换为默认的gbk |
字段是Python是字典中唯一的键-值类型,是Python中非常重要的数据结构,因其用哈希的方式存储数据,其复杂度为O(1),速度非常快。下面列出字典的常用的用途.
一、字典中常见方法列表
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#方法 #描述 ------------------------------------------------------------------------------------------------- D.clear() #移除D中的所有项 D.copy() #返回D的副本 D.fromkeys(seq[,val]) #返回从seq中获得的键和被设置为val的值的字典。可做类方法调用 D.get(key[,default]) #如果D[key]存在,将其返回;否则返回给定的默认值None D.has_key(key) #检查D是否有给定键key D.items() #返回表示D项的(键,值)对列表 D.iteritems() #从D.items()返回的(键,值)对中返回一个可迭代的对象 D.iterkeys() #从D的键中返回一个可迭代对象 D.itervalues() #从D的值中返回一个可迭代对象 D.keys() #返回D键的列表 D.pop(key[,d]) #移除并且返回对应给定键key或给定的默认值D的值 D.popitem() #从D中移除任意一项,并将其作为(键,值)对返回 D.setdefault(key[,default]) #如果D[key]存在则将其返回;否则返回默认值None D.update(other) #将other中的每一项加入到D中。 D.values() #返回D中值的列表 |
二、创建字典的五种方法 Continue reading
系数未经大量测试,少量测试是可用的,但是也已经在生产环境中实际使用,没有发现什么问题。
经度 lon=116.32715863448607
纬度 lat=39.990912172420714
一、假定基础坐标为谷歌坐标,转为百度坐标
0 1 2 3 |
// coeff_lon=0.00661275189627 // coeff_lat=0.00573347020969 lon_new=lon+coeff_lon lat_new=lat+coeff_lat |
二、假定基础坐标为GPS原始坐标,转为百度坐标
0 1 2 3 |
// coeff_lon=0.0127793111931 // coeff_lat=0.00699604707901 lon_new=lon+coeff_lon lat_new=lat+coeff_lat |
下图A点是转换前坐标位置,B点是把A作为谷歌坐标转换成百度坐标,C点是把A作为GPS坐标转换为百度坐标。