python3.5爬虫实例(二)模拟登陆

很多网站的全部内容需要登录后才能查看,因此本文会介绍一个模拟登录知乎并输出自己关注话题的小例子。

step1:获取登陆所需的参数

我的知乎是用手机号注册的,通过浏览器的开发者工具查看,发现手机登录网址是phone_url = 'http://www.zhihu.com/login/phone_num'。

接着需要获取登陆所需的参数,我用的是charles(是少数可以跨平台的抓包工具),在浏览器中打开http://www.zhihu.com/login/phone_num,输入账号密码后,可以找到一个post方法,单击查看它的request参数:

发现除了我们输入的手机号和密码,还有一个_xsrf,是每次随机生成的,所以我们要查看网站源码,把它读取出来。在这条语句里:

可以用正则表达式找出来:

def get_xsrf():

req = opener.open('https://www.zhihu.com')

html = req.read()

html=html.decode('utf-8')

get_xsrf_pattern = re.compile(r'

_xsrf = re.findall(get_xsrf_pattern, html)[0]

return _xsrf

step2:使用cookiescookies是保存在本地的浏览器临时文件目录中的。所以,你要实现自动登录,就首先要在登录时,将用户名和密码写入cookies,再次访问时,就不需要账号密码了。先检测是否存在cookies,如果本地有cookie就不用再post数据了,cookie的文件类型是Set-Cookie3,要用LWPCookieJar进行读取(在http://www.jb51.net/article/46499.htm有详解):

filename = 'cookie'

cookie = http.cookiejar.LWPCookieJar(filename)

try:

cookie.load(filename=filename, ignore_discard=True)

except:

print('Cookie未加载')

step3:创建自定义Opener对象现在建立一个可以处理cookies的opener:

1.urlopen()函数不支持验证、cookie或者其它HTTP高级功能。 要支持这些功能,必须使用build_opener()函数创建自定义Opener对象:opener = request.build_opener(request.HTTPCookieProcessor(cookie))2.给openner添加headers, addheaders方法接受元组而非字典:opener.addheaders = [(key, value) for key, value in headers.items()]然后就可以用opener.open()来传入url和data了

step4:开始登陆操作(终于开始了!有木有小激动啊)传入自己的账号密码:

def login(username, password):

print('使用手机登录中...')

url = phone_url

data = {'_xsrf': get_xsrf(),

'password': password,

'remember_me': 'true',

'phone_num': username

}

# 保存cookie到本地

cookie.save(ignore_discard=True, ignore_expires=True)

主函数:

if __name__ == '__main__':

#在这里输入你的账号和密码

account = 'xxxxxxxx'

secret = 'xxxxxxxx'

login(account, secret)

# 输出主页的关注话题。可以说明登录成功

get_url = 'https://www.zhihu.com/people/yang-zhi-hu-97-58/topics'

get = opener.open(get_url)

content = get.read().decode('utf-8')

#因为看了源码后发现关注话题的名字都在strong标签里

reg = '.*?'

text = re.compile(reg)

textlist = re.findall(text,content)

for i in textlist:

title = re.sub("", "", i)

title = re.sub("", "", title)

print(title)

这样就👌啦~会输出关注的话题名字还有数量。

最后还是综合一下代码咯:

import http.cookiejar

import json

import re

from urllib import parse, request

phone_url = 'http://www.zhihu.com/login/phone_num'

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}

filename = 'cookie'

cookie = http.cookiejar.LWPCookieJar(filename)

# 若本地有cookie则不用再post数据了

try:

cookie.load(filename=filename, ignore_discard=True)

except:

print('Cookie未加载')

#urlopen()函数不支持验证、cookie或者其它HTTP高级功能。 要支持这些功能,必须使用build_opener()函数创建自定义Opener对象。

opener = request.build_opener(request.HTTPCookieProcessor(cookie))

# 给openner添加headers, addheaders方法接受元组而非字典

opener.addheaders = [(key, value) for key, value in headers.items()]

# 登陆知乎时服务器给的参数

def get_xsrf():

"""

获取参数_xsrf

"""

req = opener.open('https://www.zhihu.com')

html = req.read()

html=html.decode('utf-8')

get_xsrf_pattern = re.compile(r'

_xsrf = re.findall(get_xsrf_pattern, html)[0]

return _xsrf

def login(username, password):

"""

输入自己的账号密码,模拟登录知乎

"""

# 检测到11位数字则是手机登录

print('使用手机登录中...')

url = phone_url

data = {'_xsrf': get_xsrf(),

'password': password,

'remember_me': 'true',

'phone_num': username

}

# 保存cookie到本地

cookie.save(ignore_discard=True, ignore_expires=True)

if __name__ == '__main__':

account = 'xxxxxxxx'

secret = 'xxxxxxx'

login(account, secret)

# 输出主页的关注话题。以此来验证确实登录成功

get_url = 'https://www.zhihu.com/people/yang-zhi-hu-97-58/topics'

get = opener.open(get_url)

content = get.read().decode('utf-8')

reg = '.*?'

text = re.compile(reg)

textlist = re.findall(text,content)

for i in textlist:

title = re.sub("", "", i)

title = re.sub("", "", title)

print(title)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容