回复内容:
每个回答的div里面都有一个叫 data-aid="12345678"的东西,然后根据, www.zhihu.com/answer/12345678/voters_profile?&offset=10
这个json数据连接分析所有点赞的id和个人连接就行, 每10的点赞人数为一个json连接.
刚刚试了一下,需要登陆之后才能得到完整的数据, 登陆知乎可以参考我写的博客.
python模拟登陆知乎
比如我这个回答的data-aid = '22229844'
![](http://m.sbmmt.com/m//zhstatic.zhihu.com/assets/zhihu/ztext/whitedot.jpg)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import time
import json
import os
import sys
url = 'http://www.zhihu.com'
loginURL = 'http://www.zhihu.com/login/email'
headers = {
"User-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:41.0) Gecko/20100101 Firefox/41.0',
"Referer": "http://www.zhihu.com/",
'Host': 'www.zhihu.com',
}
data = {
'email': '
xxxxx@gmail.com',
'password': '
xxxxxxx',
'rememberme': "true",
}
s = requests.session()
# 如果成功登陆过,用保存的cookies登录
if os.path.exists('cookiefile'):
with open('cookiefile') as f:
cookie = json.load(f)
s.cookies.update(cookie)
req1 = s.get(url, headers=headers)
with open('zhihu.html', 'w') as f:
f.write(req1.content)
# 第一次需要手动输入验证码登录
else:
req = s.get(url, headers=headers)
print req
soup = BeautifulSoup(req.text, "html.parser")
xsrf = soup.find('input', {'name': '_xsrf', 'type': 'hidden'}).get('value')
data['_xsrf'] = xsrf
timestamp = int(time.time() * 1000)
captchaURL = 'http://www.zhihu.com/captcha.gif?=' + str(timestamp)
print captchaURL
with open('zhihucaptcha.gif', 'wb') as f:
captchaREQ = s.get(captchaURL)
f.write(captchaREQ.content)
loginCaptcha = raw_input('input captcha:\n').strip()
data['captcha'] = loginCaptcha
# print data
loginREQ = s.post(loginURL, headers=headers, data=data)
# print loginREQ.url
# print s.cookies.get_dict()
if not loginREQ.json()['r']:
# print loginREQ.json()
with open('cookiefile', 'wb') as f:
json.dump(s.cookies.get_dict(), f)
else:
print 'login failed, try again!'
sys.exit(1)
# 以http://www.zhihu.com/question/27621722/answer/48820436这个大神的399各赞为例子.
zanBaseURL = 'http://www.zhihu.com/answer/22229844/voters_profile?&offset={0}'
page = 0
count = 0
while 1:
zanURL = zanBaseURL.format(str(page))
page += 10
zanREQ = s.get(zanURL, headers=headers)
zanData = zanREQ.json()['payload']
if not zanData:
break
for item in zanData:
# print item
zanSoup = BeautifulSoup(item, "html.parser")
zanInfo = zanSoup.find('a', {'target': "_blank", 'class': 'zg-link'})
if zanInfo:
print 'nickname:', zanInfo.get('title'), ' ',
print 'person_url:', zanInfo.get('href')
else:
anonymous = zanSoup.find(
'img', {'title': True, 'class': "zm-item-img-avatar"})
print 'nickname:', anonymous.get('title')
count += 1
print count
这里有个 Python 3 的项目 Zhihu-py3 7sDream/zhihu-py3 · GitHub封装了知乎爬虫的各方面需求,比如获取用户信息,获取问题信息,获取答案信息,之类的……当然也包括点赞用户啥的,虽然是单线程同步式 但是平常用用还是可以滴。
这里是她的文档:Welcome to zhihu-py3’s documentation!
欢迎 Star 以及 Fork 或者贡献代码。
===
获取点赞用户灰常简单 大概就这样
from zhihu import ZhihuClient
client = ZhihuClient('cookies.json')
url = 'http://www.zhihu.com/question/36338520/answer/67029821'
answer = client.answer(url)
print('问题:{0}'.format(answer.question.title))
print('答主:{0}'.format(answer.author.name))
print('此答案共有{0}人点赞:\n'.format(answer.upvote_num))
for upvoter in answer.upvoters:
print(upvoter.name, upvoter.url)
看到第一名的答案中的评论,补充一下如何发现aid这个关键特征的思路:一句话概述:对人工操作时发送的HTTP Request/Response进行分析,找出关键定位特征。
工具:firebug
1. 点击 任意一个答案页面下面的超链接 等人赞同 发现会向类似于这样的
http://www.zhihu.com/answer/22229844/voters_profile
URL发送数据。
从这个URL的格式上已经很容易猜到这就是给答案22229844 进行投票的投票者资料了,一看服务器返回的Response (一段JSON数据)也能说明这一点。那么只要我们可以向这个URL发送一段GET请求就能知道投票者了。剩下的就是要解决怎么找出这个URL的问题,也就是找到这个22229844 。
2. 既然知道当点击 等人赞同 会触发一段Ajax向这个URL发送请求,那这个22229844 要么在DOM中存储了,要么是计算出来的。既然如此,在DOM中搜索22229844这个字符串,很轻松就能找到这样的一个div:
data-copyable="1" data-isowner="0" data-helpful="1" data-deleted="0" data-created="1444404675" data-collapsed="0" data-atoken="67029821" data-author="洛克" data-qtoken="36338520" data-aid="22229844" itemtype="http://schema.org/Answer" itemscope="" itemprop="topAnswer" class="zm-item-answer" tabindex="-1">
我好奇的是,你说的社会工程学是啥?
据我所知,一般所谓社会工程学就是黑客的骗术,凭借已知信息骗取信任拿到自己要的信息,但是核心就是骗。
你现在是知道她点了哪个答案的赞,跟社会工程学有什么关系呢?
你是想说你知道她点过的多个答案,准备从同时赞过这些答案的人中找到她?
运气好可能一下子就找出来了,运气不好恐怕一堆候选人等着你。关键看你知道她赞过几个答案了。
论技术的话,我觉得用不着python写js在控制台跑就好了
找轮子哥 他有源码
轮子哥有爬取用户自动分析性别颜值值得关注程度的源码声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
上一篇:学习数据结构有什么用?
下一篇:有哪些颜值高的 PyQt/Qt 应用?![Web大前端开发直播班](//m.sbmmt.com/img/upload/aroundimg/000/000/071/626117def31a9203.png)
相关课程推荐
![](//m.sbmmt.com/img/upload/course/000/000/001/5d1c6df423564706.jpg)
独孤九贱(3)_JavaScript视频教程
javascript是运行在浏览器上的脚本语言,连续多年,被评为全球最受欢迎的编程语言。是前端开发必备三大法器中,最具杀伤力。如果前端开发是降龙十八掌,好么javascript就是第18掌:亢龙有悔。没有它,你的前端生涯是不完整的。《php.cn独孤九贱(3)-JavaScript视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了javascript知识。
JavaScript教程123796次播放
![](//m.sbmmt.com/img/upload/course/000/000/001/5d1c6e0d2b744633.jpg)
独孤九贱(6)_jQuery视频教程
jQuery是一个快速、简洁的JavaScript框架。设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等,是全球最流行的前端开发框架之一。PHP中文网根据最新版本,独家录制jQuery最新视频教程,回馈PHP中文网的新老用户。
jQuery教程102295次播放
![](//m.sbmmt.com/img/upload/course/000/000/015/612f16c1e1c8e978.jpg)
jQuery与Ajax基础与实战
jQuery是最流行的JS函数库,封装了许多实用的功能,其中最引人入胜的就是Ajax。
jQuery中的Ajax操作,语法简单,操作方便,使Ajax从未如此轻松,前端人员从此不再为与服务器异步交互而发愁,本套课程,精选了最常用的几个方法,从基本的语法到每个参数,再到具体实例进行了全面的讲解。
AJAX教程3747次播放
![](//m.sbmmt.com/img/upload/course/000/000/015/617b8f8af2b97409.jpg)
Git教程(60分钟全程无废话版)
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持
JavaScript教程3105次播放
1/1![]()