但是在此之前,我其实和大多数小伙伴一样都是Python零基础小白。

我想,这其中我一定是做对了某些事。

通过这篇文章,我想和你分享,

1)我的思考过程

2)我的完整爬虫过程

1.

为什么我能够把这件事做成?

其实是因为做对了两个维度的努力

1)做对的事情

2)把事情做对

这两个维度本质上是一个关于面积的计算:

把事做成=做对的事情 x 把事情做对

查理芒格说,要“去鱼多的地方捕鱼”。

做对的事情,指的是战略方向的正确。

作为Python零基础小白,

我的思考点不是如何从零到一学习Python,

直接复制别人成功的经验。

这就是做对的事情,

做大概率正确的事情

不至于多走弯路。

把事情做对,指的是战术层面的执行。

我把能想到的所有搜索渠道都搜了一遍,

把能想到的所有关键词也都组合了一遍。

但是我也相信,

绝大多数小伙伴用百度搜问题的时候,

不到20分钟就放弃了。

我相信这些小伙伴一定没好好学过概率论,

因为假如一件事情成功的概率是20%,只要能持续重复14次,就可以把这件事情成功的概率提高到95%。

推导过程如下:

做一次失败的概率为:1-20%=80%=0.8

重复做n次至少有一次成功的概率是95%,就相当于重复做n次每一次都不成功的概率是5%,

重复做n次都不成功:80%^n=1-95%=5%=0.05

n=log(0.8,0.05)=13.42

所以重复做13.42次,你成功的概率能达到95%。

所以正确事情重复做,大概率是会成功的。

下面就来和你分享一下我的解题过程:

所以正确事情重复做,大概率是会成功的。

下面就来和你分享一下我的解题过程:

2.

第一步,澄清问题

1)探究问题的本质

因为太久没写文章,加上被催稿,于是我决定动笔。

在此之前,我准备先搭建好选题库,

因为选题意味着文章受众群体和阅读数据直接挂钩。

如何找到一个好的选题?

最简单有效的方法,就是找竞品账 ,

那些被验证过的选题,都可以纳入你的选题库。

于是问题来了,

2)准确的描述问题

问题是落差,是理想结果与现状之间的落差。

我的现状:并不清楚如何导出这些数据。

第二步,寻找对策

生活中我们所遇到的所有问题都可以囊括成两类问题,

一类问题是你见过类似的,但是以前的解决方法无效。

一类问题是你从来没有遇见过的,摸不着头脑,没有经验可循。

如何寻找对策?

我们可以运用系统思维来解决问题。

所谓的系统思维,就是通过构建、选择以及改善模型来帮助我们更加高效地表达和思考的思维方式。

对于模型的选择,大致有两种方式,

一种方式是选择已有的模型进行使用。

但是在实际解决问题的时候,

我们很多时候会发现自己找不到一个合适的模型,

那该怎么办呢?

这时候就需要我们自己来构建一个新的模型。

最常见的构建模型的方法是采用KJ法

1)进行头脑风暴尽可能的罗列要点

2)按照内在的相似性、相关性进行归纳

受篇幅限制,这部分思考就不做展开了,推荐阅读《真正厉害的人,是如何解决问题的?》。

针对这个故事背景,构建出来的模型无非两个维度,如果有现成的数据就直接用别人的数据,如果实在找不到现成的数据,再考虑自己手动爬取。

「1.找现成的数据」

我想到了几个方案,

1) 新榜

能查看历史数据,但是仅支持查看最近7天内的推文,显然也不能满足我的需求。

其他相似平台,如清博大数据、西瓜数据都存在相应的局限。

03 某宝付费

问了几个店铺都不支持导出阅读量等数据,如果你只需要将文章导出为PDF,淘宝付费无疑是很好的选择。

「2.手动爬取数据」

这里提到的软件,文末会附获取方式

1)WeChatDownload

这款软件我几年前用过,可以将文章导出为Word、PDF、HTML格式,并支持下载文章评论,缺点依然是不支持下载文章阅读量等数据,无法导出为Excel格式。

和WechatDownload类似,由吾爱大神开发,支持将文章导出为Word、PDF、HTML格式,并支持下载文章评论。

优点:支持将文章批量导出为Word、PDF、Txt、Excel、HTML,也可以将微信文章中视频、语音、音乐音频、评论留言、文章链接、封面头图。

缺点:软件需要付费,目前会员价格49元/年,获取阅读量、评论数、点赞数、在看数据需要付费调用接口25元/1000次。

既然上面的方法都不能完美的满足我的需求,于是我产生了一个大胆的想法,干脆自己手动爬虫。

02手动爬虫

最直接想到的就是用Python进行爬虫,

可是问题在于,我并不会Python呀!

于是又构成了一个新的问题,

1)澄清问题

我的现状:并不会使用Python进行爬虫

2)寻找对策

上面提到了,对于模型的选择,最直接的方式就是选择已有的模型进行使用。

我需要的并不是从头学习python,

而是从别人的成功案例入手,

研究如何复刻。

果不其然,我在Youtube、知乎、B站、CSDN等平台都找到了很多教程。

第三步,选择对策

根据上文寻找的对策,有好几种方案都可以导出微信文章,但是大部分都无法满足我的定制化需求。

第四步,解决问题

对这部分爬虫内容不感兴趣的小伙伴可以直接略过….

我猜想你比较好奇的是,我是如何搜到这些内容的?

这里先卖个关子,后文揭晓答案。

? 安装Python并配置开发环境

这部分内容其实很容易通过B站搜索到相应的教程,配置Python的开发环境以及安装Pycharm大概2个小时内就可以搞定。

? 用Fiddler抓包微信接口

3.在右侧开发者工具中点击「 络」-选择「全部」-然后找到appmsg?action=list_ex&begin=开头的数据包

4.点击appmsg?action=list_ex&begin=在负载里找到「fakied」和「token」,在标头里找到「cookie」和「user-agent」这四个数据是我们需要的。

6.找到带有mp/getappmsgext?的请求包,在「Params」里找到「Key」、「Pass_ticket」、「appmasg_token」,在「Headers」里找到「Cookie」和「User-Agent」这五个数据也是我们所需要的。

? 安装Python的requests库、Workbook库

使用WIN+R,输入‘cmd’,进入个人计算机的dos系统,

输入命令’pip install requests’,回车,等候电脑安装requests库。

不懂的可以百度,都有详细说明。

? 将 页爬取的「fakied」、「token」、「cookie」、「user-agent」值,以及Fiddler爬取的「Key」、「Pass_ticket」、「appmasg_token」、「Cookie」、「User-Agent」值替换进下方代码。

import requests

import time

import json

from openpyxl import Workbook

import random

url = “https://mp.weixin.qq.com/cgi-bin/appmsg”

Cookie = “自己的cookies”

headers = {

“Cookie”: Cookie,

“User-Agent”: “自己的user-agent”,

}

type = ‘9’

data1 = {

“token”: token,

“lang”: “zh_CN”,

“f”: “json”,

“ajax”: “1”,

“action”: “list_ex”,

“begin”: “0”,

“count”: “4”,

“query”: “”,

“fakeid”: fakeid,

“type”: type,

}

def getMoreInfo(link):

# 获得mid,_biz,idx,sn 这几个在link中的信息

mid = link.split(“&”)[1].split(“=”)[1]

idx = link.split(“&”)[2].split(“=”)[1]

sn = link.split(“&”)[3].split(“=”)[1]

_biz = link.split(“&”)[0].split(“_biz=”)[1]

pass_ticket = “fiddler中获取”#从fiddler中获取

appmsg_token = “fiddler中获取”#从fiddler中获取

url = “http://mp.weixin.qq.com/mp/getappmsgext”#获取详情页的 址

phoneCookie = “在fiddler中获取”

headers = {

“Cookie”: phoneCookie,

“User-Agent”: “fiddler中获取”

}

data = {

“is_only_read”: “1”,

“is_temp_url”: “0”,

“appmsg_type”: “9”,

‘reward_uin_count’: ‘0’

}

params = {

“__biz”: _biz,

“mid”: mid,

“sn”: sn,

“idx”: idx,

“key”: “fiddler中获取”,

“pass_ticket”: pass_ticket,

“appmsg_token”: appmsg_token,

“uin”: “MTUyNzExNzYy”,

“wxtoken”: “777”,

}

requests.packages.urllib3.disable_warnings()

content = requests.post(url, headers=headers, data=data, params=params).json()

# print(content[“appmsgstat”][“read_num”], content[“appmsgstat”][“like_num”])

try:

readNum = content[“appmsgstat”][“read_num”]

print(“阅读数:”+str(readNum))

except:

readNum = 0

try:

likeNum = content[“appmsgstat”][“like_num”]

print(“喜爱数:”+str(likeNum))

except:

likeNum = 0

try:

old_like_num = content[“appmsgstat”][“old_like_num”]

print(“在读数:”+str(old_like_num))

except:

old_like_num = 0

time.sleep(3) # 歇3s,防止被封

return readNum, likeNum,old_like_num

def getAllInfo(url):

# 拿一页,存一页

messageAllInfo = []

# begin 从0开始

for i in range(33):#设置爬虫页码

begin = i * 4

data1[“begin”] = begin

requests.packages.urllib3.disable_warnings()

content_json = requests.get(url, headers=headers, params=data1, verify=False).json()

time.sleep(random.randint(1, 10))

if “app_msg_list” in content_json:

for item in content_json[“app_msg_list”]:

spider_url = item[‘link’]

readNum, likeNum,old_like_num = getMoreInfo(spider_url)

info = {

“title”: item[‘title’],

“url”: item[‘link’],

“readNum”: readNum,

“likeNum”: likeNum,

“old_like_num”:old_like_num

}

messageAllInfo.append(info)

return messageAllInfo

def main():

f = Workbook() # 创建一个workbook 设置编码

sheet = f.active#创建sheet表单

# 写入表头

sheet.cell(row=1, column=1).value = ‘title’ # 第一行第一列

sheet.cell(row=1, column=2).value = ‘url’

sheet.cell(row=1, column=3).value = ‘readNum(阅读数)’

sheet.cell(row=1, column=4).value = ‘likeNum(喜爱数)’

sheet.cell(row=1, column=5).value = ‘old_like_num(在看数)’

messageAllInfo = getAllInfo(url)#获取信息

print(messageAllInfo)

print(len(messageAllInfo))#输出列表长度

# 写内容

for i in range(1, len(messageAllInfo)+1):

sheet.cell(row=i + 1, column=1).value = messageAllInfo[i – 1][‘title’]

sheet.cell(row=i + 1, column=2).value = messageAllInfo[i – 1][‘url’]

sheet.cell(row=i + 1, column=3).value = messageAllInfo[i – 1][‘readNum’]

sheet.cell(row=i + 1, column=4).value = messageAllInfo[i – 1][‘likeNum’]

sheet.cell(row=i + 1, column=5).value = messageAllInfo[i – 1][‘old_like_num’]

if __name__ == ‘__main__’:

main()

? 运行Python,等待爬取结束。

第五步,复盘归档

虽然问题得到了解决,

但还远没结束。

我们还需要进行一次复盘。

复盘的意义在于从过去获得力量,

来帮助我们更好的面对未来。

通过这次活动,

1)我掌握了用Fiddler和Chalers进行抓包的知识;

2)成功的用Python完成了一个小项目,

获得正反馈后以后学习Python更有动力;

4)之后如果需要用Python爬取其他内容例如豆瓣的信息,可以如法炮制。

在研究Python爬虫的过程中,

我还探索了另一种解决问题的方案,

采用无代码爬虫的方式。

这些工具并不能解决该场景提到的问题,

所以我没有展开介绍。

但在进行 页爬虫的时候,

反而会比Python来的更便捷。

3.

上面就是我的解题过程,

你可能还有几个问题想问我,

我一并回答。

1)你可能会觉得,这些操作也太浪费时间了吧?

可是,东西贵不贵,不仅取决于价格,还要看你的收益。

看起来,我这一次解决问题的过程,花费了很多时间,但是我的收获却比别人更巨大。

比如我以前爬虫知乎的时候,

用的是「Web Scraper」这款插件,

但是这次我在探索其他爬虫工具的时候,

我发现「后羿采集器」更好用,这就积累了经验。

成甲老师说“如果我们学习是为了提升自己的认知,形成更准确的决策判断力,那么,花时间在构建更系统的知识体系上,就是非常划算的事情。”

其实是经验的积累,基于经验的学习,

是对每个人而言最基本、最重要的方式。

你搜索的次数多了,

自然就会知道哪些渠道容易找到好东西。

你每次搜索资料的时候10分钟就搜不下去了,

我却要搜2个小时,你说谁更容易精进搜索技能?

成甲老师在《好好思考》这本书里划分了多元思维模型解决问题的四个层次

这四类不同思维模型的特点各有不同。

第一类,经验技巧型的策略往往源自个人有限的经验总结,

而第二类方法流程型的思维模型往往来自更大样本的归纳提炼,

第三类的学科原理型源于经过科学方法验证的规律,

第四类的哲学视角型是人类理性思辨思考问题的方式。

这四种思考深度没有绝对的高下好坏之分,而是有各自的使用场景。

——《好好思考》

经过这次爬虫探索,

我掌握了很多新的技巧和方法,

这都会变成我的个人经验。

但是我把它梳理成一篇文章,

或者绘制成一张流程图这就变成了方法流程,

我可以用这套方法解决更多相似的问题。

对我而言它又属于零边际成本的产品,

所以我可以无限售卖,让它变成我的杠杆。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年9月9日
下一篇 2022年9月9日

相关推荐