直到今年,我才开始重视涨粉,看着很多年轻码农的粉丝数过万,有点惭愧。直接在CSDN上搜索了一下:
看来这个涨粉事情是很多码农关心的事情啊,为什么呢?因为今年CSDN对平台做了调整,鼓励优质内容和原创,只有粉丝数过500才能上传付费资源。我看了一下上面这些热门文章,最终的结论是:涨粉无捷径,数据有学问,下面说说我的发现。
首先说明,违法违规的涨粉途径不要去做:
下面才是本文的重点。CSDN上有各式各样的数据,要知道这是国内第一大技术社区,3000万+的用户群体。所以上面产生的数据是值得分析研究的。好在CSDN比较开放,这些数据比较容易获取。
先说说怎么获得这些数据,当然是通过程序。网上有写爬虫获取的,采用WebMagic,其实大部分数据无需那么复杂,简单的python几行脚本就能搞掂。下面举例说明。
下面代码获得某个用户的全部粉丝列表。这个API无需登录,直接分页查询即可:
def get_fans(self, user_id): fans = []id = '0'for x in range(1, 20): ## 此处范围自己调节url = f'https://blog.csdn.net/community/home-api/v2/get-fans-list?page={x}&pageSize=20&id={id}&noMore=false&blogUsername={user_id}'print(url)response = self.session.get(url, headers=HEADERS, verify=False)data = json.loads(response.text)users = data['data']['list']if users == None:breakprint(f'抓取了{len(users)}个粉丝')for user in users:fans.append(user['username'])id = user['id']return fans
获得某个用户的关注列表也无需登录,同样是分页查询:
def fetch_my_follows(self, user_id):'''获得我关注的人'''follows = []for x in range(1, 101): ## 此处自行调节范围 url = f'https://blog.csdn.net/community/home-api/v1/get-follow-list?page={x}&size=20&noMore=false&blogUsername={user_id}'response = self.session.get(url, headers=HEADERS, verify=False)if response.status_code == 200:data = json.loads(response.text)users = data['data']['list']if users == None:breakfor user in users:follows.append(user['username'])return follows
用户owner关注用户user_id,可以采用如下代码:
def follow_user(self, owner, user_id):self.session.cookies.update({'UserToken': USER_TOKEN, 'UserName': owner, 'dc_session_id': SESSION_ID}) data = {"username": owner, "follow": user_id, "source": "ME", "fromType": "pc", "detailSourceName": "个人主页"}response = self.session.post('https://mp-action.csdn.net/interact/wrapper/pc/fans/v1/api/follow', headers=HEADERS, json=data, verify=False)return response
此函数需要先登录,你可以在浏览器里登录一下,通过抓包工具拿到UserToken和dc_session_id即可。当然dev_tool一样可以。但是,我怎么找到需要这两个cookie值呢?靠的是mitmproxy这个代理工具。有了这两个cookie值,你能调用很多API。但注意有时长限制。
其它cookie值没有用。大家可以参考我写的【爬虫与逆向】两个mitmproxy实例级联轻松调试抓包过程
和上面一样,取得UserToken和session_id即可:
def unfollow_user(self, owner, user_id):self.session.cookies.update({'UserToken': USER_TOKEN, 'UserName': owner, 'dc_session_id': SESSION_ID}) data = {"username": owner, "follow": user_id, "source": "ME", "fromType": "pc", "detailSourceName": "个人主页"}response = self.session.post('https://mp-action.csdn.net/interact/wrapper/pc/fans/v1/api/unFollow',headers=HEADERS, json=data, verify=False)return response
但是,注意:每天只能取关30次。
此API无需登录,在每个用户主页即可获得:
def get_userinfo(self, user_id):url = f'https://blog.csdn.net/{user_id}'response = self.session.get(url, headers=HEADERS, verify=False)soup = BeautifulSoup(response.content, 'lxml')dom = etree.HTML(str(soup))dao = csdn_dao.CsdnDao()user = csdn_db_model.CsdnUser()# 别名alias = soup.select("div.user-profile-head-name>div:first-child")[0].text# 原创user.innovates = self.get_intvalue(dom.xpath('//div[@class="user-profile-head-info-r-c"]//div[text()="原创"]/preceding-sibling::div[1]'))user.ranking = self.get_intvalue(dom.xpath('//div[@class="user-profile-head-info-r-c"]//div[text()="排名"]/preceding-sibling::div[1]'))user.fans_count = self.get_intvalue(dom.xpath('//div[@class="user-profile-head-info-r-c"]//div[text()="粉丝"]/preceding-sibling::div[1]'))dao.update_by_id(user_id, user)
获得用户列表,社区列表,都是如法炮制,后续我贴上来。
当然不能直接涨粉,只能帮你涨粉,例如你关注那些优质用户,和你有技术方向相同的用户。给他们发私信,我这里也有程序自动发送私信。关注别人多了,100个里就会有一个回关你。这不就涨粉了吗?当然,CSDN只能最多关注2000个用户,但是你可以不断调换嘛。
把这些基本数据汇聚到一起后,就能分析出活跃用户,他的涨粉规律,以及热门文章了,后续我会把优质用户的文章汇集成PDF,方便大家浏览。