python方法之间加点_python中技巧

1.使用xpath从html文档得到其中元素:

123we为了得到其中的123we元素

tree=html.fromstring(***.text)

tt=list(set(tree.xpath("//a[@href='www.abidu.com']/text()")));

这样就可以提取123we元素,

在BeautifulSoup中:

r=soup.find('td',title="*****")

tt=r.get_text().split()//同样也可以得到相同的元素

2.soup.select写css时标签名不加修饰,类名前加点,id名加#,

组合查找:类标签语id名之间用空格隔开,同样通过子名查找要空格

soup.select('head > tr')

soup.select('p #link1')

还可以通过属性名查找:soup.select('a[class="sister"]')

3.在Python3中没有URllib2模块,只有urrlib,想运用urlopen,在3中只能是

urllib.request.urlopen(url)  ##只能这样用

4.如果网页用res=request.Session().get(URL)要想要Bs4打开文件,必须要先将其转换成html,

con=html.formstring(res.text),在采用requests.get()//从服务器端得到的数据包,会有各种type类型的操作,print出现中文乱码

得到的con的type类型是 ,在这个里面的过程中发现若将其print会遇到出现乱码的过程

如果在其中使用py2.7下的urllib.urlopen(root_url).read()得到的是字符串形式,print打印下不需要进行中文乱码的的处理

II.对requests中文乱码的处理

.在使用requests模块中爬取新浪的网页的时候出现中文乱码,查看其中编码方式

print(res.encoding) ##response内容的编码,采用的内部编码方式

print(res.apparent_encoding)##返回HTML文档中content-type头文件中编码,html的网页头文本编码方式,不同于从抓取的网页内部编码

print(requests.utils.get_encodings_from_content(res.text))##response返回的html header标签里设置的编码,从content得到hearders中编码方式,之上一个结果

对于这样的处理,在requests模块中当从

1 res=requests.get(Root_url)2 print r.text

如果直接调用print 函数,打印r.text,在win7下print函数默认的只能是GBK方式,或者GB18030模式,当特别的Unicode字符对于GBK无法进行编码的,当调用r.text下函数,自动将网页中数据自动解码成Unicode,如果GBK模式不成话,采用集合体GB18030,

如下:

1 Root_url="http://weibo.com/p/1035051191258123/celebrity?from=page_103505&mod=TAB#place"

2

3 res=requests.get(Root_url)4 res.encoding='gb18030'

5

6 print res.text

res.encoding='GBK'

print res.text

1

2

3

4

5

Sina Visitor System

6

7

8

9

10

11 window.use_fp = "1" == "1"; //是否采集设备指纹。12 var url = url ||{};13 (function () {14 this.l =function (u, c) {15 try{16 var s = document.createElement("script");17 s.type = "text/javascript";18 s[document.all ? "onreadystatechange" : "onload"] =function () {19

20 if (document.all && this.readyState != "loaded" && this.readyState != "complete") {21 return

22 }23 this[document.all ? "onreadystatechange" : "onload"] =null;24 this.parentNode.removeChild(this);25 if(c) {26 c()27 }28 };29 s.src =u;30 document.getElementsByTagName("head")[0].appendChild(s)31 } catch (e) {32 }33 };34 }).call(url);35

36 //流程入口。37 wload(function () {38

39 try{40

41 var need_restore = "1" == "1"; //是否走恢复身份流程。42

43 //如果需要走恢复身份流程,尝试从 cookie 获取用户身份。44 if (!need_restore || !Store.CookieHelper.get("SRF")) {45

46 //若获取失败走创建访客流程。47 //流程执行时间过长(超过 3s),则认为出错。48 var error_timeout = window.setTimeout("error_back()", 3000);49

50 tid.get(function (tid, where, confidence) {51 //取指纹顺利完成,清除出错 timeout 。52 window.clearTimeout(error_timeout);53 incarnate(tid, where, confidence);54 });55 } else{56 //用户身份存在,尝试恢复用户身份。57 restore();58 }59 } catch (e) {60 //出错。61 error_back();62 }63 });64

65 //“返回” 回调函数。66 var return_back =function (response) {67

68 if (response["retcode"] == 20000000) {69 back();70 } else{71 //出错。72 error_back(response["msg"]);73 }74 };75

76 //跳转回初始地址。77 var back =function() {78

79 var url = "http://weibo.com/p/1035051191258123/celebrity?from=page_103505&mod=TAB";80 if (url != "none") {81 window.location.href =url;82 }83 };84

85 //跨域广播。86 var cross_domain =function (response) {87

88 var from = "weibo";89 if (response["retcode"] == 20000000) {90

91 var crossdomain_host = "login.sina.com.cn";92 if (crossdomain_host != "none") {93

94 var cross_domain_intr = window.location.protocol + "//" + crossdomain_host + "/visitor/visitor?a=crossdomain&cb=return_back&s=" +

95 encodeURIComponent(response["data"]["sub"]) + "&sp=" + encodeURIComponent(response["data"]["subp"]) + "&from=" + from + "&_rand=" +Math.random();96 url.l(cross_domain_intr);97 } else{98

99 back();100 }101 } else{102

103 //出错。104 error_back(response["msg"]);105 }106 };107

108 //为用户赋予访客身份 。109 var incarnate =function (tid, where, conficence) {110

111 var gen_conf = "";112 var from = "weibo";113 var incarnate_intr = window.location.protocol + "//" + window.location.host + "/visitor/visitor?a=incarnate&t=" +

114 encodeURIComponent(tid) + "&w=" + encodeURIComponent(where) + "&c=" + encodeURIComponent(conficence) +

115 "&gc=" + encodeURIComponent(gen_conf) + "&cb=cross_domain&from=" + from + "&_rand=" +Math.random();116 url.l(incarnate_intr);117 };118

119 //恢复用户丢失的身份。120 var restore =function () {121

122 var from = "weibo";123 var restore_intr = window.location.protocol + "//" + window.location.host +

124 "/visitor/visitor?a=restore&cb=restore_back&from=" + from + "&_rand=" +Math.random();125

126 url.l(restore_intr);127 };128

129 //跨域恢复丢失的身份。130 var restore_back =function (response) {131

132 //身份恢复成功走广播流程,否则走创建访客流程。133 if (response["retcode"] == 20000000) {134

135 var url = "http://weibo.com/p/1035051191258123/celebrity?from=page_103505&mod=TAB";136 var alt = response["data"]["alt"];137 var savestate = response["data"]["savestate"];138 if (alt != "") {139 requrl = (url == "none") ? "" : "&url=" +encodeURIComponent(url);140 var params = "entry=sso&alt=" + encodeURIComponent(alt) + "&returntype=META" +

141 "&gateway=1&savestate=" + encodeURIComponent(savestate) +requrl;142 window.location.href = "http://login.sina.com.cn/sso/login.php?" +params;143 } else{144

145 cross_domain(response);146 }147 } else{148

149 tid.get(function (tid, where, confidence) {150 incarnate(tid, where, confidence);151 });152 }153 };154

155 //出错情况返回登录页。156 var error_back =function (msg) {157

158 var url = "http://weibo.com/p/1035051191258123/celebrity?from=page_103505&mod=TAB";159 if (url != "none") {160

161 if (url.indexOf("ssovie4c55=0") === -1) {162 url += (((url.indexOf("?") === -1) ? "?" : "&") + "ssovie4c55=0");163 }164 window.location.href = "http://weibo.com/login.php";165 } else{166

167 if(document.getElementById("message")) {168 document.getElementById("message").innerHTML = "Error occurred" + (msg ? (":" + msg) : ".");169 }170 }171 }172

173

174

175

176

177

178

179

180

Sina Visitor System

181

182

183

184

185

186 window.use_fp = "1" == "1"; //是否采集设备指纹。187 var url = url ||{};188 (function () {189 this.l =function (u, c) {190 try{191 var s = document.createElement("script");192 s.type = "text/javascript";193 s[document.all ? "onreadystatechange" : "onload"] =function () {194

195 if (document.all && this.readyState != "loaded" && this.readyState != "complete") {196 return

197 }198 this[document.all ? "onreadystatechange" : "onload"] =null;199 this.parentNode.removeChild(this);200 if(c) {201 c()202 }203 };204 s.src =u;205 document.getElementsByTagName("head")[0].appendChild(s)206 } catch (e) {207 }208 };209 }).call(url);210

211 //流程入口。212 wload(function () {213

214 try{215

216 var need_restore = "1" == "1"; //是否走恢复身份流程。217

218 //如果需要走恢复身份流程,尝试从 cookie 获取用户身份。219 if (!need_restore || !Store.CookieHelper.get("SRF")) {220

221 //若获取失败走创建访客流程。222 //流程执行时间过长(超过 3s),则认为出错。223 var error_timeout = window.setTimeout("error_back()", 3000);224

225 tid.get(function (tid, where, confidence) {226 //取指纹顺利完成,清除出错 timeout 。227 window.clearTimeout(error_timeout);228 incarnate(tid, where, confidence);229 });230 } else{231 //用户身份存在,尝试恢复用户身份。232 restore();233 }234 } catch (e) {235 //出错。236 error_back();237 }238 });239

240 //“返回” 回调函数。241 var return_back =function (response) {242

243 if (response["retcode"] == 20000000) {244 back();245 } else{246 //出错。247 error_back(response["msg"]);248 }249 };250

251 //跳转回初始地址。252 var back =function() {253

254 var url = "http://weibo.com/p/1035051191258123/celebrity?from=page_103505&mod=TAB";255 if (url != "none") {256 window.location.href =url;257 }258 };259

260 //跨域广播。261 var cross_domain =function (response) {262

263 var from = "weibo";264 if (response["retcode"] == 20000000) {265

266 var crossdomain_host = "login.sina.com.cn";267 if (crossdomain_host != "none") {268

269 var cross_domain_intr = window.location.protocol + "//" + crossdomain_host + "/visitor/visitor?a=crossdomain&cb=return_back&s=" +

270 encodeURIComponent(response["data"]["sub"]) + "&sp=" + encodeURIComponent(response["data"]["subp"]) + "&from=" + from + "&_rand=" +Math.random();271 url.l(cross_domain_intr);272 } else{273

274 back();275 }276 } else{277

278 //出错。279 error_back(response["msg"]);280 }281 };282

283 //为用户赋予访客身份 。284 var incarnate =function (tid, where, conficence) {285

286 var gen_conf = "";287 var from = "weibo";288 var incarnate_intr = window.location.protocol + "//" + window.location.host + "/visitor/visitor?a=incarnate&t=" +

289 encodeURIComponent(tid) + "&w=" + encodeURIComponent(where) + "&c=" + encodeURIComponent(conficence) +

290 "&gc=" + encodeURIComponent(gen_conf) + "&cb=cross_domain&from=" + from + "&_rand=" +Math.random();291 url.l(incarnate_intr);292 };293

294 //恢复用户丢失的身份。295 var restore =function () {296

297 var from = "weibo";298 var restore_intr = window.location.protocol + "//" + window.location.host +

299 "/visitor/visitor?a=restore&cb=restore_back&from=" + from + "&_rand=" +Math.random();300

301 url.l(restore_intr);302 };303

304 //跨域恢复丢失的身份。305 var restore_back =function (response) {306

307 //身份恢复成功走广播流程,否则走创建访客流程。308 if (response["retcode"] == 20000000) {309

310 var url = "http://weibo.com/p/1035051191258123/celebrity?from=page_103505&mod=TAB";311 var alt = response["data"]["alt"];312 var savestate = response["data"]["savestate"];313 if (alt != "") {314 requrl = (url == "none") ? "" : "&url=" +encodeURIComponent(url);315 var params = "entry=sso&alt=" + encodeURIComponent(alt) + "&returntype=META" +

316 "&gateway=1&savestate=" + encodeURIComponent(savestate) +requrl;317 window.location.href = "http://login.sina.com.cn/sso/login.php?" +params;318 } else{319

320 cross_domain(response);321 }322 } else{323

324 tid.get(function (tid, where, confidence) {325 incarnate(tid, where, confidence);326 });327 }328 };329

330 //出错情况返回登录页。331 var error_back =function (msg) {332

333 var url = "http://weibo.com/p/1035051191258123/celebrity?from=page_103505&mod=TAB";334 if (url != "none") {335

336 if (url.indexOf("ssovie4c55=0") === -1) {337 url += (((url.indexOf("?") === -1) ? "?" : "&") + "ssovie4c55=0");338 }339 window.location.href = "http://weibo.com/login.php";340 } else{341

342 if(document.getElementById("message")) {343 document.getElementById("message").innerHTML = "Error occurred" + (msg ? (":" + msg) : ".");344 }345 }346 }347

348

349

350

View Code

结果中显示的到,得到相同的结果。

5.使用BeautifulSoup(***)//这里***文档type要是lxml格式的,

用urllib.URLopen().read()得到的是str,不能够用BeautifulSoup进行解析

8.RSA 公密加钥算法:大的质数相乘简单,但是将其乘积因式分解很困难,

“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。

加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。

需要一对密钥,用其中一个密钥加密,解密需要另外一个密钥。这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。保存和传递密钥,就成了最头疼的问题。

原理:两个质数e1,e2,n表示其用二进制所占的位数,e1任取,p,q为两个大质数,e1与(p-1)*(q-1)互质;再选择e2,(e2*e1)mod(p-1)(q-1)=1,e1,e2不一定等于大质数p,q

如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。比如,15和32没有公因子,所以它们是互质关系。这说明,不是质数也可以构成互质关系。

利用rsa模块对字符串进行加密操作:

1 importrsa2 rsaPublickey = int(pubkey, 16)3 key = rsa.PublicKey(rsaPublickey, 65537) #创建公钥

4 message = str(servertime) + '\t' + str(nonce) + '\n' + str(password) #拼接明文js加密文件中得到

5 passwd = rsa.encrypt(message, key) #加密

6 passwd = binascii.b2a_hex(passwd) #将加密信息转换为16进制。

7 return passwd

9.正则表达式:(),[],{}

() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。

(\s*)表示连续空格的字符串。

[]是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s*]表示空格或者*号。

{}一般用来表示匹配的长度,比如 \s{3} 表示匹配三个空格,\s[1,3]表示匹配一到三个空格。

(0-9) 匹配 '0-9′ 本身。 [0-9]* 匹配数字(注意后面有 *,可以为空)[0-9]+ 匹配数字(注意后面有 +,不可以为空){1-9} 写法错误。

[0-9]{0,9} 表示长度为 0 到 9 的数字字符串。

正则表达式用re.findall(pattern,content('查询文档')) pattern可以采用正则表达式进行提取:

10.__init__方法主要用在python建立类的过程中对类中变量进行初始化的作用:

__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化 。注意,这个名称的开始和结尾都是双下划

1 lock=threading.Condition()2

3 classProduce(threading.Thread):4

5 def __init__(self,lock,product,filename):6 self._lock=lock7 self.product=product8 self.file=filename9 threading.Thread.__init__(self)10

11 if __name__=='__main__':12 product=[]13 ##假设product有五位:,消费者只有三位

14 for i in xrange(5):15 p=Produce(lock,product,'log_in.txt')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值