当前位置:   article > 正文

Python 获取微信公众号文章_python mp.weixin.qq

python mp.weixin.qq
  1. # _*_ coding:utf-8 _*_
  2. # Author:liu
  3. import time
  4. import requests
  5. import re
  6. import random
  7. # 前提自己要有公众号
  8. user = "你自己的公众号"
  9. # 公众号密码
  10. password = "密码"
  11. # 爬取微信公众号文章,并存在本地文本中
  12. def get_content(query):
  13. # query为要爬取的公众号名称
  14. # 公众号主页
  15. url = 'https://mp.weixin.qq.com'
  16. # 设置headers
  17. header = {
  18. "HOST": "mp.weixin.qq.com",
  19. "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.170 Safari/537.36"
  20. }
  21. # cookies信息,登录公众号主页使用抓包工具就可以获取
  22. cookies = {
  23. "Cookie": "coolies值"}
  24. # 登录之后的微信公众号首页url变化为:https://mp.weixin.qq.com/cgi-bin/home?t=home/index&lang=zh_CN&token=1849751598,从这里获取token信息
  25. response = requests.get(url=url, cookies=cookies)
  26. token = re.findall(r'token=(\d+)', str(response.url))[0]
  27. # 搜索微信公众号的接口地址
  28. search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
  29. # 搜索微信公众号接口需要传入的参数,有三个变量:微信公众号token、随机数random、搜索的微信公众号名字
  30. query_id = {
  31. 'action': 'search_biz',
  32. 'token': token,
  33. 'lang': 'zh_CN',
  34. 'f': 'json',
  35. 'ajax': '1',
  36. 'random': random.random(),
  37. 'query': query,
  38. 'begin': '0',
  39. 'count': '5'
  40. }
  41. # 打开搜索微信公众号接口地址,需要传入相关参数信息如:cookies、params、headers
  42. search_response = requests.get(search_url, cookies=cookies, headers=header, params=query_id)
  43. # 取搜索结果中的第一个公众号
  44. lists = search_response.json().get('list')[0]
  45. # 获取这个公众号的fakeid,后面爬取公众号文章需要此字段
  46. fakeid = lists.get('fakeid')
  47. # 微信公众号文章接口地址
  48. appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
  49. # 搜索文章需要传入几个参数:登录的公众号token、要爬取文章的公众号fakeid、随机数random
  50. query_id_data = {
  51. 'token': token,
  52. 'lang': 'zh_CN',
  53. 'f': 'json',
  54. 'ajax': '1',
  55. 'random': random.random(),
  56. 'action': 'list_ex',
  57. 'begin': '0', # 不同页,此参数变化,变化规则为每页加5
  58. 'count': '5',
  59. 'query': '',
  60. 'fakeid': fakeid,
  61. 'type': '9'
  62. }
  63. # 打开搜索的微信公众号文章列表页
  64. appmsg_response = requests.get(appmsg_url, cookies=cookies, headers=header, params=query_id_data)
  65. # 获取文章总数
  66. max_num = appmsg_response.json().get('app_msg_cnt')
  67. print('文章总数:', max_num)
  68. # 每页至少有5条,获取文章总的页数,爬取时需要分页爬
  69. num = int(int(max_num) / 5)
  70. # 起始页begin参数,往后每页加5
  71. begin = 0
  72. while num + 1 > 0:
  73. query_id_data = {
  74. 'token': token,
  75. 'lang': 'zh_CN',
  76. 'f': 'json',
  77. 'ajax': '1',
  78. 'random': random.random(),
  79. 'action': 'list_ex',
  80. 'begin': '{}'.format(str(begin)),
  81. 'count': '5',
  82. 'query': '',
  83. 'fakeid': fakeid,
  84. 'type': '9'
  85. }
  86. print('正在翻页:--------------', begin)
  87. # 获取每一页文章的标题和链接地址,并写入本地文本中
  88. query_fakeid_response = requests.get(appmsg_url, cookies=cookies, headers=header, params=query_id_data)
  89. fakeid_list = query_fakeid_response.json().get('app_msg_list')
  90. for item in fakeid_list:
  91. content_link = item.get('link')
  92. content_title = item.get('title')
  93. fileName = query + '.txt'
  94. with open(fileName, 'a', encoding='utf-8') as fh:
  95. fh.write(content_title + ":\n" + content_link + "\n")
  96. num -= 1
  97. begin = int(begin)
  98. begin += 5
  99. time.sleep(2)
  100. def main():
  101. try:
  102. weiname = input('请输入对方的公众号名称:')
  103. gzlist = [weiname]
  104. # 登录之后,通过微信公众号后台提供的微信公众号文章接口爬取文章
  105. for query in gzlist:
  106. # 爬取微信公众号文章,并存在本地文本中
  107. print("开始爬取公众号:" + query)
  108. get_content(query)
  109. print("爬取完成")
  110. except Exception as e:
  111. print(str(e))
  112. if __name__ == '__main__':
  113. main()
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.170 Safari/537.36" } # cookies信息,登录公众号主页使用抓包工具就可以获取 cookies = { "Cookie": "coolies值"} # 登录之后的微信公众号首页url变化为:https://mp.weixin.qq.com/cgi-bin/home?t=home/index&lang=zh_CN&token=1849751598,从这里获取token信息 response = requests.get(url=url, cookies=cookies) token = re.findall(r'token=(\d+)', str(response.url))[0] # 搜索微信公众号的接口地址 search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?' # 搜索微信公众号接口需要传入的参数,有三个变量:微信公众号token、随机数random、搜索的微信公众号名字 query_id = { 'action': 'search_biz', 'token': token, 'lang': 'zh_CN', 'f': 'json', 'ajax': '1', 'random': random.random(), 'query': query, 'begin': '0', 'count': '5' } # 打开搜索微信公众号接口地址,需要传入相关参数信息如:cookies、params、headers search_response = requests.get(search_url, cookies=cookies, headers=header, params=query_id) # 取搜索结果中的第一个公众号 lists = search_response.json().get('list')[0] # 获取这个公众号的fakeid,后面爬取公众号文章需要此字段 fakeid = lists.get('fakeid') # 微信公众号文章接口地址 appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?' # 搜索文章需要传入几个参数:登录的公众号token、要爬取文章的公众号fakeid、随机数random query_id_data = { 'token': token, 'lang': 'zh_CN', 'f': 'json', 'ajax': '1', 'random': random.random(), 'action': 'list_ex', 'begin': '0', # 不同页,此参数变化,变化规则为每页加5 'count': '5', 'query': '', 'fakeid': fakeid, 'type': '9' } # 打开搜索的微信公众号文章列表页 appmsg_response = requests.get(appmsg_url, cookies=cookies, headers=header, params=query_id_data) # 获取文章总数 max_num = appmsg_response.json().get('app_msg_cnt') print('文章总数:', max_num) # 每页至少有5条,获取文章总的页数,爬取时需要分页爬 num = int(int(max_num) / 5) # 起始页begin参数,往后每页加5 begin = 0 while num + 1 > 0: query_id_data = { 'token': token, 'lang': 'zh_CN', 'f': 'json', 'ajax': '1', 'random': random.random(), 'action': 'list_ex', 'begin': '{}'.format(str(begin)), 'count': '5', 'query': '', 'fakeid': fakeid, 'type': '9' } print('正在翻页:--------------', begin) # 获取每一页文章的标题和链接地址,并写入本地文本中 query_fakeid_response = requests.get(appmsg_url, cookies=cookies, headers=header, params=query_id_data) fakeid_list = query_fakeid_response.json().get('app_msg_list') for item in fakeid_list: content_link = item.get('link') content_title = item.get('title') fileName = query + '.txt' with open(fileName, 'a', encoding='utf-8') as fh: fh.write(content_title + ":\n" + content_link + "\n") num -= 1 begin = int(begin) begin += 5 time.sleep(2) def main(): try: weiname = input('请输入对方的公众号名称:') gzlist = [weiname] # 登录之后,通过微信公众号后台提供的微信公众号文章接口爬取文章 for query in gzlist: # 爬取微信公众号文章,并存在本地文本中 print("开始爬取公众号:" + query) get_content(query) print("爬取完成") except Exception as e: print(str(e)) if __name__ == '__main__': main()

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/901402
推荐阅读
相关标签
  

闽ICP备14008679号