惊!Python爬虫只需10行代码,海量公众号文章任你爬!

2023-12-04

图片

前言

自从chatGPT出现后,对于文本处理的能力直接上升了一个维度。在这之前,我们爬取到网络上的文本内容之后,都需要写一个文本清理的程序,对文本进行清洗,而现在,有了chatGPT的加持,我们只需要几秒,就可以很方便对所有类型,所有格式的文本内容,完成清洗,去除那些html标签等。
对于清洗后的文章,我们仍然可以做很多事情,比如,提取核心观点,文章改写等操作,使用chatGPT都可以很轻松的解决。

早在2019年,我就写过一篇文章,介绍爬虫爬取公众号文章的方法,现在看来依然适用,只不过,当时我们对于爬到的文章,后续基本没有什么处理了,但是现在不同了,我们可以做很多事情,不过前提是不要违反法律法规。

获取文章的URL

爬虫爬取网络资源,最重要的就是可以找到目标网站的url地址,然后寻找规律,遍历地址逐个或多线程进行爬取。一般获取地址的方式,一是通过网页分页,推断出url地址的规律吗,比如通过参数pageNum = num等,只需要将num进行累加即可。另外一种是隐藏在HTML中的,我们需要解析出当前网页的超链接,如 < a href="url"> ,取出url作为后续爬取的地址。

遗憾的是,微信公众号对于这两种方式都很难使用,我们可以在网页中打开一个微信公众号地址,可以看下它的url格式,

https://mp.weixin.qq.com/s?__biz=MzIxMTgyODczNg==&mid=2247483660&idx=1&sn=2c14b9b416e2d8eeed0cbbc6f44444e9&chksm=974e2863a039a1752605e6e76610eb39e5855c473edab16ab2c7c8aa2f624b4d892d26130110&token=20884314&lang=zh_CN#rd

除了前面的域名,后面的参数完全就是没有规律可循,而且,在一篇文章中,也没有办法链接到下一篇文章,我们无法从一篇文章开始,爬取到这个公众号下的所有文章。

但好在,我们依然又办法批量获取到某个公众号下的所有文章地址,我们只需要将其保存下来,后续再遍历爬取就变得轻松很多。

1.首先,你要有一个公众号,如果没有的话,可以注册一个,这个是前提条件。注册公众号的步骤比较简单,可以自行操作。
2.注册好之后,登录微信公众平台,点击左侧草稿箱,新建图文
图片
3.进入新建图文页面,点击顶端的超链接,出现一个弹窗,选择公众号文章,输入你要爬取的公众号的名称,如下所示:
图片
4.选中之后,你就可以看到这个公众号下的所有文章的列表了,这个时候,打开F12,查看网页里面的网络请求。
图片
当你点击下一页的时候,可以看到请求的url,还有携带的业务参数以及请求头参数。
图片

上面就是一些业务参数,这些参数很容易理解,比较重要的是begin指的是从第几个开始查询,count指的是一次列表查询多少个,fakeid是公众号的唯一标识,每个公众号不一样,如果爬取其他公众号的,只需要更改这个参数就可以了。其中random可以省略。还可以看到相应结果:
图片

编写代码

有了上述这些信息,我们就可以编写代码了,我使用的是python3.8,首先,定义url,header和所需要的参数

# 目标urlurl = "https://mp.weixin.qq.com/cgi-bin/appmsg"# 请求头参数headers = {  "Cookie": "ua_id=YF6RyP41YQa2QyQHAAAAAGXPy_he8M8KkNCUbRx0cVU=; pgv_pvi=2045358080; pgv_si=s4132856832; uuid=48da56b488e5c697909a13dfac91a819; bizuin=3231163757; ticket=5bd41c51e53cfce785e5c188f94240aac8fad8e3; ticket_id=gh_d5e73af61440; cert=bVSKoAHHVIldcRZp10_fd7p2aTEXrTi6; noticeLoginFlag=1; remember_acct=mf1832192%40smail.nju.edu.cn; data_bizuin=3231163757; data_ticket=XKgzAcTceBFDNN6cFXa4TZAVMlMlxhorD7A0r3vzCDkS++pgSpr55NFkQIN3N+/v; slave_sid=bU0yeTNOS2VxcEg5RktUQlZhd2xheVc5bjhoQTVhOHdhMnN2SlVIZGRtU3hvVXJpTWdWakVqcHowd3RuVF9HY19Udm1PbVpQMGVfcnhHVGJQQTVzckpQY042QlZZbnJzel9oam5SdjRFR0tGc0c1eExKQU9ybjgxVnZVZVBtSmVnc29ZcUJWVmNWWEFEaGtk; slave_user=gh_d5e73af61440; xid=93074c5a87a2e98ddb9e527aa204d0c7; openid2ticket_obaWXwJGb9VV9FiHPMcNq7OZzlzY=lw6SBHGUDQf1lFHqOeShfg39SU7awJMxhDVb4AbVXJM=; mm_lang=zh_CN",  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",}# 业务参数data = {    "token": "1378111188",    "lang": "zh_CN",    "f": "json",    "ajax": "1",    "action": "list_ex",    "begin": "0",    "count": "5",    "query": "",    "fakeid": "MzU5MDUzMTk5Nw==",    "type": "9",}

cookie和token需要根据自己请求URL中的进行更改,然后发送请求获取响应,并对响应结果进行解析。

content_list = []for i in range(20):    data["begin"] = i*5    time.sleep(5)    # 使用get方法进行提交    content_json = requests.get(url, headers=headers, params=data).json()    # 返回了一个json,里面是每一页的数据    for item in content_json["app_msg_list"]:        # 提取每页文章的标题及对应的url        items = []        items.append(item["title"])        items.append(item["link"])        t = time.localtime(item["create_time"])        items.append(time.strftime("%Y-%m-%d %H:%M:%S", t))        content_list.append(items)

第一个for循环是爬取的页数,这里建议一次爬取20页,每一页5条数据,就是100篇文章了,首先需要看好公众号的历史文章列表一共有多少页,这个数只能小于页数。更改data[“begin”],表示从第几条开始,每次5条,注意爬取不能够太多和太频繁,所以需要每次爬取等待几秒钟,不然会被封ip封cookie,严重还会封公众号。

最后,我们只需要把标题和url保存起来就可以了,保存起来后,就可以逐个爬取了。

name = ['title', 'link', 'create_time']test = pd.DataFrame(columns=name, data=content_list)test.to_csv("url.csv", mode='a', encoding='utf-8')

为了获取所有的历史文章,需要得到文章总数,从app_msg_cnt中获取,然后计算一共有多少页,就可以一次性爬取所有文章了。

content_json = requests.get(url, headers=headers, params=data).json()count = int(content_json["app_msg_cnt"])print(count)page = int(math.ceil(count / 5))print(page)

为了抓取的不够频繁,我们需要不断sleep一段时间,我们可以爬取10次之后,就让程序sleep几秒

if (i > 0) and (i % 10 == 0):        name = ['title', 'link', 'create_time']        test = pd.DataFrame(columns=name, data=content_list)        test.to_csv("url.csv", mode='a', encoding='utf-8')        print("第" + str(i) + "次保存成功")        content_list = []        time.sleep(random.randint(60,90))    else:        time.sleep(random.randint(15,25))

图片
最后,看下保存的结果吧
图片

-END-


学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、自动化测试带你从零基础系统性的学好Python!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

惊!Python爬虫只需10行代码,海量公众号文章任你爬! 的相关文章

随机推荐

  • 渲染效果图时,选择云渲染平台的侧重点有哪些?

    对于 三维行业的发展来看 3D软件版本都在持续更新中 近期三维更新的软件有3ds max maya blender等可以说 软件功能更新上也是不断的 设计行业对渲染渲染的需求也是越来越高 虽然要求渲染精度更高 渲染效果更逼真 但参数的增加会
  • 全网最详细的Python安装教程,超级详细·小白秒懂!!!

    目录 1 安装版本说明 2 准备工作 确定操作系统及位数 2 1 确定方法1 2 2 确定方法2 3 下载Python安装包 4 安装Python 5 测试Python是否安装成功 6 Python安装成功后找不到编写代码的桌面快捷方式 7
  • 《开箱元宇宙》:Madballs 解锁炫酷新境界,人物化身系列大卖

    你是否曾想过 元宇宙是如何融入世界上最具代表性的品牌和名人的战略中的 在本期的 开箱元宇宙 系列中 我们与 Madballs 的战略顾问 Derek Roberto 一起聊聊 Madballs 如何在 90 分钟内售罄 2 000 个人物化
  • 如何利用场追迹控制衍射的包含

    1 摘要 VirtualLab Fusion包括一系列建模方法便于用户可以地调整光学仿真的精度级别和时间 不仅如此 这种功能还有助于隔离物理原因产生的不同影响 在本示例中 我们提出了一个清晰的工作流程配置一个仿真 以便在物理光学模拟中考虑或
  • 盘点最近超火的AI小红书商单玩法,7天快速涨粉1000+

    hi 同学们 今年是AI迎来爆发的一年 生成式AIGC技术大量涌现 正在加速为各行各业赋能 像大家熟悉的AI绘画和AI数字人等商业应用领域 基本先行的那波人都尝到了甜头 老粉都知道我做AI变现项目拆解也有大半年了 我们自有团队也在日常中不断
  • vue3新特性 compositionAPi与React.js中Hooks的异同点

    1 React js中的Hooks基本使用 React Hooks允 许你 勾入 诸如组件状态 和副作用处理等React功能中 Hooks只能用在函数组件中 并允许我们 在不需要创建类的情况下将状态 副作用处 理和更多东西带入组件中 Rea
  • 光学标准具的建模

    光学标准具在具有简单结构的透明板中可以形成法布里 珀罗谐振器 Fabry P rot resonators 并用于光谱和 或角谱选择 VirtualLab Fusion中的非序列场追迹技术可以对不同类型的标准具进行精确建模 其中包括平面或曲
  • Redis基础系列-安装Redis

    Redis基础系列 安装Redis 文章目录 Redis基础系列 安装Redis 1 环境要求 2 下载redis 3 安装 4 配置 5 参考与感谢 1 环境要求 安装C语言编译环境 r
  • 乘数而启,向数而行|2023数字金融创新发展论坛成功举办

    订阅制 C端消费者早已耳熟能详 如今也凭借灵活 服务更新稳定的特点 逐渐成为B端企业服务的新热点 比如对中小企业而言 办公IT设备等配套支出都必不可少 但收入 栗栗在线招人啦 哇 各位 招人好难啊 你们赶紧来找栗栗啊 不限经验 不限地域 不
  • 杂散光好书分享《FRED操作手册上、下》

    目 录 第一章 FRED概述 1 1 1 WHAT IS FRED 1 1 2 FRED与传统软件之间有什么不同 1 1 3 FRED名词术语 2 1 4 FRED用户界面 7 第二章 光源 16 2 1 简易光源 16 2 1 1 简易光
  • 用Czerny-Turner系统检测钠灯双线

    1 摘要 Czerny Turner系统被广泛用于分析光源的光谱信息 通常 首先用抛物面反射镜对光源进行准直 然后用衍射光栅对颜色进行空间分离 在这个例子中 我们提出了一种由反射镜和衍射光栅组成的Czerny Turner系统 用于检测钠双
  • Python 多线程装饰器 基于线程池实现

    usr bin env python3 coding UTF 8 author v jiaohaicheng baidu com des 多线程装饰器 基于cup包内置线程池实现 默认内置最大线程数10 from functools imp
  • 开环端到端自动驾驶: 从入门到放弃

    作者 木子士心王大可 编辑 汽车人 原文链接 https zhuanlan zhihu com p 669454065 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 端到端自动驾驶 技术交流
  • 初学者必看 | Python及PyCharm安装教程

    本期给大家推荐Python的安装教程 Python作为深度学习的必备工具 也是PHM初学者的必备技能 之前发表了基于Anaconda的Python及jupyter notebook编辑器的安装教程 这期主要是Python及PyCharm编辑
  • 【腾讯云云上实验室】个人对腾讯云向量数据库的体验心得

    目录 前言 Tencent Cloud VectorDB概念 使用初体验 腾讯云向量数据库的优势 应用场景有哪些 未来展望 番外篇 腾讯云向量数据库的设计核心 结语 前言 还是那句话 不用多说想必大家都能猜到 现在技术圈最火的是什么 非人工
  • 共赴新型工业化之“山海”,华为云生态的追求与远见

    统计数据显示 2022年 全国工业用电量达5 6万亿度 其中公辅能源耗电量约占40 所谓公辅能源 是指工业企业在生产制造环节所需的水 电 气 冷 热等公共辅助能源 研究显示 公辅能源的节能空间巨大 以10 的节能空间计算 一年可节省2000
  • MySQL:找回root密码

    一 情景描述 我们在日常学习中 经常会忘记自己的虚拟机中 MySQL 的 root 密码 这个时候 我们要想办法重置 root 密码 从而 解决 root 登陆问题 二 解决办法 1 修改 my cnf 配置文件并重启 MySQL 通过修改
  • Python下载与安装教程(很详细)|||

    一 打开python官网点击下载 搜索并打开官网进入页面后点击导航中的Downloads进入下载页面 二 选择要下载的python版本 最新版本的python不能在Windows7的电脑上使用 如果你的系统是win10及以上可以直接下载3
  • Python常用基础语法知识点大全合集,看完这一篇文章就够了

    介绍 Python 是一门独特的语言 快速浏览一下他的要点 面向对象 每一个变量都是一个类 有其自己的属性 attribute 与方法 method 语法块 用缩进 四个空格 而不是分号 花括号等符号来标记 因此 行首的空格不能随意书写 注
  • 惊!Python爬虫只需10行代码,海量公众号文章任你爬!

    前言 自从chatGPT出现后 对于文本处理的能力直接上升了一个维度 在这之前 我们爬取到网络上的文本内容之后 都需要写一个文本清理的程序 对文本进行清洗 而现在 有了chatGPT的加持 我们只需要几秒 就可以很方便对所有类型 所有格式的