回复内容:
每个回答的div里面都有一个叫 data-aid="12345678"的东西,
然后根据, HdhCmsTestzhihu测试数据/answer/12345678/voters_profile?&offset=10
这个json数据连接分析所有点赞的id和个人连接就行, 每10的点赞人数为一个json连接.
刚刚试了一下,需要登陆之后才能得到完整的数据, 登陆知乎可以参考我写的博客.
python模拟登陆知乎
比如我这个回答的data-aid = '22229844'
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import time
import json
import os
import sys
url = 'http://HdhCmsTestzhihu测试数据'
loginURL = 'http://HdhCmsTestzhihu测试数据/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://HdhCmsTestzhihu测试数据/" ,
'Host' : 'HdhCmsTestzhihu测试数据' ,
}
data = {
'email' : '
xxxxx @gmail测试数据 ',
'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://HdhCmsTestzhihu测试数据/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://HdhCmsTestzhihu测试数据/question/27621722/answer/48820436这个大神的399各赞为例子.
zanBaseURL = 'http://HdhCmsTestzhihu测试数据/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://HdhCmsTestzhihu测试数据/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://HdhCmsTest zhihu测试数据/answer/222298 44/voters_profile
URL发送数据。
从这个URL的格式上已经很容易猜到这就是给答案22229844 进行投票的投票者资料了,一看服务器返回的Response (一段JSON数据)也能说明这一点。那么只要我们可以向这个URL发送一段GET请求就能知道投票者了。剩下的就是要解决怎么找出这个URL的问题,也就是找到这个22229844 。
2. 既然知道当点击 等人赞同 会触发一段Ajax向这个URL发送请求,那这个22229844 要么在DOM中存储了,要么是计算出来的。既然如此,在DOM中搜索22229844这个字符串,很轻松就能找到这样的一个div:
我好奇的是,你说的社会工程学是啥?
据我所知,一般所谓社会工程学就是黑客的骗术,凭借已知信息骗取信任拿到自己要的信息,但是核心就是骗。
你现在是知道她点了哪个答案的赞,跟社会工程学有什么关系呢?
你是想说你知道她点过的多个答案,准备从同时赞过这些答案的人中找到她?
运气好可能一下子就找出来了,运气不好恐怕一堆候选人等着你。关键看你知道她赞过几个答案了。
论技术的话,我觉得用不着python写js在控制台跑就好了 找轮子哥 他有源码 轮子哥有爬取用户自动分析性别颜值值得关注程度的源码
查看更多关于如何写个爬虫程序扒下知乎某个回答所有点赞用户名单?的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did90080