Python 爬虫 (二)

日期:2019-11-29编辑作者:编程

实例:用cookjar访问人人网主页

 1 import json
 2 from urllib import request,parse
 3 from http import cookiejar
 4 
 5 #实例化一个cookiejar对象
 6 cookiejar_object = cookiejar.CookieJar()
 7 #生成cookie管理器
 8 cookie_handler = request.HTTPCookieProcessor(cookiejar_object)
 9 #有了opener,就可以代替urlopen来进行请求网页
10 opener = request.build_opener(cookie_handler)
11 
12 
13 #获取网页的登陆接口
14 url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2018721532875'
15 
16 #将网页的form信息获取
17 form = {
18     'email':'xxx',
19     'icode':'',
20     'origURL':'http://www.renren.com/home',
21     'domain':'renren.com',
22     'key_id':'1',
23     'captcha_type':'web_login',
24     'password':'xxx',
25     'rkey':'79d8184f25d678248262a91caf3e7ea8',
26     'f':'http%3A%2F%2Fzhibo.renren.com%2Ftop',
27 }
28 
29 
30 #将数据转换成二进制
31 form_b = parse.urlencode(form).encode('utf-8')
32 
33 #将url和表单信息,还有获取到的cookie去访问网页
34 response = opener.open(url,form_b)
35 html_b = response.read()#字节类型
36 # print(html_b)
37 
38 
39 res_dict = json.loads(html_b.decode('utf-8'))
40 #获取登陆后的个人主页url
41 home_url = res_dict['homeUrl']
42 
43 # print(home_url)
44 # 访问个人主页
45 response = opener.open(home_url)
46 html_bytes = response.read()
47 print(html_bytes.decode('utf-8'))

 

 

 

cookie创建

基本方法(session cookie  临时cookie在浏览器关闭后会消失)

              $.cookie('名字',"值")

如果想要给cookie设置过期时间

              $.cookie('名字',"值",{expires:过期时间(天),})

如果想要给特定页面(路径)设置cookie

               $.cookie("名字","值",{path:"路径"})

得到cookie

               $.cookie("名字")

删除cookie

               $.cookie('名字',null)

如果想要删除对应路径上的cookie

                $.cookie('名字',null,{path:"路径"})

cookie应用场景

                只要是你想要存储的值,在下次打开页面还可以得到的情况下可以使用cookie

cookie可以将一些值保存在本地,本地可以通过$.cookie去获取到对应的值


有道词典翻译接口 

 1 import time
 2 import random
 3 import json
 4 from Day1.tuozhan_all import post
 5 
 6 def md5_my(need_str):
 7     import hashlib
 8     # 创建md5对象
 9     md5_o = hashlib.md5()
10     # 需要有bytes, 作为参数
11     # 由str, 转换成 bytes encode-------str.encode('utf-8')
12     # 由bytes转换成 str, decode---------bytes.decode('utf-8')
13     sign_bytes = need_str.encode('utf-8')
14     # 更新md5 object的值
15     md5_o.update(sign_bytes)
16     sign_str = md5_o.hexdigest()
17     return sign_str
18 
19 # url
20 
21 def translate(kw):
22     url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
23 
24     headers = {
25         'Accept': 'application/json, text/javascript, */*; q=0.01',
26         'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
27         'Connection': 'keep-alive',
28         'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
29         'Cookie': 'OUTFOX_SEARCH_USER_ID=-493176930@10.168.8.63; OUTFOX_SEARCH_USER_ID_NCOO=38624120.26076847; SESSION_FROM_COOKIE=unknown; JSESSIONID=aaabYcV4ZOU-JbQUha2uw; ___rl__test__cookies=1534210912076',
30         'Host': 'fanyi.youdao.com',
31         'Origin': 'http://fanyi.youdao.com',
32         'Referer': 'http://fanyi.youdao.com/',
33         'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
34         'X-Requested-With': 'XMLHttpRequest',
35     }
36 
37 
38     # form 的生成1. i 需要确定, 2, salt, 3, sign
39     key= kw
40 
41     # salt : ((new Date).getTime() + parseInt(10 * Math.random(), 10))
42     salt = int(time.time()*1000 + random.randint(0,10))
43     print('salt:',salt)
44     salt_str = str(salt)
45 
46     # sign : o = u.md5(S + n + r + D);
47     # S = "fanyideskweb"
48     # D = "ebSeFb%=XZ%T[KZ)c(sy!"
49     # n = key
50     # r = salt_str
51     S = "fanyideskweb"
52     D = "ebSeFb%=XZ%T[KZ)c(sy!"
53     sign_str = S + key + salt_str + D
54     # md5 加密的方法
55     sign_md5_str = md5_my(sign_str)
56 
57     form = {
58         'i': key,
59         'from': 'AUTO',
60         'to': 'AUTO',
61         'smartresult': 'dict',
62         'client': 'fanyideskweb',
63         'salt': salt_str,
64         'sign': sign_md5_str,
65         'doctype': 'json',
66         'version': '2.1',
67         'keyfrom': 'fanyi.web',
68         'action': 'FY_BY_REALTIME',
69         'typoResult': 'false',
70     }
71 
72     html_bytes = post(url, form, headers=headers)
73 
74     # 将 json 类型的 str, 转化成, 字典
75     res_dict = json.loads(html_bytes.decode('utf-8'))
76     #print(html_bytes.decode('utf-8'))
77 
78     translate_res = res_dict['translateResult'][0][0]['tgt']
79     return translate_res
80 
81 if __name__ == '__main__':
82     ret = translate('中国')
83 
84     print('翻译的结果:' + ret)

 

jsCookie的封装

想要封装cookie方法,就要了解怎么用js去添加cookie,以及获取cookie

            怎么才能添加cookie?

            js代码:document.cookie=“name=张三”;

其中name是key,张三就是其对应的value,在localhost下就可以查看到有一条临时cookie了

            怎么才能获取到cookie呢?

            js代码:var cookie=document.cookie;

这样就能够获取到所有的cookie了,获取到的格式为“key1=value1;+空格key2=value2"(这里就添加两个cookie,可自行尝试),获取其指定value需要先将cookie转成数组,并且去掉空格,将后面的值切出,下面看代码:

var cookie=document.cookie;//获取到所有的cookie值

cookie=cookie.split(";")//这里的将得到的字符串进行以";"切割,得到一个数组

for(var i=0;i<cookie.length;i++){  //循环cookie(上面的操作将cookie分割成了数组)

              cookie[i]=cookie[i].trim() //这里是循环cookie数组,将里面的空格去除掉

}

console.log(cookie[0].name)

经过上面的过程就可以获取到相应的cookie的值了


下面进行添加和获取cookie的封装

;(function  getCookie(_name){

               var str=_name+'=';

               varcookie=document.cookie;

               cookie=cookie.split(';')

    for(vari=0;i<cookie.length;i++){

                 cookie[i]www.129028.com金沙,=cookie[i].trim();

                  if(cookie[i].indexOf(str)==0){

                  return  cookie[i].slice(str.length)

                 }

}

return'';

}

console.log(document.cookie)

}(document,window))

本文由www.129028.com金沙发布于编程,转载请注明出处:Python 爬虫 (二)

关键词:

Python学习

https://baike.baidu.com/item/Python/407313?fr=aladdin...

详细>>

Django学习目录

视图系统 Django视图系统 点我 Django 视图系统 ORM介绍 Django中ORM介绍 点我 Django目录解释、创建应用(app)、创建数据连...

详细>>

Apple的LZF算法解析www.129028.com金沙:

private readonly long[] _hashTable = new long[Hsize]; private const uint Hlog = 14; private const uint Hsize = (1 14); private const uint MaxLit = (1 5...

详细>>

www.129028.com金沙课时18:函数:灵活即强大

目录: Python3基础之函数用法,python3函数用法 一般来说,函数(function)是组织好的、可重复使用的、具有一定功能...

详细>>