python实现50行代码_50行Python代码,教你获取公众号全部文章

> 本文首发自公众号:python3xxx

爬取公众号的方式常见的有两种

- 通过搜狗搜索去获取,缺点是只能获取最新的十条推送文章

- 通过微信公众号的素材管理,获取公众号文章。缺点是需要申请自己的公众号。

![图片描述](//img.mukewang.com/5d21747100010b7908030482.jpg)

今天介绍一种通过抓包PC端微信的方式去获取公众号文章的方法。相比其他的方法非常方便。

![图片描述](//img.mukewang.com/5d2174810001c39110500389.jpg)

![图片描述](//img.mukewang.com/5d2174910001a5b310800452.jpg)

如上图,通过抓包工具获取微信的网络信息请求,我们发现每次下拉刷新文章的时候都会请求 mp.weixin.qq.com/mp/profile_ext 这个接口。

经过多次测试分析,用到了以下几个参数

- __biz : 用户和公众号之间的唯一id,

- uin :用户的私密id

- key :请求的秘钥,一段时候只会就会失效。

- offset :偏移量

- count :每次请求的条数

数据如下

```

{

"ret": 0,

"errmsg": "ok", # 请求状态

"msg_count": 10, # 信息条数

"can_msg_continue": 1, # 是否还可以继续获取,1代表可以。0代表不可以,也就是最后一页

"general_msg_list": "{"list":[]}", # 公众号文本信息

"next_offset": 20,

"video_count": 1,

"use_video_tab": 1,

"real_type": 0,

"home_page_list": []

}

```

部分代码如下

```

params = {

'__biz': biz,

'uin': uin,

'key': key,

'offset': offset,

'count': count,

'action': 'getmsg',

'f': 'json'

}

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'

}

response = requests.get(url=url, params=params, headers=headers)

resp_json = response.json()

if resp_json.get('errmsg') == 'ok':

resp_json = response.json()

# 是否还有分页数据, 用于判断return的值

can_msg_continue = resp_json['can_msg_continue']

# 当前分页文章数

msg_count = resp_json['msg_count']

general_msg_list = json.loads(resp_json['general_msg_list'])

list = general_msg_list.get('list')

print(list, "**************")

```

最后打印的list就是公众号的文章信息详情。包括标题(titile)、摘要(digest)、文章地址(content_url)、阅读原文地址(source_url)、封面图(cover)、作者(author)等等...

输出结果如下:

```

[{

"comm_msg_info": {

"id": 1000000038,

"type": 49,

"datetime": 1560474000,

"fakeid": "3881067844",

"status": 2,

"content": ""

},

"app_msg_ext_info": {

"title": "入门爬虫,这一篇就够了!!!",

"digest": "入门爬虫,这一篇就够了!!!",

"content": "",

"fileid": 0,

"content_url": "http:XXXXXX",

"source_url": "",

"cover": "I5kME6BVXeLibZDUhsiaEYiaX7zOoibxa9sb4stIwrfuqID5ttmiaoVAFyxKF6IjOCyl22vg8n2NPv98ibow\\/0?wx_fmt=jpeg",

"subtype": 9,

"is_multi": 0,

"multi_app_msg_item_list": [],

"author": "Python3X",

"copyright_stat": 11,

"duration": 0,

"del_flag": 1,

"item_show_type": 0,

"audio_fileid": 0,

"play_url": "",

"malicious_title_reason_id": 0,

"malicious_content_type": 0

}

},{...},{...},{...},{...},{...},{...},{...},{...},{...}]

```

获取数据之后,可以保存到数据库中,也可以将文章保存在PDF中。

# 1、保存在Mongo中

```python

# Mongo配置

conn = MongoClient('127.0.0.1', 27017)

db = conn.wx #连接wx数据库,没有则自动创建

mongo_wx = db.article #使用article集合,没有则自动创建

for i in list:

app_msg_ext_info = i['app_msg_ext_info']

# 标题

title = app_msg_ext_info['title']

# 文章地址

content_url = app_msg_ext_info['content_url']

# 封面图

cover = app_msg_ext_info['cover']

# 发布时间

datetime = i['comm_msg_info']['datetime']

datetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(datetime))

mongo_wx.insert({

'title': title,

'content_url': content_url,

'cover': cover,

'datetime': datetime

})

```

结果如下

![图片描述](//img.mukewang.com/5d21754b0001f66810690549.jpg)

# 2、导入到PDF文件中

Python3中常用的操作PDF的库有python-pdf和pdfkit。我用了pdfkit这个模块导出pdf文件。

pdfkit是工具包Wkhtmltopdf的封装类,因此需要安装Wkhtmltopdf才能使用。

可以访问 https://wkhtmltopdf.org/downloads.html 下载和操作系统匹配的工具包。

![图片描述](//img.mukewang.com/5d21756d0001907607740534.jpg)

实现代码也比较简单,只需要传入导入文件的url即可。

安装pdfkit库

```python

pip3 install pdfkit -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

```

```python

import pdfkit

pdfkit.from_url('公众号文章地址', 'out.pdf')

```

运行之后成功导出pdf文件。

![图片描述](//img.mukewang.com/5d2175a50001eced10800499.jpg)

以上就是获取公众号文章的方式,如需完整代码,可在公众号[python3xxx]中回复 **朋友圈** 获取完整代码!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java部署平台_开源Java自动化部署平台JDeploy

JDeploy是Java Shell实现的基于Linux系统的自动化、可视化的项目部署平台,能部署Java服务、Java Web项目,可以简化项目部署操作,无需繁琐的黑窗口SSH指令及Jenkins复杂的配置。传统部署方式:从SVN/GIT服务器检出代码->在IDE中…

A*算法在最短路问题的应用及其使用举例

1 A*算法 A*算法在人工智能中是一种典型的启发式搜索算法,启发中的估价是用估价函数表示的: 其中f(n)是节点n的估价函数,g(n)表示实际状态空间中从初始节点到n节点的实际代价,h(n)是从n到目标节点最佳路径的估计代价。另外定义h(n…

全国计算机等级考试题库二级C操作题100套(第30套)

第30套: 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是将形参a所指结构体变量中的数据赋给函数中的结构体变量b,并修改b中的学号和姓名,最后输出修改后的数据。例如:a所指变量中…

pytorch 使用cpu_想读读PyTorch底层代码?这份内核机制简介送给你

机器之心报道参与:思源学习 PyTorch 比较简单,但你能学习 PyTorch 内部机制吗?最近,有 14 年 ML 经验的大神 Christian 介绍了 PyTorch 的内核机制。虽然在实际使用中并不需要这些知识,但探索 PyTorch 内核能大大提升我…

java web 自定义标签_JavaWeb学习——自定义标签

自定义标签一、自定义标签概述使用标准JSP访问、操作JavaBean,是实现展现(HTML)与业务实现(Java代码)分离的第一步。然而,标准方法功能不够强大,以至于开发者无法仅仅使用它们开发应用,还要在JSP页面中使用Java代码。介于JavaBean…

739. Daily Temperatures - LeetCode

Question 739. Daily Temperatures Solution 题目大意:比今天温度还要高还需要几天 思路:笨方法实现,每次遍历未来几天,比今天温度高,就坐标减 Java实现: public int[] dailyTemperatures(int[] temperatur…

全国计算机等级考试题库二级C操作题100套(第31套)

第31套: 给定程序中,函数fun的功能是:对形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。 例如,形参s所指的…

Android 抽屉效果Demo

2019独角兽企业重金招聘Python工程师标准>>> Android 抽屉效果Demo。 转载:http://www.adobex.com/android/source/details/00000110.htm 转载于:https://my.oschina.net/androidcode/blog/103821

python 连接mysql_python连接MySQL

首先,要安装好MySQL,结果我给忘了。。 应该是这个,我还在下载:http://dev.mysql.com/downloads/file.php?id458460 然后,python要安装连接MySQL的包。 使用pypi下载,名字叫做MySQL-python。 然而pypi官方源…

W4_python_decorator_generator_Iteratable_Iterator_json_pickle

W4_python_decorator_generator_Iteratable_Iterator 50.第03章节-Python3.5-装饰器详解51.第04章节-Python3.5-装饰器应用详解52.第05章节-Python3.5-装饰器之函数即变量53.第06章节-Python3.5-装饰器之高阶函数54.第07章节-Python3.5-装饰器之嵌套函数55.第08章节-Python3.5-…

全国计算机等级考试题库二级C操作题100套(第32套)

第32套: 给定程序中,函数fun的功能是:在形参ss所指字符串数组中,将所有串长超过k的字符串中右边的字符删除,只保留左边的k个字符。ss所指字符串数组中共有N个字符串,且串长小于M。 请在程序的下划线处填入正确的内容并…

DIV中文字不换行解决办法

解决办法如下:word-wrap : normal | break-word设置或检索当当前行超过指定容器的边界时是否断开转行。normal:控制连续文本换行。break-word:内容将在边界内换行。如果需要,词内换行(word-break&#xff0…

python竞赛试题及答案_竞赛信息 | 蓝桥杯大赛Python组

蓝桥杯大赛 青少年创意编程Python组 竞赛规则及样题 — 竞赛规则 — 1 竞赛时长 Python编程组竞赛的选拔赛、省赛及国赛,竞赛时长均为120分钟,详细赛程安排另行通知。 2 竞赛形式 竞赛形式为个人赛,一人一机。 选手须自带笔记本计算机&#x…

全国计算机等级考试题库二级C操作题100套(第33套)

第33套: 给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中&#…

Civil 3D 中使用COM API导入DEM数据创建曲面

Civil 3D提供的基于.net的API和基于COM的API,现在推荐大家使用.net API,但有时也需要使用COM API。 这个例子演示如何使用COM API来导入DEM数据生成Civil 3D曲面。 Civil 3D开发中使用COM API需要添加的引用比较啰嗦,建议使用向导创建项目简化操作&#…

牛客网第4场A

链接:https://www.nowcoder.com/acm/contest/142/A 来源:牛客网题目描述 A ternary string is a sequence of digits, where each digit is either 0, 1, or 2. Chiaki has a ternary string s which can self-reproduce. Every second, a digit 0 is i…

全国计算机等级考试题库二级C操作题100套(第34套)

第34套&#xff1a; 用筛选法可得到2&#xff5e;n&#xff08;n<10000&#xff09;之间的所有素数&#xff0c;方法是&#xff1a;首先从素数2开始&#xff0c;将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0)&#xff1b;接着从数 表中找下一个非0数&#xff…

谈谈NiTE 2手部跟踪在彩色图像上的显示

主要内容&#xff1a; NiTE2手部跟踪流程代码演示总结一、NiTE2手部跟踪流程 我自己都感觉到天天在重复着相同的代码&#xff0c;但我觉得没什么不好的&#xff0c;对于新东西的学习只有在重复再重复的过程中&#xff0c;才能积累经验&#xff0c;较少犯“低级错误”的几率&…

全国计算机等级考试题库二级C操作题100套(第35套)

第35套&#xff1a; 给定程序中&#xff0c;函数fun的功能是建立一个NN的矩阵。 矩阵元素的构成规律是&#xff1a;最外层元素的值全部为1&#xff1b;从外向内第2层元素的值全部为2&#xff1b;第3层元素的值 全部为3&#xff0c;…依次类推。例如&#xff0c;若N5&#xff0…

一些杂想

一些杂想 Django 笔记 &#xff08;目前个人认为&#xff0c;Django 还是应该使用 Django1.11版本&#xff0c;稳定长期支持到2020年&#xff0c;兼容性也好。&#xff09; Django MTV 构架下的网站开发步骤&#xff1a; 使用 virtualenv 创建并启用虚拟机环境。使用 pip insta…