软录 · 2023年5月22日

java抓取微信公众号文章|如何根据微信公众号采集文章

A. 求助贴,微信公众号开发java版的,怎么获取用

微信提供了接口可以获取内容:在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)。公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。开发者可通过OpenID来获取用户基本信息。请使用https协议。我们可以看看官方的文档:获取用户的基本信息。接口调用请求说明http请求方式:GET/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN参数说明参数是否必须说明access_token是调用接口凭证openid是普通用户的标识,对当前公众号唯一lang否返回国家地区语言版本,zh_CN简体,zh_TW繁体,en英语返回说明正常情况下,微信会返回下述jsON数据包给公众号:{"subscribe":1,"openid":"o6_bmjrPTlm6_2sgVt7hMZOPfL2M","nickname":"Band","sex":1,"language":"zh_CN","city":"广州","province":"广东","country":"中国","headimgurl":"/mmopen//0","subscribe_time":1382694957,"unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL""remark":"","groupid":0}参数说明参数说明subscribe用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。openid用户的标识,对当前公众号唯一nickname用户的昵称sex用户的性别,值为1时是男性,值为2时是女性,值为0时是未知city用户所在城市country用户所在国家province用户所在省份language用户的语言,简体中文为zh_CNheadimgurl用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。subscribe_time用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间unionid只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。详见:获取用户个人信息(UnionID机制)remark公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注groupid用户所在的分组ID错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):{"errcode":40013,"errmsg":"invalidappid"}

B. 怎么抓取公众号文章

抓取公众号文章,建议还是要通过复制粘贴或者是通过软件的方式。

C. 如何抓取微信公共帐号发布的文章的阅读数和赞数

您好!很高兴能为您解答, 思路一,利用rss生成工具,将搜狗的微信搜索结果生成一个rss,然后通过rss监控这个公众号的文章是否更新。(理论上应该可行,但没试过) 思路二,自己做一个桌面浏览器,IE内核。用这个浏览器登录web微信,这个微信帐号关注你想抓取的公众号,这样就可以监控到是这些公众号是否已更新,更新后链接是什么,从而达到抓取数据的目的。(使用过,效率不高,但非常稳定) 思路三,通过修改android的微信客户端来实现(这个方法是我们曾经使用过一段时间的) 思路四,想办法越过验证直接取到链接,再通过链接取到数据。

D. 如何抓取微信所有公众号最新文章

经常有朋友需要帮忙做公众号文章爬取,这次来做一个各种方法的汇总说明。目前爬取微信公众号的方法主要有3种:

通过爬取第三方的公众号文章聚合网站

通过微信公众平台引用文章接口

通过抓包程序,分析微信app访问公众号文章的接口

通过第三方的公众号文章聚合网站爬取

微信公众号文章一直没有提供一个对外的搜索功能,直到2013年微信投资搜狗之后,搜狗搜索接入微信公众号数据,从此使用搜狗搜索就可以浏览或查询到相关公众号以及文章。域名是: https://weixin.sogou.com/

可以直接搜索公众号或者文章的关键字,一些热门的公众号更新还是很及时的,几乎做到了和微信同步。

所以,爬一些热门公众号可以使用搜狗微信的接口来做,但是一些小众公众号是搜索不到的,而且搜狗的防爬机制更新的比较勤,获取数据的接口变化的比较快,经常两三个月就有调整,导致爬虫很容易挂,这里还是建议使用 selenium爬比较省心。另外搜狗对每个ip也有访问限制,访问太频ip会被封禁24小时,需要买个ip池来做应对。还有一些其他公众号文章聚合网站(比如传送门)也都存在更新不及时或者没有收录的问题,毕竟搜狗这个亲儿子都不行。

通过微信公众平台引用文章接口

这个接口比较隐蔽而且没法匿名访问,所有得有一个公众号,建议新注册一个公众号比较好,免得被封。下面开始具体步骤:首先登录自己的微信公众号,在进去的首页选择 新建群发,然后再点击 自建图文,在文章编辑工具栏中找到 超链接,如下图:

到这里就可以输入公众号的名字,回车之后微信就会返回相匹配的公众号列表,接着点击你想抓取的公众号,就会显示具体的文章列表了,已经是按时间倒序了,最新的文章就是第一条了。

微信的分页机制比较奇怪,每个公众号的每页显示的数据条数是不一样的,分页爬的时候要处理一下。通过chrome分析网络请求的数据,我们想要的数据已经基本拿到了,文章链接、封面、发布日期、副标题等,如

由于微信公众平台登录验证比较严格,输入密码之后还必须要手机扫码确认才能登录进去,所以最好还是使用 selenium做自动化比较好。具体微信接口的分析过程我就不列了,直接贴代码了:

import re

import time

import random

import traceback

import requests

from selenium import webdriver

class Spider(object):

'''

微信公众号文章爬虫

'''

def __init__(self):

# 微信公众号账号

self.account = '[email protected]qq.com'

# 微信公众号密码

self.pwd = 'lei4649861'

def create_driver(self):

'''

初始化 webdriver

'''

options = webdriver.ChromeOptions()

# 禁用gpu加速,防止出一些未知bug

options.add_argument('–disable-gpu')

# 这里我用 chromedriver 作为 webdriver

# 可以去 http://chromedriver.chromium.org/downloads 下载你的chrome对应版本

self.driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=options)

# 设置一个隐性等待 5s

self.driver.implicitly_wait(5)

def log(self, msg):

'''

格式化打印

'''

print('—— %s ——' % msg)

def login(self):

'''

登录拿 cookies

'''

try:

self.create_driver()

# 访问微信公众平台

self.driver.get('https://mp.weixin.qq.com/')

# 等待网页加载完毕

time.sleep(3)

# 输入账号

self.driver.find_element_by_xpath("./*//input[@name='account']").clear()

self.driver.find_element_by_xpath("./*//input[@name='account']").send_keys(self.account)

# 输入密码

self.driver.find_element_by_xpath("./*//input[@name='password']").clear()

self.driver.find_element_by_xpath("./*//input[@name='password']").send_keys(self.pwd)

# 点击登录

self.driver.find_elements_by_class_name('btn_login')[0].click()

self.log("请拿手机扫码二维码登录公众号")

# 等待手机扫描

time.sleep(10)

self.log("登录成功")

# 获取cookies 然后保存到变量上,后面要用

self.cookies = dict([[x['name'], x['value']] for x in self.driver.get_cookies()])

except Exception as e:

traceback.print_exc()

finally:

# 退出 chorme

self.driver.quit()

def get_article(self, query=''):

try:

url = 'https://mp.weixin.qq.com'

# 设置headers

headers = {

"HOST": "mp.weixin.qq.com",

"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"

}

# 登录之后的微信公众号首页url变化为:https://mp.weixin.qq.com/cgi-bin/home?t=home/index&lang=zh_CN&token=1849751598,

# 从这里获取token信息

response = requests.get(url=url, cookies=self.cookies)

token = re.findall(r'token=(d+)', str(response.url))[0]

time.sleep(2)

self.log('正在查询[ %s ]相关公众号' % query)

search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'

# 搜索微信公众号接口需要传入的参数,

# 有三个变量:微信公众号token、随机数random、搜索的微信公众号名字

params = {

'action': 'search_biz',

'token': token,

'random': random.random(),

'query': query,

'lang': 'zh_CN',

'f': 'json',

'ajax': '1',

'begin': '0',

'count': '5'

}

# 打开搜索微信公众号接口地址,需要传入相关参数信息如:cookies、params、headers

response = requests.get(search_url, cookies=self.cookies, headers=headers, params=params)

time.sleep(2)

# 取搜索结果中的第一个公众号

lists = response.json().get('list')[0]

# 获取这个公众号的fakeid,后面爬取公众号文章需要此字段

fakeid = lists.get('fakeid')

nickname = lists.get('nickname')

# 微信公众号文章接口地址

search_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'

# 搜索文章需要传入几个参数:登录的公众号token、要爬取文章的公众号fakeid、随机数random

params = {

'action': 'list_ex',

'token': token,

'random': random.random(),

'fakeid': fakeid,

'lang': 'zh_CN',

'f': 'json',

'ajax': '1',

'begin': '0', # 不同页,此参数变化,变化规则为每页加5

'count': '5',

'query': '',

'type': '9'

}

self.log('正在查询公众号[ %s ]相关文章' % nickname)

# 打开搜索的微信公众号文章列表页

response = requests.get(search_url, cookies=self.cookies, headers=headers, params=params)

time.sleep(2)

for per in response.json().get('app_msg_list', []):

print('title —> %s' % per.get('title'))

print('link —> %s' % per.get('link'))

# print('cover —> %s' % per.get('cover'))

except Exception as e:

traceback.print_exc()

if __name__ == '__main__':

spider = Spider()

spider.login()

spider.get_article('python')

代码只是作为学习使用,没有做分页查询之类。实测过接口存在访问频次限制,一天几百次还是没啥问题,太快或者太多次访问就会被封24小时。

E. 如何用java获取微信文章搜索内容

微信提供了接口可以获取内容:在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)。公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。开发者可通过OpenID来获取用户基本信息。请使用https协议。我们可以看看官方的文档: 获取用户的基本信息 。接口调用请求说明http请求方式: GEThttps://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN参数说明参数是否必须说明access_token 是 调用接口凭证 openid 是 普通用户的标识,对当前公众号唯一 lang 否 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语 返回说明正常情况下,微信会返回下述JSON数据包给公众号:{ "subscribe": 1, "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M", "nickname": "Band", "sex": 1, "language": "zh_CN", "city": "广州", "province": "广东", "country": "中国", "headimgurl": "http://wx.qlogo.cn/mmopen//0", "subscribe_time": 1382694957, "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL" "remark": "", "groupid": 0}参数说明参数说明subscribe 用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。 openid 用户的标识,对当前公众号唯一 nickname 用户的昵称 sex 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知 city 用户所在城市 country 用户所在国家 province 用户所在省份 language 用户的语言,简体中文为zh_CN headimgurl 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。 subscribe_time 用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间 unionid 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。详见:获取用户个人信息(UnionID机制) remark 公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注 groupid 用户所在的分组ID 错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):{"errcode":40013,"errmsg":"invalid appid"}

F. 微信公众号的内容怎么抓取

这个简单,有一款名为“印象笔记”的软件,桌面版和移动版都可以下载安装注册。公众号里也有个名为“我的印象笔记”的公众号,遇到喜欢的文章直接转发给这个公众号,内容就保存在印象笔记里了。浏览器端我所知道的就是firefox里有个印象笔记剪藏插件,可以保存网页上的文章图片网址等等。

G. 如何根据微信公众号采集文章

我建议你使用爱上极客的微信采集工具,挺好用的,而且提供api,还有wordpress插件

H. 请教个问题 如何根据微信公众号抓取该公众号下的所有文章 有没有办法实现

思路一,利用rss生成工具,将搜狗的微信搜索结果生成一个rss,然后通过rss监控这个公众号的文章是否更新。(理论上应该可行,但没试过)思路二,自己做一个桌面浏览器,IE内核。用这个浏览器登录web微信,这个微信帐号关注你想抓取的公众号,这样就可以监控到是这些公众号是否已更新,更新后链接是什么,从而达到抓取数据的目的。(使用过,效率不高,但非常稳定)思路三,通过修改android的微信客户端来实现(这个方法是我们曾经使用过一段时间的)思路四,想办法越过验证直接取到链接,再通过链接取到数据。最后,使用别人开发的抓取工具

I. 如何利用爬虫爬微信公众号的内容

过程很繁琐,步骤如下:

1、写按键精灵脚本,在手机上自动点击公号文章列表页,也就是“查看历史消息”;

2、使用fiddler代理劫持手机端的访问,将网址转发到本地用php写的网页;

3、在php网页上将接收到的网址备份到数据库;

4、用python从数据库取出网址,然后进行正常的爬取。

如果只是想爬取文章内容,似乎并没有访问频率限制,但如果想抓取阅读数、点赞数,超过一定频率后,返回就会变为空值,我设定的时间间隔为10秒,可以正常抓取,这种频率下,一个小时只能抓取360条,已经没什么实际意义了。

微信公众号数据储存

1、腾讯不对你在本服务中相关数据的删除或储存失败负责。

2、腾讯有权根据实际情况自行决定单个用户在本服务中数据的最长储存期限,并在服务器上为其分配数据最大存储空间等。你可根据自己的需要自行备份本服务中的相关数据。

3、如果你停止使用本服务或服务被终止或取消,腾讯可以从服务器上永久地删除你的数据。服务停止、终止或取消后,腾讯没有义务向你返还任何数据。

J. 想写一个小应用,通过关键词抓取指定几个微信公众账号发布文章内容,应该如何实现

你这个专业点的叫法就是采集几个公众号的文章。

通过搜狗浏览器搜索到微信的文章。

这样就可以展现指定的文章。

然后把这些文章采集到网站上面就可以了。

至于发布公众号,这要写接口,我个我就不会了。