python爬取知乎回答_Python爬虫教程:爬取知乎网!

知乎已经成为了爬虫的训练场,本文利用Python中的requests库,模拟登陆知乎,获取cookie,保存到本地,然后这个cookie作为登陆的凭证,登陆知乎的主页面,爬取知乎主页面上的问题和对应问题回答的摘要。

关于知乎验证码登陆的问题,用到了Python上一个重要的图片处理库PIL,如果不行,就把图片存到本地,手动输入。

爬取知乎的关键的部分:模拟登陆

通过对知乎登陆是的抓包,可以发现登陆知乎,需要post三个参数,一个是账号,一个是密码,一个是xrsf。

这个xrsf隐藏在表单里面,每次登陆的时候,应该是服务器随机产生一个字符串。所有,要模拟登陆的时候,必须要拿到xrsf。

用chrome (或者火狐 httpfox 抓包分析)的结果:

所以,必须要拿到xsrf的数值,注意这是一个动态变化的参数,每次都不一样。

注意findall和find_all函数的区别。

拿到xsrf,下面就可以模拟登陆了。

使用requests库的session对象,建立一个会话的好处是,可以把同一个用户的不同请求联系起来,直到会话结束都会自动处理cookies。

注意:cookies 是当前目录的一个文件,这个文件保存了知乎的cookie,如果是第一个登陆,那么当然是没有这个文件的,不能通过cookie文件来登陆。必须要输入密码。

def login(secret, account):

# 通过输入的用户名判断是否是手机号

if re.match(r"^1\d{10}$", account):

print("手机号登录 \n")

post_url = 'https://www.zhihu.com/login/phone_num'

postdata = {

'_xsrf': get_xsrf(),

'password': secret,

'remember_me': 'true',

'phone_num': account,

}

else:

if "@" in account:

print("邮箱登录 \n")

else:

print("你的账号输入有问题,请重新登录")

return 0

post_url = 'https://www.zhihu.com/login/email'

postdata = {

'_xsrf': get_xsrf(),

'password': secret,

'remember_me': 'true',

'email': account,

}

try:

# 不需要验证码直接登录成功

login_page = session.post(post_url, data=postdata


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部