本文主要通过如何使用urllib和cookiesJar来模拟人人网登录和保存cookies。
直接上代码
from urllib import request as urllib2
from urllib import parse
from http import cookiejar
import random
import json
def bycookie():
ua_list = [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv2.0.1) Gecko/20100101 Firefox/4.0.1",
"Mozilla/5.0 (Windows NT 6.1; rv2.0.1) Gecko/20100101 Firefox/4.0.1",
"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
"Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"
]
user_agent = random.choice(ua_list)
# 通过cookiejar()类构建一个cookieJar对象,用来保存cookie的值
cookie = cookiejar.CookieJar()
# 通过HTTPCookieProcessor()对象构建一个处理器对象,用来处理cookie
# 参数是CookieJar对象
cookie_handler = urllib2.HTTPCookieProcessor(cookie)
formData = {
'email': '账号',
'password': '密码',
}
data = parse.urlencode(formData).encode('utf-8')
opener = urllib2.build_opener(cookie_handler)
url = r'http://www.renren.com/PLogin.do'
request = urllib2.Request(url=url, data=data, headers=user_agent)
response = opener.open(request)
# 打开登陆后的跳转页面
# print(response.read().decode())
# 打开个人中心 第二次不用再传表单数据 cookie已经得到了保存
# 第二次可以是get请求,这个请求将保存生成cookie一并发到web服务器,服务器会验证cookie通过
url2 = 'http://zhibo.renren.com/liveroom/hot/list?offset=0&limit=10&requestToken=330105178&_rtk=df6dffb4'
data1 = parse.urlencode(formData).encode('utf-8')
request1 = urllib2.Request(url=url2,data=data1,headers=headers)
response2 = opener.open(url2)
file_name = 'rrw.json'
with open(file_name,'w',encoding='utf-8') as file:
js = json.dumps(response2.read().decode(), ensure_ascii=False)
jsLoads = json.loads(js)
file.write(jsLoads)
if __name__ == '__main__':
bycookie()
首先我们得设置我们得请求头,没有设置的话,网站就会知道你是爬虫而进行访问拦截。所以我这里初始化了几个请求头User-Agent,然后进行随机选取。
再者,创建一个cookiesJar对象来保存我们的cookies。然后通过HttpCookiesProcesser来对cookies进行处理。
然后使用一系列的urllib操作进行请求,返回respones。
最后把请求的数据写进json文件里,到这就就完成了。
打开json文件可以看到我们爬去的数据
C