
querylist采集微信公众号文章
querylist采集微信公众号文章(querylist采集微信公众号文章实现了关键词过滤及数据接口定制)
采集交流 • 优采云 发表了文章 • 0 个评论 • 137 次浏览 • 2021-09-13 15:02
querylist采集微信公众号文章,实现了每篇文章的单篇信息收集,并实现了相应的关键词过滤及数据接口定制。-middleware实现上述功能,其实非常简单,就是通过js包装相应的js,在微信公众号进行引入就可以做到了。另外,enjoyglobaljsresolve,这个是数据上传器。
会有一个优化空间可以让正常人(如我)也可以公众号转码大海捞针,但是只是很小一部分,因为微信方面根本没有对公众号做跨站请求的格式化。
我来解释一下使用爬虫抓取是不是会破坏原有用户关注的时间线规律,作为一个小白,我认为不会。首先应该没有爬虫什么时候回去爬这个“答案列表”,也就是能不能找到所有未被编辑的答案。微信这一点上是有点欠考虑的,因为我觉得如果数据传输得太大了,这对微信是一种隐患,因为这让它变得复杂而冗长,而且都是僵尸粉,就不要费那事了,最后一天的关注也会干扰微信阅读。
正常来说,整个原生浏览器的chrome或ie访问时间轴是按照推送最早时间来的,这样的话我们抓取正常用户关注人的话得在100秒内进行采集,但是这也有个小bug,我们大胆假设,如果微信是推送下午时间线的话就会麻烦的多,因为上午大部分人已经不看了。但是我用过一个同学的一个神奇插件,可以清除本地的缓存,这样就可以大大减少那些僵尸粉了,当然清除缓存本身肯定有问题的,就会造成页面被篡改,最后导致爬虫被屏蔽。
爬虫其实对用户来说是不是很麻烦,个人认为不是,各位大神可以借鉴一下:我用的插件是github-hi5881166/vczh:vczh.io现在觉得爬虫的整个思想和原理一样,只不过用js编写而已。有机会写一写爬虫,顺便写一下完整的采集方案,欢迎关注!。 查看全部
querylist采集微信公众号文章(querylist采集微信公众号文章实现了关键词过滤及数据接口定制)
querylist采集微信公众号文章,实现了每篇文章的单篇信息收集,并实现了相应的关键词过滤及数据接口定制。-middleware实现上述功能,其实非常简单,就是通过js包装相应的js,在微信公众号进行引入就可以做到了。另外,enjoyglobaljsresolve,这个是数据上传器。
会有一个优化空间可以让正常人(如我)也可以公众号转码大海捞针,但是只是很小一部分,因为微信方面根本没有对公众号做跨站请求的格式化。
我来解释一下使用爬虫抓取是不是会破坏原有用户关注的时间线规律,作为一个小白,我认为不会。首先应该没有爬虫什么时候回去爬这个“答案列表”,也就是能不能找到所有未被编辑的答案。微信这一点上是有点欠考虑的,因为我觉得如果数据传输得太大了,这对微信是一种隐患,因为这让它变得复杂而冗长,而且都是僵尸粉,就不要费那事了,最后一天的关注也会干扰微信阅读。
正常来说,整个原生浏览器的chrome或ie访问时间轴是按照推送最早时间来的,这样的话我们抓取正常用户关注人的话得在100秒内进行采集,但是这也有个小bug,我们大胆假设,如果微信是推送下午时间线的话就会麻烦的多,因为上午大部分人已经不看了。但是我用过一个同学的一个神奇插件,可以清除本地的缓存,这样就可以大大减少那些僵尸粉了,当然清除缓存本身肯定有问题的,就会造成页面被篡改,最后导致爬虫被屏蔽。
爬虫其实对用户来说是不是很麻烦,个人认为不是,各位大神可以借鉴一下:我用的插件是github-hi5881166/vczh:vczh.io现在觉得爬虫的整个思想和原理一样,只不过用js编写而已。有机会写一写爬虫,顺便写一下完整的采集方案,欢迎关注!。
querylist采集微信公众号文章(工具Python3+版本Fiddler下载地址(图)下载)
采集交流 • 优采云 发表了文章 • 0 个评论 • 146 次浏览 • 2021-09-11 08:14
代码测试有效期至2019/03/08
微信爬虫步骤:
必需品:
我的微信公众号Fiddler抓包工具Python 3+版
提琴手下载链接
HTTP 代理工具也称为抓包工具。主流的抓包工具是Windows平台的Fiddler,macOS平台的Charles,阿里开源了一个叫AnyProxy的工具。它们的基本原理类似,即通过在移动客户端上设置代理IP和端口,所有来自客户端的HTTP和HTTPS请求都会通过代理工具。在代理工具中,您可以清楚地看到每个请求。然后可以分析详细信息以找出每个请求的构造方式。搞清楚这些之后,我们就可以用Python来模拟发起请求了,然后就可以得到我们想要的数据了。
安装包超过4M。配置前,首先确保您的手机和电脑在同一个局域网内。如果不在同一个局域网内,可以购买便携式WiFi,在电脑上搭建一个极简的无线路由器。一路点击下一步,完成安装过程。
Fiddler 配置选择工具> Fiddler 选项> 连接 Fiddler 的默认端口为8888,如果该端口已经被其他程序占用,需要手动更改,勾选允许远程计算机连接,其他选项即可。 , 配置更新后记得重启Fiddler。一定要重启Fiddler,否则代理将失效。 .接下来需要配置手机,但是这里微信有pc客户端,所以不需要配置手机
现在打开微信,随机选择一个公众号,进入公众号的【查看历史信息】
同时观察 Fiddler 的主面板。当微信从公众号介绍页面进入历史消息页面时,已经可以在Fiddler上看到请求进来了。这些请求是微信APP向服务器发送的请求。现在简单介绍一下这个请求面板上各个模块的含义。
我将上面的主面板分成了 7 个块。需要了解每个区块的内容,然后才可以使用Python代码模拟微信请求。 1、服务器响应结果,200表示服务器成功响应了2、请求协议,微信请求协议是基于HTTPS的,所以之前一定要配置好,否则看不到HTTPS请求。 3、微信服务器主机名4、请求路径5、请求行,包括请求方法(GET)、请求协议(HTTP/1.1)、请求路径(/mp/profile_ext...)一长串参数)6、收录cookie信息的请求头。7、微信服务器返回的响应数据,我们切换到TextView和WebView看看返回的数据是什么样子的。
TextView模式下的预览效果为服务器返回的HTML源代码
WebView 模式是 HTML 代码的渲染效果。其实就是我们在手机微信上看到的效果,但是因为风格欠缺,没有看到手机上的美化效果。
如果服务器返回的是Json格式或者XML,也可以切换到对应的页面进行预览查看。
开始抓取:
1、拥有微信公众号
登录微信公众号,在菜单栏:素材管理—>新建素材,出现如下页面
F12查看网络,点击图中位置
公众号和user-Agent的cookies如下
Fakeid和token获取如下: 查看全部
querylist采集微信公众号文章(工具Python3+版本Fiddler下载地址(图)下载)
代码测试有效期至2019/03/08
微信爬虫步骤:
必需品:
我的微信公众号Fiddler抓包工具Python 3+版
提琴手下载链接
HTTP 代理工具也称为抓包工具。主流的抓包工具是Windows平台的Fiddler,macOS平台的Charles,阿里开源了一个叫AnyProxy的工具。它们的基本原理类似,即通过在移动客户端上设置代理IP和端口,所有来自客户端的HTTP和HTTPS请求都会通过代理工具。在代理工具中,您可以清楚地看到每个请求。然后可以分析详细信息以找出每个请求的构造方式。搞清楚这些之后,我们就可以用Python来模拟发起请求了,然后就可以得到我们想要的数据了。
安装包超过4M。配置前,首先确保您的手机和电脑在同一个局域网内。如果不在同一个局域网内,可以购买便携式WiFi,在电脑上搭建一个极简的无线路由器。一路点击下一步,完成安装过程。
Fiddler 配置选择工具> Fiddler 选项> 连接 Fiddler 的默认端口为8888,如果该端口已经被其他程序占用,需要手动更改,勾选允许远程计算机连接,其他选项即可。 , 配置更新后记得重启Fiddler。一定要重启Fiddler,否则代理将失效。 .接下来需要配置手机,但是这里微信有pc客户端,所以不需要配置手机
现在打开微信,随机选择一个公众号,进入公众号的【查看历史信息】
同时观察 Fiddler 的主面板。当微信从公众号介绍页面进入历史消息页面时,已经可以在Fiddler上看到请求进来了。这些请求是微信APP向服务器发送的请求。现在简单介绍一下这个请求面板上各个模块的含义。

我将上面的主面板分成了 7 个块。需要了解每个区块的内容,然后才可以使用Python代码模拟微信请求。 1、服务器响应结果,200表示服务器成功响应了2、请求协议,微信请求协议是基于HTTPS的,所以之前一定要配置好,否则看不到HTTPS请求。 3、微信服务器主机名4、请求路径5、请求行,包括请求方法(GET)、请求协议(HTTP/1.1)、请求路径(/mp/profile_ext...)一长串参数)6、收录cookie信息的请求头。7、微信服务器返回的响应数据,我们切换到TextView和WebView看看返回的数据是什么样子的。
TextView模式下的预览效果为服务器返回的HTML源代码

WebView 模式是 HTML 代码的渲染效果。其实就是我们在手机微信上看到的效果,但是因为风格欠缺,没有看到手机上的美化效果。

如果服务器返回的是Json格式或者XML,也可以切换到对应的页面进行预览查看。
开始抓取:
1、拥有微信公众号
登录微信公众号,在菜单栏:素材管理—>新建素材,出现如下页面

F12查看网络,点击图中位置

公众号和user-Agent的cookies如下

Fakeid和token获取如下:
querylist采集微信公众号文章(puppeteer实战:爬取搜狗微信搜索的公众号文章并写入Excel )
采集交流 • 优采云 发表了文章 • 0 个评论 • 351 次浏览 • 2021-09-11 08:12
)
在上一本书中提到,使用puppeteer库进行截图操作只是简单的展示了puppeteer的特性和基本用法。这次我们来谈谈使用puppeteer抓取页面数据并写入Excel。
Puppeteer实战:抓取搜狗微信搜索到的公众号文章,写入Excel
背景一:搜狗搜索现在有了根据关键词查询微信公众号文章的功能,而我们要做的就是爬下指定关键词的文章,因为这个需求来自我 来自公司业务部,所以为了方便同学们操作查看,还需要把爬取的数据放到Excel中。
用过之后,感觉这个东西并不复杂,只要懂API就行。我认为复杂的是需要考虑各种基本情况。
首先一般网站已经进行了防爬处理。我们需要以合理的方式绕过它。比如搜狗搜索就是。一开始,我打算读取a标签的href属性,然后直接在浏览器中打开链接。但是在尝试之后,我发现我能够做到这一点。估计搜狗做了一些反爬行动。这样做将报告 IP 异常。所以我放弃了,使用puppeteer的page.click方法来解决这个问题,因为puppeteer本质上是通过模拟真实用户的点击操作来实现的,所以不会受到反爬机制的影响。
另外一个是因为爬虫是微信文章,我们还需要考虑微信文章本身的一些情况,比如文章被发布者删除或移动,文章被举报,或者这个文章时分享另一篇文章文章Wait...
总之,我觉得用puppeteer写的爬虫脚本跟业务是强耦合的,所以我个人觉得代码本身没有参考意义。不过还是可以看看自己在写过程中遇到的各种奇怪的问题,或许可以为大家解决遇到的问题提供一些思路。
完整代码如下:
exportExcel 导出 Excel:
const fs = require("fs");
const xlsx = require("node-xlsx");
module.exports = {
async exportExcel(fileName, data) {
let dataArr = [];
let title = ["文章标题", "文章URL", "作者名(公众号)", "发布日期", "内容"];
dataArr.push(title);
data.forEach(curr => {
dataArr.push([
curr.title,
curr.url,
curr.account,
curr.publishTime,
curr.content
]);
});
const options = {
"!cols": [
{ wch: 70 },
{ wch: 100 },
{ wch: 30 },
{ wch: 30 },
{ wch: 200 }
]
};
// 写xlsx
var buffer = await xlsx.build(
[
{
name: "sheet1",
data: dataArr
}
],
options
);
await fs.writeFile(`./dist/data1【${fileName}】.xlsx`, buffer, function(
err
) {
if (err) throw err;
console.log("写入成功!");
});
}
}; 查看全部
querylist采集微信公众号文章(puppeteer实战:爬取搜狗微信搜索的公众号文章并写入Excel
)
在上一本书中提到,使用puppeteer库进行截图操作只是简单的展示了puppeteer的特性和基本用法。这次我们来谈谈使用puppeteer抓取页面数据并写入Excel。
Puppeteer实战:抓取搜狗微信搜索到的公众号文章,写入Excel
背景一:搜狗搜索现在有了根据关键词查询微信公众号文章的功能,而我们要做的就是爬下指定关键词的文章,因为这个需求来自我 来自公司业务部,所以为了方便同学们操作查看,还需要把爬取的数据放到Excel中。
用过之后,感觉这个东西并不复杂,只要懂API就行。我认为复杂的是需要考虑各种基本情况。
首先一般网站已经进行了防爬处理。我们需要以合理的方式绕过它。比如搜狗搜索就是。一开始,我打算读取a标签的href属性,然后直接在浏览器中打开链接。但是在尝试之后,我发现我能够做到这一点。估计搜狗做了一些反爬行动。这样做将报告 IP 异常。所以我放弃了,使用puppeteer的page.click方法来解决这个问题,因为puppeteer本质上是通过模拟真实用户的点击操作来实现的,所以不会受到反爬机制的影响。
另外一个是因为爬虫是微信文章,我们还需要考虑微信文章本身的一些情况,比如文章被发布者删除或移动,文章被举报,或者这个文章时分享另一篇文章文章Wait...
总之,我觉得用puppeteer写的爬虫脚本跟业务是强耦合的,所以我个人觉得代码本身没有参考意义。不过还是可以看看自己在写过程中遇到的各种奇怪的问题,或许可以为大家解决遇到的问题提供一些思路。
完整代码如下:
exportExcel 导出 Excel:
const fs = require("fs");
const xlsx = require("node-xlsx");
module.exports = {
async exportExcel(fileName, data) {
let dataArr = [];
let title = ["文章标题", "文章URL", "作者名(公众号)", "发布日期", "内容"];
dataArr.push(title);
data.forEach(curr => {
dataArr.push([
curr.title,
curr.url,
curr.account,
curr.publishTime,
curr.content
]);
});
const options = {
"!cols": [
{ wch: 70 },
{ wch: 100 },
{ wch: 30 },
{ wch: 30 },
{ wch: 200 }
]
};
// 写xlsx
var buffer = await xlsx.build(
[
{
name: "sheet1",
data: dataArr
}
],
options
);
await fs.writeFile(`./dist/data1【${fileName}】.xlsx`, buffer, function(
err
) {
if (err) throw err;
console.log("写入成功!");
});
}
};
querylist采集微信公众号文章(如何抓取微信公众号的所有文章 )
采集交流 • 优采云 发表了文章 • 0 个评论 • 340 次浏览 • 2021-09-07 17:59
)
准备阶段
为了实现这个爬虫,我们需要使用以下工具
另外,这个爬虫程序使用了微信公众号后台编辑素材接口。原理是当我们插入超链接时,微信会调用一个特殊的API(见下图)来获取指定公众号的文章列表。因此,我们还需要有一个官方帐号。
图1
正式开始
我们需要登录微信公众号,点击素材管理,点击新建图文消息,然后点击上面的超链接。
图2
接下来,按 F12,打开 Chrome 的开发者工具,然后选择网络
图3
此时,在之前的超链接界面,点击“选择其他公众号”,输入你需要抓取的公众号(例如中国移动)
图4
这时候之前的Network会刷新一些链接,其中“appmsg”开头的内容就是我们需要分析的
图5
我们解析请求的 URL
https://mp.weixin.qq.com/cgi-b ... x%3D1
分为三个部分
通过不断浏览下一页,我们发现每次只有begin会改变,每次增加5,这就是count的值。
接下来我们使用Python获取同样的资源,但是直接运行下面的代码是无法获取资源的。
import requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {'base_resp': {'ret': 200003, 'err_msg': 'invalid session'}}
之所以能在浏览器上获取资源,是因为我们登录了微信公众号后台。而Python没有我们的登录信息,所以请求无效。我们需要在requests中设置headers参数,并传入Cookie和User-Agent来模拟登录
由于头信息的内容每次都会变化,所以我把这些内容放在一个单独的文件中,即“wechat.yaml”,信息如下
cookie: ua_id=wuzWM9FKE14...
user_agent: Mozilla/5.0...
你只需要稍后阅读
# 读取cookie和user_agent
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config['cookie'],
"User-Agent": config['user_agent']
}
requests.get(url, headers=headers, verify=False).json()
在返回的JSON中,我们可以看到每个文章的标题(title)、摘要(digest)、链接(link)、推送时间(update_time)和封面地址(cover)。
appmsgid 是每条推文的唯一标识符,aid 是每条推文的唯一标识符。
图6
其实除了cookies,URL中的token参数也会用来限制爬虫,所以上面代码的输出很可能是{'base_resp': {'ret': 200040,'err_msg ':'无效的 csrf 令牌'}}
接下来,我们编写一个循环来获取所有文章 JSON 并保存。
import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config['cookie'],
"User-Agent": config['user_agent']
}
# 请求参数
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config['fakeid'],
"type": "9",
"token": config['token'],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放结果
app_msg_list = []
# 在不知道公众号有多少文章的情况下,使用while语句
# 也方便重新运行时设置页数
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 随机暂停几秒,避免过快的请求导致过快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()['base_resp']['ret'] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
break
# 如果返回的内容中为空则结束
if len(resp.json()['app_msg_list']) == 0:
print("all ariticle parsed")
break
app_msg_list.append(resp.json())
# 翻页
i += 1
在上面的代码中,我还在“wechat.yaml”文件中存储了fakeid和token。这是因为 fakeid 是每个公众号的唯一标识符,令牌会经常变化。这个信息可以通过解析URL获取,也可以在开发者工具中查看
图7
爬取一段时间后,会遇到以下问题
{'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
此时在公众号后台尝试插入超链接时,会遇到如下提示
图8
这是公众号的流量限制,通常需要等待30-60分钟才能继续。为了完美处理这个问题,你可能需要申请多个公众号,可能需要对抗微信公众号登录系统,或者你可能需要设置代理池。
但是我不需要工业级的爬虫,我只想爬取自己的公众号信息,所以等了一个小时,再次登录公众号,获取cookie和token,运行。我不想用自己的兴趣挑战别人的工作。
最后,将结果保存为 JSON 格式。
# 保存结果为JSON
json_name = "mp_data_{}.json".format(str(begin))
with open(json_name, "w") as file:
file.write(json.dumps(app_msg_list, indent=2, ensure_ascii=False))
或者提取文章identifier、标题、网址、发布时间四列,保存为CSV。
info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list)) 查看全部
querylist采集微信公众号文章(如何抓取微信公众号的所有文章
)
准备阶段
为了实现这个爬虫,我们需要使用以下工具
另外,这个爬虫程序使用了微信公众号后台编辑素材接口。原理是当我们插入超链接时,微信会调用一个特殊的API(见下图)来获取指定公众号的文章列表。因此,我们还需要有一个官方帐号。
图1
正式开始
我们需要登录微信公众号,点击素材管理,点击新建图文消息,然后点击上面的超链接。
图2
接下来,按 F12,打开 Chrome 的开发者工具,然后选择网络
图3
此时,在之前的超链接界面,点击“选择其他公众号”,输入你需要抓取的公众号(例如中国移动)
图4
这时候之前的Network会刷新一些链接,其中“appmsg”开头的内容就是我们需要分析的
图5
我们解析请求的 URL
https://mp.weixin.qq.com/cgi-b ... x%3D1
分为三个部分
通过不断浏览下一页,我们发现每次只有begin会改变,每次增加5,这就是count的值。
接下来我们使用Python获取同样的资源,但是直接运行下面的代码是无法获取资源的。
import requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {'base_resp': {'ret': 200003, 'err_msg': 'invalid session'}}
之所以能在浏览器上获取资源,是因为我们登录了微信公众号后台。而Python没有我们的登录信息,所以请求无效。我们需要在requests中设置headers参数,并传入Cookie和User-Agent来模拟登录
由于头信息的内容每次都会变化,所以我把这些内容放在一个单独的文件中,即“wechat.yaml”,信息如下
cookie: ua_id=wuzWM9FKE14...
user_agent: Mozilla/5.0...
你只需要稍后阅读
# 读取cookie和user_agent
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config['cookie'],
"User-Agent": config['user_agent']
}
requests.get(url, headers=headers, verify=False).json()
在返回的JSON中,我们可以看到每个文章的标题(title)、摘要(digest)、链接(link)、推送时间(update_time)和封面地址(cover)。
appmsgid 是每条推文的唯一标识符,aid 是每条推文的唯一标识符。
图6
其实除了cookies,URL中的token参数也会用来限制爬虫,所以上面代码的输出很可能是{'base_resp': {'ret': 200040,'err_msg ':'无效的 csrf 令牌'}}
接下来,我们编写一个循环来获取所有文章 JSON 并保存。
import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config['cookie'],
"User-Agent": config['user_agent']
}
# 请求参数
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config['fakeid'],
"type": "9",
"token": config['token'],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放结果
app_msg_list = []
# 在不知道公众号有多少文章的情况下,使用while语句
# 也方便重新运行时设置页数
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 随机暂停几秒,避免过快的请求导致过快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()['base_resp']['ret'] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
break
# 如果返回的内容中为空则结束
if len(resp.json()['app_msg_list']) == 0:
print("all ariticle parsed")
break
app_msg_list.append(resp.json())
# 翻页
i += 1
在上面的代码中,我还在“wechat.yaml”文件中存储了fakeid和token。这是因为 fakeid 是每个公众号的唯一标识符,令牌会经常变化。这个信息可以通过解析URL获取,也可以在开发者工具中查看
图7
爬取一段时间后,会遇到以下问题
{'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
此时在公众号后台尝试插入超链接时,会遇到如下提示
图8
这是公众号的流量限制,通常需要等待30-60分钟才能继续。为了完美处理这个问题,你可能需要申请多个公众号,可能需要对抗微信公众号登录系统,或者你可能需要设置代理池。
但是我不需要工业级的爬虫,我只想爬取自己的公众号信息,所以等了一个小时,再次登录公众号,获取cookie和token,运行。我不想用自己的兴趣挑战别人的工作。
最后,将结果保存为 JSON 格式。
# 保存结果为JSON
json_name = "mp_data_{}.json".format(str(begin))
with open(json_name, "w") as file:
file.write(json.dumps(app_msg_list, indent=2, ensure_ascii=False))
或者提取文章identifier、标题、网址、发布时间四列,保存为CSV。
info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list))
querylist采集微信公众号文章( IOP出版社与Charlesworth集团合作成功研发“文章追踪”功能 )
采集交流 • 优采云 发表了文章 • 0 个评论 • 208 次浏览 • 2021-09-07 02:17
IOP出版社与Charlesworth集团合作成功研发“文章追踪”功能
)
IOP Publishing 微信公众号新推出“文章tracking”功能
2020 年 11 月 27 日加布里埃尔
此处提供此页面的英文版本
近期,IOP Publishing与Charlesworth Group合作,成功将Charlesworth自主研发的微信产品——“文章tracking”功能纳入“IOP Publishing”微信公众号功能菜单。现在,所有向IOP Press期刊投稿的中国作者都可以通过微信使用公众号“文章tracking”功能,实时查看文章投稿状态。以前,作者只能登录IOP Science网站查看文章状态。
通过Charlesworth Group提供的技术支持,来自中国的作者可以在公众号提交文章ID,立即获得文章的状态信息。使用微信追踪文章大大降低了中国用户在国外访问网站时可能遇到的速度和连接问题。同时,将“文章tracking”功能纳入微信,大大提升了中国作者社区的用户体验,助力“IOP出版社”公众号成为中国作者获取信息的重要平台和服务。
“文章tracking”功能的网关由 Charlesworth Group 开发。该技术获得了 2020 年出版业 ALPSP 创新奖的提名。可以将发布者自己的平台和后台系统集成到微信中,并提供营销工具和分析仪表盘,让发布者可以管理其微信公众号的方方面面。
查尔斯沃思集团首席执行官迈克尔·埃文斯表示:“IOP Publishing 在中国拥有广泛的客户群。通过与查尔斯沃思集团合作开发该技术解决方案,作者可以从“IOP Publishing”的微信公众号获取信息。更多服务。通过整合‘文章tracking’,IOP Press的中国作者可以获得更好的用户体验,并与其他已添加此功能的出版商一起在公众号中享受微信查看文章方便快捷状态。”
操作指南第一步
查看全部
querylist采集微信公众号文章(
IOP出版社与Charlesworth集团合作成功研发“文章追踪”功能
)
IOP Publishing 微信公众号新推出“文章tracking”功能
2020 年 11 月 27 日加布里埃尔

此处提供此页面的英文版本
近期,IOP Publishing与Charlesworth Group合作,成功将Charlesworth自主研发的微信产品——“文章tracking”功能纳入“IOP Publishing”微信公众号功能菜单。现在,所有向IOP Press期刊投稿的中国作者都可以通过微信使用公众号“文章tracking”功能,实时查看文章投稿状态。以前,作者只能登录IOP Science网站查看文章状态。
通过Charlesworth Group提供的技术支持,来自中国的作者可以在公众号提交文章ID,立即获得文章的状态信息。使用微信追踪文章大大降低了中国用户在国外访问网站时可能遇到的速度和连接问题。同时,将“文章tracking”功能纳入微信,大大提升了中国作者社区的用户体验,助力“IOP出版社”公众号成为中国作者获取信息的重要平台和服务。
“文章tracking”功能的网关由 Charlesworth Group 开发。该技术获得了 2020 年出版业 ALPSP 创新奖的提名。可以将发布者自己的平台和后台系统集成到微信中,并提供营销工具和分析仪表盘,让发布者可以管理其微信公众号的方方面面。
查尔斯沃思集团首席执行官迈克尔·埃文斯表示:“IOP Publishing 在中国拥有广泛的客户群。通过与查尔斯沃思集团合作开发该技术解决方案,作者可以从“IOP Publishing”的微信公众号获取信息。更多服务。通过整合‘文章tracking’,IOP Press的中国作者可以获得更好的用户体验,并与其他已添加此功能的出版商一起在公众号中享受微信查看文章方便快捷状态。”
操作指南第一步

querylist采集微信公众号文章(搜狗微信中会怎么样?小编讲解思路及讲解方法)
采集交流 • 优采云 发表了文章 • 0 个评论 • 196 次浏览 • 2021-09-07 02:12
这个文章主要介绍python如何抓取搜狗微信公众号文章永久链接。小编觉得还不错。现在分享给大家,给大家参考。跟着小编一起来看看吧。
本文主要讲解思路,代码部分请自行解决
获取搜狗微信当天信息排名
指定输入关键字,通过scrapy抓取公众号
登录微信公众号链接获取cookie信息
由于微信公众平台模拟登录未解决,需要手动登录实时获取cookie信息
固定链接可以在这里转换
代码部分
def parse(self, response):
item = SougouItem()
item["title"] = response.xpath('//title/text()').extract_first()
print("**"*5, item["title"],"**"*5)
name = input("----------请输入需要搜索的信息:")
print(name)
url = "http://weixin.sogou.com/weixin ... ot%3B
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name":name})
搜狗微信访问频率会过快导致需要输入验证码
def parse_two(self, response):
print(response.url)
name = response.meta["name"]
resp = response.xpath('//ul[@class="news-list"]/li')
s = 1
# 判断url 是否是需要输入验证码
res = re.search("from", response.url) # 需要验证码验证
if res:
print(response.url)
img = response.xpath('//img/@src').extract()
print(img)
url_img = "http://weixin.sogou.com/antispider/"+ img[1]
print(url_img)
url_img = requests.get(url_img).content with open("urli.jpg", "wb") as f:
f.write(url_img) # f.close()
img = input("请输入验证码:")
print(img)
url = response.url
r = re.search(r"from=(.*)",url).group(1)
print(r)
postData = {"c":img,"r":r,"v":"5"}
url = "http://weixin.sogou.com/antispider/thank.php"
yield scrapy.FormRequest(url=url, formdata=postData, callback=self.parse_two,meta={"name":name})
# 不需要验证码验证
else:
for res, i in zip(resp, range(1, 10)):
item = SougouItem()
item["url"] = res.xpath('.//p[1]/a/@href').extract_first()
item["name"] = name
print("第%d条" % i) # 转化永久链接
headers = {"Host": "mp.weixin.qq.com",
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cookie": "noticeLoginFlag=1; pgv_pvi=5269297152; pt2gguin=o1349184918; RK=ph4smy/QWu; ptcz=f3eb6ede5db921d0ada7f1713e6d1ca516d200fec57d602e677245490fcb7f1e; pgv_pvid=1033302674; o_cookie=1349184918; pac_uid=1_1349184918; ua_id=4nooSvHNkTOjpIpgAAAAAFX9OSNcLApfsluzwfClLW8=; mm_lang=zh_CN; noticeLoginFlag=1; remember_acct=Liangkai318; rewardsn=; wxtokenkey=777; pgv_si=s1944231936; uuid=700c40c965347f0925a8e8fdcc1e003e; ticket=023fc8861356b01527983c2c4765ef80903bf3d7; ticket_id=gh_6923d82780e4; cert=L_cE4aRdaZeDnzao3xEbMkcP3Kwuejoi; data_bizuin=3075391054; bizuin=3208078327; data_ticket=XrzOnrV9Odc80hJLtk8vFjTLI1vd7kfKJ9u+DzvaeeHxZkMXbv9kcWk/Pmqx/9g7; slave_sid=SWRKNmFyZ1NkM002Rk9NR0RRVGY5VFdMd1lXSkExWGtPcWJaREkzQ1BESEcyQkNLVlQ3YnB4OFNoNmtRZzdFdGpnVGlHak9LMjJ5eXBNVEgxZDlZb1BZMnlfN1hKdnJsV0NKallsQW91Zjk5Y3prVjlQRDNGYUdGUWNFNEd6eTRYT1FSOEQxT0MwR01Ja0Vo; slave_user=gh_6923d82780e4; xid=7b2245140217dbb3c5c0a552d46b9664; openid2ticket_oTr5Ot_B4nrDSj14zUxlXg8yrzws=D/B6//xK73BoO+mKE2EAjdcgIXNPw/b5PEDTDWM6t+4="}
respon = requests.get(url=item["url"]).content
gongzhongh = etree.HTML(respon).xpath('//a[@id="post-user"]/text()')[0]
# times = etree.HTML(respon).xpath('//*[@id="post-date"]/text()')[0]
title_one = etree.HTML(respon).xpath('//*[@id="activity-name"]/text()')[0].split()[0]
print(gongzhongh, title_one)
item["tit"] = title_one
item["gongzhongh"] = gongzhongh
# item["times"] = times
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + gongzhongh + "&begin=0&count=5"
# wenzhang_url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
resp = requests.get(url=url, headers=headers).content
print(resp)
faskeids = json.loads(resp.decode("utf-8"))
try:
list_fask = faskeids["list"] except Exception as f:
print("**********[INFO]:请求失败,登陆失败, 请重新登陆*************")
return
for fask in list_fask:
fakeid = fask["fakeid"]
nickname = fask["nickname"] if nickname == item["gongzhongh"]:
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + fakeid + "&type=9"
# url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] +"&fakeid=" + fakeid +"&type=9"
resp = requests.get(url=url, headers=headers).content
app = json.loads(resp.decode("utf-8"))["app_msg_list"]
item["aid"] = app["aid"]
item["appmsgid"] = app["appmsgid"]
item["cover"] = app["cover"]
item["digest"] = app["digest"]
item["url_link"] = app["link"]
item["tit"] = app["title"]
print(item)
time.sleep(10) # time.sleep(5)
# dict_wengzhang = json.loads(resp.decode("utf-8"))
# app_msg_list = dict_wengzhang["app_msg_list"]
# print(len(app_msg_list))
# for app in app_msg_list:
# print(app)
# title = app["title"]
# if title == item["tit"]:
# item["url_link"] = app["link"]
# updata_time = app["update_time"]
# item["times"] = time.strftime("%Y-%m-%d %H:%M:%S", updata_time)
# print("最终链接为:", item["url_link"])
# yield item
# else:
# print(app["title"], item["tit"])
# print("与所选文章不同放弃")
# # item["tit"] = app["title"]
# # item["url_link"] = app["link"]
# # yield item
# else:
# print(nickname, item["gongzhongh"])
# print("与所选公众号不一致放弃")
# time.sleep(100)
# yield item
if response.xpath('//a[@class="np"]'):
s += 1
url = "http://weixin.sogou.com/weixin ... 2Bstr(s) # time.sleep(3)
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name": name})
以上是python如何抓取搜狗微信公众号文章permanent链接的详细内容。更多详情请关注Gxl其他相关文章! 查看全部
querylist采集微信公众号文章(搜狗微信中会怎么样?小编讲解思路及讲解方法)
这个文章主要介绍python如何抓取搜狗微信公众号文章永久链接。小编觉得还不错。现在分享给大家,给大家参考。跟着小编一起来看看吧。
本文主要讲解思路,代码部分请自行解决
获取搜狗微信当天信息排名
指定输入关键字,通过scrapy抓取公众号
登录微信公众号链接获取cookie信息
由于微信公众平台模拟登录未解决,需要手动登录实时获取cookie信息




固定链接可以在这里转换
代码部分
def parse(self, response):
item = SougouItem()
item["title"] = response.xpath('//title/text()').extract_first()
print("**"*5, item["title"],"**"*5)
name = input("----------请输入需要搜索的信息:")
print(name)
url = "http://weixin.sogou.com/weixin ... ot%3B
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name":name})
搜狗微信访问频率会过快导致需要输入验证码
def parse_two(self, response):
print(response.url)
name = response.meta["name"]
resp = response.xpath('//ul[@class="news-list"]/li')
s = 1
# 判断url 是否是需要输入验证码
res = re.search("from", response.url) # 需要验证码验证
if res:
print(response.url)
img = response.xpath('//img/@src').extract()
print(img)
url_img = "http://weixin.sogou.com/antispider/"+ img[1]
print(url_img)
url_img = requests.get(url_img).content with open("urli.jpg", "wb") as f:
f.write(url_img) # f.close()
img = input("请输入验证码:")
print(img)
url = response.url
r = re.search(r"from=(.*)",url).group(1)
print(r)
postData = {"c":img,"r":r,"v":"5"}
url = "http://weixin.sogou.com/antispider/thank.php"
yield scrapy.FormRequest(url=url, formdata=postData, callback=self.parse_two,meta={"name":name})
# 不需要验证码验证
else:
for res, i in zip(resp, range(1, 10)):
item = SougouItem()
item["url"] = res.xpath('.//p[1]/a/@href').extract_first()
item["name"] = name
print("第%d条" % i) # 转化永久链接
headers = {"Host": "mp.weixin.qq.com",
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cookie": "noticeLoginFlag=1; pgv_pvi=5269297152; pt2gguin=o1349184918; RK=ph4smy/QWu; ptcz=f3eb6ede5db921d0ada7f1713e6d1ca516d200fec57d602e677245490fcb7f1e; pgv_pvid=1033302674; o_cookie=1349184918; pac_uid=1_1349184918; ua_id=4nooSvHNkTOjpIpgAAAAAFX9OSNcLApfsluzwfClLW8=; mm_lang=zh_CN; noticeLoginFlag=1; remember_acct=Liangkai318; rewardsn=; wxtokenkey=777; pgv_si=s1944231936; uuid=700c40c965347f0925a8e8fdcc1e003e; ticket=023fc8861356b01527983c2c4765ef80903bf3d7; ticket_id=gh_6923d82780e4; cert=L_cE4aRdaZeDnzao3xEbMkcP3Kwuejoi; data_bizuin=3075391054; bizuin=3208078327; data_ticket=XrzOnrV9Odc80hJLtk8vFjTLI1vd7kfKJ9u+DzvaeeHxZkMXbv9kcWk/Pmqx/9g7; slave_sid=SWRKNmFyZ1NkM002Rk9NR0RRVGY5VFdMd1lXSkExWGtPcWJaREkzQ1BESEcyQkNLVlQ3YnB4OFNoNmtRZzdFdGpnVGlHak9LMjJ5eXBNVEgxZDlZb1BZMnlfN1hKdnJsV0NKallsQW91Zjk5Y3prVjlQRDNGYUdGUWNFNEd6eTRYT1FSOEQxT0MwR01Ja0Vo; slave_user=gh_6923d82780e4; xid=7b2245140217dbb3c5c0a552d46b9664; openid2ticket_oTr5Ot_B4nrDSj14zUxlXg8yrzws=D/B6//xK73BoO+mKE2EAjdcgIXNPw/b5PEDTDWM6t+4="}
respon = requests.get(url=item["url"]).content
gongzhongh = etree.HTML(respon).xpath('//a[@id="post-user"]/text()')[0]
# times = etree.HTML(respon).xpath('//*[@id="post-date"]/text()')[0]
title_one = etree.HTML(respon).xpath('//*[@id="activity-name"]/text()')[0].split()[0]
print(gongzhongh, title_one)
item["tit"] = title_one
item["gongzhongh"] = gongzhongh
# item["times"] = times
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + gongzhongh + "&begin=0&count=5"
# wenzhang_url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
resp = requests.get(url=url, headers=headers).content
print(resp)
faskeids = json.loads(resp.decode("utf-8"))
try:
list_fask = faskeids["list"] except Exception as f:
print("**********[INFO]:请求失败,登陆失败, 请重新登陆*************")
return
for fask in list_fask:
fakeid = fask["fakeid"]
nickname = fask["nickname"] if nickname == item["gongzhongh"]:
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + fakeid + "&type=9"
# url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] +"&fakeid=" + fakeid +"&type=9"
resp = requests.get(url=url, headers=headers).content
app = json.loads(resp.decode("utf-8"))["app_msg_list"]
item["aid"] = app["aid"]
item["appmsgid"] = app["appmsgid"]
item["cover"] = app["cover"]
item["digest"] = app["digest"]
item["url_link"] = app["link"]
item["tit"] = app["title"]
print(item)
time.sleep(10) # time.sleep(5)
# dict_wengzhang = json.loads(resp.decode("utf-8"))
# app_msg_list = dict_wengzhang["app_msg_list"]
# print(len(app_msg_list))
# for app in app_msg_list:
# print(app)
# title = app["title"]
# if title == item["tit"]:
# item["url_link"] = app["link"]
# updata_time = app["update_time"]
# item["times"] = time.strftime("%Y-%m-%d %H:%M:%S", updata_time)
# print("最终链接为:", item["url_link"])
# yield item
# else:
# print(app["title"], item["tit"])
# print("与所选文章不同放弃")
# # item["tit"] = app["title"]
# # item["url_link"] = app["link"]
# # yield item
# else:
# print(nickname, item["gongzhongh"])
# print("与所选公众号不一致放弃")
# time.sleep(100)
# yield item
if response.xpath('//a[@class="np"]'):
s += 1
url = "http://weixin.sogou.com/weixin ... 2Bstr(s) # time.sleep(3)
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name": name})
以上是python如何抓取搜狗微信公众号文章permanent链接的详细内容。更多详情请关注Gxl其他相关文章!
querylist采集微信公众号文章(腾讯appium微信采集深度探索篇其实我分析了n种方案)
采集交流 • 优采云 发表了文章 • 0 个评论 • 154 次浏览 • 2021-09-06 16:06
querylist采集微信公众号文章,一般需要反爬虫扫描文章末尾二维码进行反爬虫,文章链接为文章正文href,图片为文章一部分。在微信后台放入本页面地址即可。代码如下:main方法:初始化需要用到:微信id:微信id/tagid(tagid从0开始递增,微信id为i13)scanner:微信反爬虫采集系统分析文章页面,与app端进行对比,并取出我们需要采集到文章列表model:用于爬取分析文章信息,已获取第一个按钮text+#,鼠标移动到text里可以获取到实际字符,点击text进行识别即可获取text信息keyword:获取上标取出下标即为分析文章条目,获取上标得到页面中所有的内容,点击text进行获取条目类别contentboolean注册安卓版注册完成以后需要用vuerouter注册安卓浏览器,在手机登录openinstall微信后台,获取安卓浏览器keywordid,取出同名detail标签model对应分析软件:appium,免费开源工具,可自定义绑定工具,fiddler调试工具部署公众号,获取二维码,打开后台就可以获取获取到微信公众号的列表secondlife类,进行分析。
appium+vuerouter
请先把爬虫分析功能能力提升一下。
#腾讯appium微信采集深度探索篇其实我分析了n种方案,最后还是appium的微信采集功能最强大。但是为什么最后还是选择了appium,而不是webdriver呢?因为我非常喜欢appium,与其它机器学习工具相比,使用appium非常容易上手,只要会计算机基础就可以用它来实现复杂的机器学习功能。腾讯开发的proactive.js很好用,用得也很顺手。
还有它不止是采集微信公众号文章信息,我还发现它已经开始支持抓取企业的店铺、知乎等多个平台的公众号。并且proactive.js在中国市场几乎是免费的。 查看全部
querylist采集微信公众号文章(腾讯appium微信采集深度探索篇其实我分析了n种方案)
querylist采集微信公众号文章,一般需要反爬虫扫描文章末尾二维码进行反爬虫,文章链接为文章正文href,图片为文章一部分。在微信后台放入本页面地址即可。代码如下:main方法:初始化需要用到:微信id:微信id/tagid(tagid从0开始递增,微信id为i13)scanner:微信反爬虫采集系统分析文章页面,与app端进行对比,并取出我们需要采集到文章列表model:用于爬取分析文章信息,已获取第一个按钮text+#,鼠标移动到text里可以获取到实际字符,点击text进行识别即可获取text信息keyword:获取上标取出下标即为分析文章条目,获取上标得到页面中所有的内容,点击text进行获取条目类别contentboolean注册安卓版注册完成以后需要用vuerouter注册安卓浏览器,在手机登录openinstall微信后台,获取安卓浏览器keywordid,取出同名detail标签model对应分析软件:appium,免费开源工具,可自定义绑定工具,fiddler调试工具部署公众号,获取二维码,打开后台就可以获取获取到微信公众号的列表secondlife类,进行分析。
appium+vuerouter
请先把爬虫分析功能能力提升一下。
#腾讯appium微信采集深度探索篇其实我分析了n种方案,最后还是appium的微信采集功能最强大。但是为什么最后还是选择了appium,而不是webdriver呢?因为我非常喜欢appium,与其它机器学习工具相比,使用appium非常容易上手,只要会计算机基础就可以用它来实现复杂的机器学习功能。腾讯开发的proactive.js很好用,用得也很顺手。
还有它不止是采集微信公众号文章信息,我还发现它已经开始支持抓取企业的店铺、知乎等多个平台的公众号。并且proactive.js在中国市场几乎是免费的。
querylist采集微信公众号文章(ios微信公众号文章数据可视化千里之行始于足下)
采集交流 • 优采云 发表了文章 • 0 个评论 • 126 次浏览 • 2021-09-06 14:01
querylist采集微信公众号文章内容时,需要到微信公众号后台的后台历史消息里查找自己需要的历史文章,前期使用websocket后台自带的,很慢,没有收到定期发送的消息,网上也有很多方法尝试,常用方法如下:1.用socket,同一ip多次查询(每次次间隔3秒),然后用sendblock传回消息2.用xmlhttprequest动态网页获取-querylist.html,设置头信息,然后传回消息。如果时间和语言允许,java还是用tomcat服务器作为后台,同一ip多次查询也可以。
ios微信公众号文章数据可视化爬虫
千里之行始于足下。websocket是一个关于网络传输的协议。采用网络连接时,数据传输可靠性非常高。你的微信公众号不是第一个采用这个协议来作为关系数据的。你上哪里发请求呢?服务器上并没有对应的开源协议。推荐你c#和mysql使用websocket(我自己调用的-xinaya),数据传输没问题。可以简单的基于php或者.net做网页上部分信息来交互。
我这里有,部分免费。
微信公众号文章文章链接:
有代码可以使用canvas画图
使用websocket、xmlhttprequest、socket
公众号文章的基本模型可以归纳为如下几种:json串,这里主要指公众号一般后台自动生成,比如昵称、账号、关注号、点赞数、转发数,用json格式收到后推送到前端。文章id,一般由两个或者两个以上的json对象构成,用来收到推送消息,一般会存在你的域名里,通过id获取该字段。文章简介,一般用个json对象记录,大致可以用datetime类类型进行记录。
推送订阅号消息,推送公众号菜单,通过event的方式。推送订阅号消息,推送微信群消息,推送电话联系人消息,推送好友消息,推送通知消息。公众号文章的文章主体信息:标题、开头、中间、尾声、确认完成。用字段“jsontext"表示:text{text}jsontext{'appid':'xxx','content':'xxx','content':'xxx','content':'xxx','content':'xxx','expires':'xxx','license':'xxx','recipient':'xxx','ticket':'xxx','character':'xxx','content-type':'xxx','encoding':'xxx','documentjson':'xxx','contentdata':'xxx','content':'xxx','content':'xxx','content-name':'xxx','content':'xxx','content':'xxx','text':'xxx','text':'xxx','text':'xxx','text':。 查看全部
querylist采集微信公众号文章(ios微信公众号文章数据可视化千里之行始于足下)
querylist采集微信公众号文章内容时,需要到微信公众号后台的后台历史消息里查找自己需要的历史文章,前期使用websocket后台自带的,很慢,没有收到定期发送的消息,网上也有很多方法尝试,常用方法如下:1.用socket,同一ip多次查询(每次次间隔3秒),然后用sendblock传回消息2.用xmlhttprequest动态网页获取-querylist.html,设置头信息,然后传回消息。如果时间和语言允许,java还是用tomcat服务器作为后台,同一ip多次查询也可以。
ios微信公众号文章数据可视化爬虫
千里之行始于足下。websocket是一个关于网络传输的协议。采用网络连接时,数据传输可靠性非常高。你的微信公众号不是第一个采用这个协议来作为关系数据的。你上哪里发请求呢?服务器上并没有对应的开源协议。推荐你c#和mysql使用websocket(我自己调用的-xinaya),数据传输没问题。可以简单的基于php或者.net做网页上部分信息来交互。
我这里有,部分免费。
微信公众号文章文章链接:
有代码可以使用canvas画图
使用websocket、xmlhttprequest、socket
公众号文章的基本模型可以归纳为如下几种:json串,这里主要指公众号一般后台自动生成,比如昵称、账号、关注号、点赞数、转发数,用json格式收到后推送到前端。文章id,一般由两个或者两个以上的json对象构成,用来收到推送消息,一般会存在你的域名里,通过id获取该字段。文章简介,一般用个json对象记录,大致可以用datetime类类型进行记录。
推送订阅号消息,推送公众号菜单,通过event的方式。推送订阅号消息,推送微信群消息,推送电话联系人消息,推送好友消息,推送通知消息。公众号文章的文章主体信息:标题、开头、中间、尾声、确认完成。用字段“jsontext"表示:text{text}jsontext{'appid':'xxx','content':'xxx','content':'xxx','content':'xxx','content':'xxx','expires':'xxx','license':'xxx','recipient':'xxx','ticket':'xxx','character':'xxx','content-type':'xxx','encoding':'xxx','documentjson':'xxx','contentdata':'xxx','content':'xxx','content':'xxx','content-name':'xxx','content':'xxx','content':'xxx','text':'xxx','text':'xxx','text':'xxx','text':。
querylist采集微信公众号文章(sock优采云采集器微信公众号文章网页,ctrlist和urllist的功能)
采集交流 • 优采云 发表了文章 • 0 个评论 • 148 次浏览 • 2021-09-06 07:02
querylist采集微信公众号文章网页,最后转化为词典存到analyzer中。taglist采集关键词到单个analyzer进行排序。因为词典一次只能抓取一个网页,所以都是按照最常见的、排名最靠前的句子抓取的。相当于一个抓取网页的热词池。ctrlist采集微信小程序实时的ctr、点击流网页数据。tcplist、urllist采集已经抓取到的资源地址进行统计。
ctrlist就是抓取微信开发平台提供的源码。taglist采集已经抓取到的资源地址进行统计。taglist还有web服务端。ctrlist基本是集成了taglist和urllist的功能。
可以参考我这篇总结。
socket抓取分页列表站:analyzer/click.py爬虫语言:python,c++,
ctrlist主要用于各大前端公司采集js关键字,
我用的是一款叫微信开发抓取工具,抓取的方式很简单,将微信公众号的文章网页网址发送到我们公众号服务器上,然后我们就可以在公众号文章网页源代码里面获取到相应的数据。抓取过程简单,
看自己的需求,比如快速抓取一个页面的代码:ctrlist:这个可以做一个单页面项目ctrlistr:只抓取了前端, 查看全部
querylist采集微信公众号文章(sock优采云采集器微信公众号文章网页,ctrlist和urllist的功能)
querylist采集微信公众号文章网页,最后转化为词典存到analyzer中。taglist采集关键词到单个analyzer进行排序。因为词典一次只能抓取一个网页,所以都是按照最常见的、排名最靠前的句子抓取的。相当于一个抓取网页的热词池。ctrlist采集微信小程序实时的ctr、点击流网页数据。tcplist、urllist采集已经抓取到的资源地址进行统计。
ctrlist就是抓取微信开发平台提供的源码。taglist采集已经抓取到的资源地址进行统计。taglist还有web服务端。ctrlist基本是集成了taglist和urllist的功能。
可以参考我这篇总结。
socket抓取分页列表站:analyzer/click.py爬虫语言:python,c++,
ctrlist主要用于各大前端公司采集js关键字,
我用的是一款叫微信开发抓取工具,抓取的方式很简单,将微信公众号的文章网页网址发送到我们公众号服务器上,然后我们就可以在公众号文章网页源代码里面获取到相应的数据。抓取过程简单,
看自己的需求,比如快速抓取一个页面的代码:ctrlist:这个可以做一个单页面项目ctrlistr:只抓取了前端,
querylist采集微信公众号文章(更新日志v20200520修复一个严重问题导致批量黑白直播下载官网使用)
采集交流 • 优采云 发表了文章 • 0 个评论 • 373 次浏览 • 2021-09-06 03:30
微信公众号文章batch黑白直播下载官网软件是一款可以帮助用户批量处理采集微信公号内容的工具,支持文章和图片批量黑白直播下载官网,支持按关键词相关内容搜索 黑白直播下载官网,功能非常强大,有需要的用户不要错过,欢迎使用黑白直播下载官网!
使用说明
1、在设置中心开启该功能。
2、按照提示重启软件,确认安装证书。
3、登录电脑微信,选择公众号,查看历史或点击文章文章,返回软件查看软件底部提醒是否变红(红色表示在后台工作
进行中)。
4、黑白直播官网下载完成后自动完成。
注意事项
1、只能一一获取微信公众号,请勿打开更多软件,否则会出现意想不到的问题!
2、 如果发现网络不通,请正确关闭软件。如果还是不行,请重新打开软件几次,然后再关闭。
3、背景分析文章的文章数和黑白直播下载官网的文章数大多不一致,因为部分文章已经被删除或者屏蔽了,但是找到的文章数量总是很大
从黑白直播官网下载的文章数。
4、如有问题,请一次性详细描述清楚,并将失败的请求链接或操作步骤提供给论坛或我的博客。
更新日志
v20200520
修复了导致批量黑白直播下载官网无法下载黑白直播官网的严重问题。之前的微信文章
只有黑白直播下载官网原创文章
v20200428
修复评论交互时显示“作者”的问题
修复标题重复点
修复搜狗搜索特殊字符编码问题
v20200426
添加格式化的json并输出到文件
修复之前的公众号文章无法从黑白直播官网下载的问题 查看全部
querylist采集微信公众号文章(更新日志v20200520修复一个严重问题导致批量黑白直播下载官网使用)
微信公众号文章batch黑白直播下载官网软件是一款可以帮助用户批量处理采集微信公号内容的工具,支持文章和图片批量黑白直播下载官网,支持按关键词相关内容搜索 黑白直播下载官网,功能非常强大,有需要的用户不要错过,欢迎使用黑白直播下载官网!

使用说明
1、在设置中心开启该功能。
2、按照提示重启软件,确认安装证书。
3、登录电脑微信,选择公众号,查看历史或点击文章文章,返回软件查看软件底部提醒是否变红(红色表示在后台工作
进行中)。
4、黑白直播官网下载完成后自动完成。
注意事项
1、只能一一获取微信公众号,请勿打开更多软件,否则会出现意想不到的问题!
2、 如果发现网络不通,请正确关闭软件。如果还是不行,请重新打开软件几次,然后再关闭。
3、背景分析文章的文章数和黑白直播下载官网的文章数大多不一致,因为部分文章已经被删除或者屏蔽了,但是找到的文章数量总是很大
从黑白直播官网下载的文章数。
4、如有问题,请一次性详细描述清楚,并将失败的请求链接或操作步骤提供给论坛或我的博客。
更新日志
v20200520
修复了导致批量黑白直播下载官网无法下载黑白直播官网的严重问题。之前的微信文章
只有黑白直播下载官网原创文章
v20200428
修复评论交互时显示“作者”的问题
修复标题重复点
修复搜狗搜索特殊字符编码问题
v20200426
添加格式化的json并输出到文件
修复之前的公众号文章无法从黑白直播官网下载的问题
querylist采集微信公众号文章(解放双手【软件特色】搜索支持搜索文章一键下载)
采集交流 • 优采云 发表了文章 • 0 个评论 • 135 次浏览 • 2021-09-04 18:23
13、支持搜索文章一键下载、自定义选择下载、多线程下载全部;
14、支持验证码自动编码,解放双手
[软件功能]
1、搜索所有微信公众号文章至关键词,支持搜索指定时间段内的相关内容,支持文章内容导出word、pdf、excle格式;
2、一键采集指定公众号文章的所有历史记录,支持文章内容批量导出word和pdf格式(文章原排版,文字+图片);
3、可以按照发布时间、标题、公众号对关键词search相关文章内容进行排序,支持标题去重,搜索结果二次搜索;
4、关键词search文章支持通过公众号和关键词屏蔽,所有不想看的内容都过滤掉,支持拖拽选择,一键屏蔽;
5、内置验证码自动打印,自动IP切换功能,解放双手,操作更便捷;
6、文章Content 页面支持关键词搜索,快速查明是否需要文章;
7、保存搜索关键词history,搜索过去关键词,直接从搜索历史中拉取关键词,输入更方便;
8、内置大量快捷键,勾选文章,搜索内容更方便、更人性化;
9、一键搜索所有微信公众号文章,按时间段搜索;
10、支持公众号关键词filtering,以及title关键词filtering;
11、支持查询单个公众号的所有海量发帖记录;
12、支持搜索结果、公众号、时间、标题排序;
13、支持一键导出搜索结果,方便查看。 查看全部
querylist采集微信公众号文章(解放双手【软件特色】搜索支持搜索文章一键下载)
13、支持搜索文章一键下载、自定义选择下载、多线程下载全部;
14、支持验证码自动编码,解放双手

[软件功能]
1、搜索所有微信公众号文章至关键词,支持搜索指定时间段内的相关内容,支持文章内容导出word、pdf、excle格式;
2、一键采集指定公众号文章的所有历史记录,支持文章内容批量导出word和pdf格式(文章原排版,文字+图片);
3、可以按照发布时间、标题、公众号对关键词search相关文章内容进行排序,支持标题去重,搜索结果二次搜索;
4、关键词search文章支持通过公众号和关键词屏蔽,所有不想看的内容都过滤掉,支持拖拽选择,一键屏蔽;
5、内置验证码自动打印,自动IP切换功能,解放双手,操作更便捷;
6、文章Content 页面支持关键词搜索,快速查明是否需要文章;
7、保存搜索关键词history,搜索过去关键词,直接从搜索历史中拉取关键词,输入更方便;
8、内置大量快捷键,勾选文章,搜索内容更方便、更人性化;
9、一键搜索所有微信公众号文章,按时间段搜索;
10、支持公众号关键词filtering,以及title关键词filtering;
11、支持查询单个公众号的所有海量发帖记录;
12、支持搜索结果、公众号、时间、标题排序;
13、支持一键导出搜索结果,方便查看。
querylist采集微信公众号文章(querylist采集微信公众号文章大小为6m,方案根据需要调整)
采集交流 • 优采云 发表了文章 • 0 个评论 • 113 次浏览 • 2021-09-03 16:03
querylist采集微信公众号文章大小为6m,方案根据需要调整。内容采集:每个公众号对应的文章都可以采集下来,利用requests.session或者requests库即可抓取。内容爬取:对文章进行信息提取、选择、插入保存等等,利用workerman即可实现。会同步push到服务器上,另外抓取公众号的话还可以做二次更新。
文章采集通过mysql实现。这种方式对数据的要求较低,虽然抓取的时候有一定的延迟,但是每个微信公众号的文章数量有限,通过人工进行抓取就ok。对于内容爬取,每个微信公众号的文章数量有限,那么就需要尽可能多的建表,实现不同的爬取,好提取一些具有共性的特征信息,比如这里采集的一些词,那么他们的分类标签是属于哪一类的,每个分类标签有哪些人数关注人数等等。
这样的话就能够实现为每个公众号对应的采集,甚至每个公众号里面,有的文章数量较少。为了大家方便阅读,这里通过爬取到的词做统计,看看词频,然后根据那些词看看是不是能够比较方便的得到他们的分类。爬取到词语一览表这一篇大概就对爬取到的词进行了统计,这些词都是比较相关的,对于公众号一般经常读的或者一般常写的可以抓取到较为准确的词汇。
对于爬取到的词进行了一个下标统计:根据上图统计,可以看到,目前一共爬取了大概4000左右的词,每个词的上下最多只爬取了7个节点,而且还不是最大的。下一篇主要写实现内容爬取,如果爬取到的词类型比较多,还要分词的话,还有点麻烦。所以,就用代码实现一下吧。 查看全部
querylist采集微信公众号文章(querylist采集微信公众号文章大小为6m,方案根据需要调整)
querylist采集微信公众号文章大小为6m,方案根据需要调整。内容采集:每个公众号对应的文章都可以采集下来,利用requests.session或者requests库即可抓取。内容爬取:对文章进行信息提取、选择、插入保存等等,利用workerman即可实现。会同步push到服务器上,另外抓取公众号的话还可以做二次更新。
文章采集通过mysql实现。这种方式对数据的要求较低,虽然抓取的时候有一定的延迟,但是每个微信公众号的文章数量有限,通过人工进行抓取就ok。对于内容爬取,每个微信公众号的文章数量有限,那么就需要尽可能多的建表,实现不同的爬取,好提取一些具有共性的特征信息,比如这里采集的一些词,那么他们的分类标签是属于哪一类的,每个分类标签有哪些人数关注人数等等。
这样的话就能够实现为每个公众号对应的采集,甚至每个公众号里面,有的文章数量较少。为了大家方便阅读,这里通过爬取到的词做统计,看看词频,然后根据那些词看看是不是能够比较方便的得到他们的分类。爬取到词语一览表这一篇大概就对爬取到的词进行了统计,这些词都是比较相关的,对于公众号一般经常读的或者一般常写的可以抓取到较为准确的词汇。
对于爬取到的词进行了一个下标统计:根据上图统计,可以看到,目前一共爬取了大概4000左右的词,每个词的上下最多只爬取了7个节点,而且还不是最大的。下一篇主要写实现内容爬取,如果爬取到的词类型比较多,还要分词的话,还有点麻烦。所以,就用代码实现一下吧。
querylist采集微信公众号文章(知乎专题微信公众号内容的批量采集与应用,延续这份分享精神 )
采集交流 • 优采云 发表了文章 • 0 个评论 • 157 次浏览 • 2021-09-03 07:29
)
:///
参考知乎thematic微信公众号采集批号及申请,作者:饭口团队负责人
原作者(方口团队负责人)有句话:我的方法来自于很多同事的分享精神,所以我会延续这种精神,分享我的成果。
这个系列的文章也是为了延续这种分享精神!
这个文章系列是基于知乎话题教程的一步步实现过程,在实现过程中踩到了一些坑。
原理介绍这里不再赘述,可以参考知乎topic。
代码改进前的准备
原作者使用的是php环境。如果有能力,可以尝试其他语言来实现,比如python、java等,不过原作者已经给出了部分php代码,这里也实现了。
所以你要准备一个php环境。 win下推荐使用优采云集成环境,如wamp、xamp、phpstudy等,因为之前电脑里就有wamp环境,可以直接使用。先配置虚拟域名。但是下面的代码需要改成自己对应的路径。配置虚拟域名的教程可以参考我的另一篇文章php本地虚拟域名配置和端口的一些折腾。这里假设我配置的虚拟域名是
修改 rule_default.js 代码
下面仅给出了一些示例。其他人做同样的修改(如果没有配置虚拟域名,需要将域名改为路径访问,如localhost/weixin/,直接修改即可):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
HttpPost(ret[1],req.url,"/getMsgJson.php");
var http = require('http');
http.get('http://hojun.weixin.com/getWxHis.php', function(res) {
res.on('data', function(chunk){
callback(chunk+serverResData);
})
});
------------------
var options = {
method: "POST",
host: "hojun.weixin.com",
port: 80,
path: path,//接收程序的路径和文件名
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
"Content-Length": content.length
}
};
找到要修改的函数replaceRequestOption:
1
2
3
4
5
6
7
8
replaceRequestOption : function(req,option){
var newOption = option;
if(/google/i.test(newOption.headers.host)){
newOption.hostname = "www.baidu.com";
newOption.port = "80";
}
return newOption;
},
创建数据库和数据表
在完善php代码之前,我们还需要先创建数据库和数据表。好消息是组长已经给出了数据表的创建sql语句。修改了一些语法错误和关键字重复
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
微信公众号表
CREATE TABLE `weixin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) DEFAULT ' ' COMMENT '公众号唯一标识biz',
`collect` int(11) DEFAULT 1 COMMENT '记录采集时间的时间戳',
PRIMARY KEY (`id`)
) ;
微信文章表
CREATE TABLE `post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '文章对应的公众号biz',
`field_id` int(11) NOT NULL COMMENT '微信定义的一个id,每条文章唯一',
`title` varchar(255) NOT NULL DEFAULT ' ' COMMENT '文章标题',
`title_encode` text CHARACTER SET utf8 NOT NULL COMMENT '文章编码,防止文章出现emoji',
`digest` varchar(500) NOT NULL DEFAULT ' ' COMMENT '文章摘要',
`content_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '文章地址',
`source_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '阅读原文地址',
`cover` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '封面图片',
`is_multi` int(11) NOT NULL COMMENT '是否多图文',
`is_top` int(11) NOT NULL COMMENT '是否头条',
`datetime` int(11) NOT NULL COMMENT '文章时间戳',
`readNum` int(11) NOT NULL DEFAULT 1 COMMENT '文章阅读量',
`likeNum` int(11) NOT NULL DEFAULT 0 COMMENT '文章点赞量',
PRIMARY KEY (`id`)
) ;
采集队列表
CREATE TABLE `tmplist` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`content_url` varchar(255) DEFAULT NULL COMMENT '文章地址',
`load` int(11) DEFAULT 0 COMMENT '读取中标记',
PRIMARY KEY (`id`),
UNIQUE KEY `content_url` (`content_url`)
) ;
登录phpMyAdmin后台,语言可设置为中文。
注意排序规则设置为utf8_general_ci。
一一执行sql生成数据表。
待续......待续......
希望这个文章能给你带来知识和乐趣。喜欢博主文章可以加博主好友
如果你有好的文章,也可以给博主投稿。
查看全部
querylist采集微信公众号文章(知乎专题微信公众号内容的批量采集与应用,延续这份分享精神
)
:///
参考知乎thematic微信公众号采集批号及申请,作者:饭口团队负责人
原作者(方口团队负责人)有句话:我的方法来自于很多同事的分享精神,所以我会延续这种精神,分享我的成果。
这个系列的文章也是为了延续这种分享精神!
这个文章系列是基于知乎话题教程的一步步实现过程,在实现过程中踩到了一些坑。
原理介绍这里不再赘述,可以参考知乎topic。
代码改进前的准备
原作者使用的是php环境。如果有能力,可以尝试其他语言来实现,比如python、java等,不过原作者已经给出了部分php代码,这里也实现了。
所以你要准备一个php环境。 win下推荐使用优采云集成环境,如wamp、xamp、phpstudy等,因为之前电脑里就有wamp环境,可以直接使用。先配置虚拟域名。但是下面的代码需要改成自己对应的路径。配置虚拟域名的教程可以参考我的另一篇文章php本地虚拟域名配置和端口的一些折腾。这里假设我配置的虚拟域名是
修改 rule_default.js 代码
下面仅给出了一些示例。其他人做同样的修改(如果没有配置虚拟域名,需要将域名改为路径访问,如localhost/weixin/,直接修改即可):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
HttpPost(ret[1],req.url,"/getMsgJson.php");
var http = require('http');
http.get('http://hojun.weixin.com/getWxHis.php', function(res) {
res.on('data', function(chunk){
callback(chunk+serverResData);
})
});
------------------
var options = {
method: "POST",
host: "hojun.weixin.com",
port: 80,
path: path,//接收程序的路径和文件名
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
"Content-Length": content.length
}
};
找到要修改的函数replaceRequestOption:
1
2
3
4
5
6
7
8
replaceRequestOption : function(req,option){
var newOption = option;
if(/google/i.test(newOption.headers.host)){
newOption.hostname = "www.baidu.com";
newOption.port = "80";
}
return newOption;
},
创建数据库和数据表
在完善php代码之前,我们还需要先创建数据库和数据表。好消息是组长已经给出了数据表的创建sql语句。修改了一些语法错误和关键字重复
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
微信公众号表
CREATE TABLE `weixin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) DEFAULT ' ' COMMENT '公众号唯一标识biz',
`collect` int(11) DEFAULT 1 COMMENT '记录采集时间的时间戳',
PRIMARY KEY (`id`)
) ;
微信文章表
CREATE TABLE `post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '文章对应的公众号biz',
`field_id` int(11) NOT NULL COMMENT '微信定义的一个id,每条文章唯一',
`title` varchar(255) NOT NULL DEFAULT ' ' COMMENT '文章标题',
`title_encode` text CHARACTER SET utf8 NOT NULL COMMENT '文章编码,防止文章出现emoji',
`digest` varchar(500) NOT NULL DEFAULT ' ' COMMENT '文章摘要',
`content_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '文章地址',
`source_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '阅读原文地址',
`cover` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '封面图片',
`is_multi` int(11) NOT NULL COMMENT '是否多图文',
`is_top` int(11) NOT NULL COMMENT '是否头条',
`datetime` int(11) NOT NULL COMMENT '文章时间戳',
`readNum` int(11) NOT NULL DEFAULT 1 COMMENT '文章阅读量',
`likeNum` int(11) NOT NULL DEFAULT 0 COMMENT '文章点赞量',
PRIMARY KEY (`id`)
) ;
采集队列表
CREATE TABLE `tmplist` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`content_url` varchar(255) DEFAULT NULL COMMENT '文章地址',
`load` int(11) DEFAULT 0 COMMENT '读取中标记',
PRIMARY KEY (`id`),
UNIQUE KEY `content_url` (`content_url`)
) ;
登录phpMyAdmin后台,语言可设置为中文。
注意排序规则设置为utf8_general_ci。
一一执行sql生成数据表。
待续......待续......
希望这个文章能给你带来知识和乐趣。喜欢博主文章可以加博主好友

如果你有好的文章,也可以给博主投稿。

querylist采集微信公众号文章( 微信公众号文章的GET及方法(二)-)
采集交流 • 优采云 发表了文章 • 0 个评论 • 159 次浏览 • 2021-09-03 02:08
微信公众号文章的GET及方法(二)-)
Python 微信公众号文章crawl
一.Idea
我们通过微信公众平台网页版图文消息中的超链接获取我们需要的界面
从界面我们可以得到对应的微信公众号和所有对应的微信公众号文章。
二.接口分析
微信公众号访问:
参数:
action=search_biz
开始=0
计数=5
query=官方账号
token=每个账户对应的token值
lang=zh_CN
f=json
ajax=1
请求方法:
获取
所以在这个界面我们只需要获取token,查询的是你需要搜索的公众号,登录后可以通过网页链接获取token。
获取公众号对应的文章界面:
参数:
action=list_ex
开始=0
计数=5
fakeid=MjM5NDAwMTA2MA==
type=9
查询=
令牌=557131216
lang=zh_CN
f=json
ajax=1
请求方法:
获取
我们需要在这个接口中获取的值是上一步的token和fakeid,这个fakeid可以在第一个接口中获取。这样我们就可以获取到微信公众号文章的数据了。
三.实现第一步:
首先我们需要通过selenium模拟登录,然后获取cookie和对应的token
def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 点击切换到账号密码输入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模拟用户点击
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 点击登录
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登录验证
print('请扫描二维码')
sleep(20)
# 刷新当前网页
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 获取当前网页链接
url = browser.current_url
# 获取当前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 转换为字符串
cookie_str = json.dumps(post)
# 存储到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 对当前网页链接进行切片,获取到token
paramList = url.strip().split('?')[1].split('&')
# 定义一个字典存储数据
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
定义一个登录方法,里面的参数是登录账号和密码,然后定义一个字典来存储cookie的值。模拟用户,输入对应的账号密码,点击登录,会出现扫码验证,用登录微信扫一扫即可。
刷新当前网页后,获取当前cookie和token,然后返回。
第二步:1.请求对应的公众号接口获取我们需要的fakeid
url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公众号名称',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
传入我们获取的token和cookie,然后通过requests.get请求获取返回的微信公众号的json数据
lists = search_resp.json().get('list')[0]
通过上面的代码可以得到对应的公众号数据
fakeid = lists.get('fakeid')
通过上面的代码可以得到对应的fakeid
2.请求获取微信公众号文章接口,获取我们需要的文章data
appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
我们传入fakeid和token,然后调用requests.get请求接口获取返回的json数据。
我们已经实现了微信公众号文章的抓取。
四.Summary
通过爬取微信公众号文章,需要掌握selenium和requests的用法,以及如何获取request接口。但是需要注意的是,当我们在循环中获取文章时,一定要设置一个延迟时间,否则账号很容易被封,获取不到返回的数据。 查看全部
querylist采集微信公众号文章(
微信公众号文章的GET及方法(二)-)
Python 微信公众号文章crawl
一.Idea
我们通过微信公众平台网页版图文消息中的超链接获取我们需要的界面


从界面我们可以得到对应的微信公众号和所有对应的微信公众号文章。
二.接口分析
微信公众号访问:
参数:
action=search_biz
开始=0
计数=5
query=官方账号
token=每个账户对应的token值
lang=zh_CN
f=json
ajax=1
请求方法:
获取
所以在这个界面我们只需要获取token,查询的是你需要搜索的公众号,登录后可以通过网页链接获取token。

获取公众号对应的文章界面:
参数:
action=list_ex
开始=0
计数=5
fakeid=MjM5NDAwMTA2MA==
type=9
查询=
令牌=557131216
lang=zh_CN
f=json
ajax=1
请求方法:
获取
我们需要在这个接口中获取的值是上一步的token和fakeid,这个fakeid可以在第一个接口中获取。这样我们就可以获取到微信公众号文章的数据了。

三.实现第一步:
首先我们需要通过selenium模拟登录,然后获取cookie和对应的token
def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 点击切换到账号密码输入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模拟用户点击
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 点击登录
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登录验证
print('请扫描二维码')
sleep(20)
# 刷新当前网页
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 获取当前网页链接
url = browser.current_url
# 获取当前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 转换为字符串
cookie_str = json.dumps(post)
# 存储到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 对当前网页链接进行切片,获取到token
paramList = url.strip().split('?')[1].split('&')
# 定义一个字典存储数据
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
定义一个登录方法,里面的参数是登录账号和密码,然后定义一个字典来存储cookie的值。模拟用户,输入对应的账号密码,点击登录,会出现扫码验证,用登录微信扫一扫即可。
刷新当前网页后,获取当前cookie和token,然后返回。
第二步:1.请求对应的公众号接口获取我们需要的fakeid
url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公众号名称',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
传入我们获取的token和cookie,然后通过requests.get请求获取返回的微信公众号的json数据
lists = search_resp.json().get('list')[0]
通过上面的代码可以得到对应的公众号数据
fakeid = lists.get('fakeid')
通过上面的代码可以得到对应的fakeid
2.请求获取微信公众号文章接口,获取我们需要的文章data
appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
我们传入fakeid和token,然后调用requests.get请求接口获取返回的json数据。
我们已经实现了微信公众号文章的抓取。
四.Summary
通过爬取微信公众号文章,需要掌握selenium和requests的用法,以及如何获取request接口。但是需要注意的是,当我们在循环中获取文章时,一定要设置一个延迟时间,否则账号很容易被封,获取不到返回的数据。
querylist采集微信公众号文章(微信公众号爬取程序分享搞成java的难点在于)
采集交流 • 优采云 发表了文章 • 0 个评论 • 165 次浏览 • 2021-09-03 02:08
最近需要爬取微信公众号的文章信息。上网查了一下,发现微信公众号爬取的难点是公众号文章的链接在PC端打不开。需要使用微信的浏览器(获取微信客户端的补充参数才能获取其他平台的Open),给爬虫程序带来很大的麻烦。后来在知乎上看到一个大牛用php写的微信公众号爬虫程序,他按照大佬的思路直接做了java。改造过程中遇到的细节问题比较多,分享给大家。
系统的基本思想是在安卓模拟器上运行微信。模拟器设置代理,通过代理服务器拦截微信数据,并将获取到的数据发送给自己的程序进行处理。
需要准备的环境:nodejs、anyproxy代理、Android模拟器
nodejs下载地址:我下载的是windows版本,直接下载安装即可。安装完成后,直接运行C:\Program Files\nodejs\npm.cmd自动配置环境。
anyproxy安装:上一步安装好nodejs后,在cmd中直接运行npm install -g anyproxy就会安装
互联网上只有一个 Android 模拟器,很多。
首先安装代理服务器的证书。 Anyproxy 默认不解析 https 链接。安装证书后即可解决。如果在cmd中执行anyproxy --root,就会安装证书。之后,您必须在模拟器上下载证书。
然后输入anyproxy -i命令开启代理服务。 (记得加参数!)
记住这个ip和端口,然后安卓模拟器的代理就会用到这个。现在用浏览器打开网页::8002/ 这是anyproxy的网页界面,用于显示http传输数据。
点击上方红框中的菜单,会显示一个二维码。使用安卓模拟器扫码识别。模拟器(手机)会下载证书并安装。
现在我们准备为模拟器设置代理,代理模式设置为手动,代理ip为运行anyproxy的机器的ip,端口为8001
准备工作到此基本完成,在模拟器上打开微信,开通公众号文章,就可以在刚刚打开的web界面看到anyproxy抓取到的数据了:
在上面的红框中,有一个微信文章的链接,点进去查看具体数据。如果响应正文中没有任何内容,则可能是证书安装有问题。
如果一切顺利,你就可以下去了。
这里我们依靠代理服务来抓取微信数据,但是我们不能抓取一条数据,只能自己操作微信。最好手动复制。所以我们需要微信客户端自己跳转到页面。这时候可以使用anyproxy来拦截微信服务器返回的数据,将页面跳转代码注入其中,然后将处理后的数据返回给模拟器,实现微信客户端的自动重定向。
在anyproxy中打开一个名为rule_default.js的js文件,windows下文件为:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
文件中有一个方法叫replaceServerResDataAsync:function(req,res,serverResData,callback)。该方法负责对anyproxy获得的数据进行各种操作。开头应该只有 callback(serverResData) ;该语句的意思是直接将服务器响应数据返回给客户端。把这条语句删掉,换成下面丹尼尔写的代码就行了。这里的代码我没有做任何改动,里面的注释也解释的很清楚,按照逻辑来理解就好了,问题不大。
1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//当链接地址为公众号历史消息页面时(第一种页面形式)
3 //console.log("开始第一种页面爬取");
4 if(serverResData.toString() !== ""){
try {//防止报错退出程序
7 var reg = /msgList = (.*?);/;//定义历史消息正则匹配规则
8 var ret = reg.exec(serverResData.toString());//转换变量为string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//这个函数是后文定义的,将匹配到的历史消息json发送到自己的服务器
10 var http = require('http');
11 http.get('http://xxx/getWxHis', function(res) {//这个地址是自己服务器上的一个程序,目的是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxHis.php的原理。
12 res.on('data', function(chunk){
13 callback(chunk+serverResData);//将返回的代码插入到历史消息页面中,并返回显示出来
14 })
15 });
16 }catch(e){//如果上面的正则没有匹配到,那么这个页面内容可能是公众号历史消息页面向下翻动的第二页,因为历史消息第一页是html格式的,第二页就是json格式的。
17 //console.log("开始第一种页面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//这个函数和上面的一样是后文定义的,将第二页历史消息的json发送到自己的服务器
22 }
23 }catch(e){
24 console.log(e);//错误捕捉
25 }
26 callback(serverResData);//直接返回第二页json内容
27 }
28 }
29 //console.log("开始第一种页面爬取 结束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//当链接地址为公众号历史消息页面时(第二种页面形式)
31 try {
32 var reg = /var msgList = \'(.*?)\';/;//定义历史消息正则匹配规则(和第一种页面形式的正则不同)
33 var ret = reg.exec(serverResData.toString());//转换变量为string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//这个函数是后文定义的,将匹配到的历史消息json发送到自己的服务器
35 var http = require('http');
36 http.get('xxx/getWxHis', function(res) {//这个地址是自己服务器上的一个程序,目的是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxHis.php的原理。
37 res.on('data', function(chunk){
38 callback(chunk+serverResData);//将返回的代码插入到历史消息页面中,并返回显示出来
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二种页面表现形式的向下翻页后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//这个函数和上面的一样是后文定义的,将第二页历史消息的json发送到自己的服务器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//当链接地址为公众号文章阅读量和点赞量时
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函数是后文定义的,功能是将文章阅读量点赞量的json发送到服务器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//当链接地址为公众号文章时(rumor这个地址是公众号文章被辟谣了)
63 try {
64 var http = require('http');
65 http.get('http://xxx/getWxPost', function(res) {//这个地址是自己服务器上的另一个程序,目的是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxPost.php的原理。
66 res.on('data', function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 }
这里是一个简单的解释。微信公众号历史新闻页面的链接有两种形式:一种以/mp/getmasssendmsg开头,另一种以/mp/profile_ext开头。历史页面可以关闭。如果被拒绝,则会触发一个js事件,发送获取json数据(下一页内容)的请求。还有公众号文章的链接,以及文章的阅读量和喜欢的链接(返回json数据)。这些链接的形式是固定的,可以通过逻辑判断来区分。这里的问题是,如果所有的历史页面都需要爬取,怎么做。我的想法是模拟鼠标通过js向下滑动触发提交加载列表下一部分的请求。或者直接使用anyproxy分析滑动加载请求,直接将请求发送到微信服务器。但是一直存在一个问题,就是如何判断没有剩余数据。我正在抓取最新数据。我暂时没有这个需求,以后可能需要。有需要的可以试试。 查看全部
querylist采集微信公众号文章(微信公众号爬取程序分享搞成java的难点在于)
最近需要爬取微信公众号的文章信息。上网查了一下,发现微信公众号爬取的难点是公众号文章的链接在PC端打不开。需要使用微信的浏览器(获取微信客户端的补充参数才能获取其他平台的Open),给爬虫程序带来很大的麻烦。后来在知乎上看到一个大牛用php写的微信公众号爬虫程序,他按照大佬的思路直接做了java。改造过程中遇到的细节问题比较多,分享给大家。
系统的基本思想是在安卓模拟器上运行微信。模拟器设置代理,通过代理服务器拦截微信数据,并将获取到的数据发送给自己的程序进行处理。
需要准备的环境:nodejs、anyproxy代理、Android模拟器
nodejs下载地址:我下载的是windows版本,直接下载安装即可。安装完成后,直接运行C:\Program Files\nodejs\npm.cmd自动配置环境。
anyproxy安装:上一步安装好nodejs后,在cmd中直接运行npm install -g anyproxy就会安装
互联网上只有一个 Android 模拟器,很多。
首先安装代理服务器的证书。 Anyproxy 默认不解析 https 链接。安装证书后即可解决。如果在cmd中执行anyproxy --root,就会安装证书。之后,您必须在模拟器上下载证书。
然后输入anyproxy -i命令开启代理服务。 (记得加参数!)
记住这个ip和端口,然后安卓模拟器的代理就会用到这个。现在用浏览器打开网页::8002/ 这是anyproxy的网页界面,用于显示http传输数据。
点击上方红框中的菜单,会显示一个二维码。使用安卓模拟器扫码识别。模拟器(手机)会下载证书并安装。
现在我们准备为模拟器设置代理,代理模式设置为手动,代理ip为运行anyproxy的机器的ip,端口为8001
准备工作到此基本完成,在模拟器上打开微信,开通公众号文章,就可以在刚刚打开的web界面看到anyproxy抓取到的数据了:
在上面的红框中,有一个微信文章的链接,点进去查看具体数据。如果响应正文中没有任何内容,则可能是证书安装有问题。
如果一切顺利,你就可以下去了。
这里我们依靠代理服务来抓取微信数据,但是我们不能抓取一条数据,只能自己操作微信。最好手动复制。所以我们需要微信客户端自己跳转到页面。这时候可以使用anyproxy来拦截微信服务器返回的数据,将页面跳转代码注入其中,然后将处理后的数据返回给模拟器,实现微信客户端的自动重定向。
在anyproxy中打开一个名为rule_default.js的js文件,windows下文件为:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
文件中有一个方法叫replaceServerResDataAsync:function(req,res,serverResData,callback)。该方法负责对anyproxy获得的数据进行各种操作。开头应该只有 callback(serverResData) ;该语句的意思是直接将服务器响应数据返回给客户端。把这条语句删掉,换成下面丹尼尔写的代码就行了。这里的代码我没有做任何改动,里面的注释也解释的很清楚,按照逻辑来理解就好了,问题不大。
1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//当链接地址为公众号历史消息页面时(第一种页面形式)
3 //console.log("开始第一种页面爬取");
4 if(serverResData.toString() !== ""){
try {//防止报错退出程序
7 var reg = /msgList = (.*?);/;//定义历史消息正则匹配规则
8 var ret = reg.exec(serverResData.toString());//转换变量为string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//这个函数是后文定义的,将匹配到的历史消息json发送到自己的服务器
10 var http = require('http');
11 http.get('http://xxx/getWxHis', function(res) {//这个地址是自己服务器上的一个程序,目的是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxHis.php的原理。
12 res.on('data', function(chunk){
13 callback(chunk+serverResData);//将返回的代码插入到历史消息页面中,并返回显示出来
14 })
15 });
16 }catch(e){//如果上面的正则没有匹配到,那么这个页面内容可能是公众号历史消息页面向下翻动的第二页,因为历史消息第一页是html格式的,第二页就是json格式的。
17 //console.log("开始第一种页面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//这个函数和上面的一样是后文定义的,将第二页历史消息的json发送到自己的服务器
22 }
23 }catch(e){
24 console.log(e);//错误捕捉
25 }
26 callback(serverResData);//直接返回第二页json内容
27 }
28 }
29 //console.log("开始第一种页面爬取 结束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//当链接地址为公众号历史消息页面时(第二种页面形式)
31 try {
32 var reg = /var msgList = \'(.*?)\';/;//定义历史消息正则匹配规则(和第一种页面形式的正则不同)
33 var ret = reg.exec(serverResData.toString());//转换变量为string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//这个函数是后文定义的,将匹配到的历史消息json发送到自己的服务器
35 var http = require('http');
36 http.get('xxx/getWxHis', function(res) {//这个地址是自己服务器上的一个程序,目的是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxHis.php的原理。
37 res.on('data', function(chunk){
38 callback(chunk+serverResData);//将返回的代码插入到历史消息页面中,并返回显示出来
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二种页面表现形式的向下翻页后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//这个函数和上面的一样是后文定义的,将第二页历史消息的json发送到自己的服务器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//当链接地址为公众号文章阅读量和点赞量时
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函数是后文定义的,功能是将文章阅读量点赞量的json发送到服务器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//当链接地址为公众号文章时(rumor这个地址是公众号文章被辟谣了)
63 try {
64 var http = require('http');
65 http.get('http://xxx/getWxPost', function(res) {//这个地址是自己服务器上的另一个程序,目的是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxPost.php的原理。
66 res.on('data', function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 }
这里是一个简单的解释。微信公众号历史新闻页面的链接有两种形式:一种以/mp/getmasssendmsg开头,另一种以/mp/profile_ext开头。历史页面可以关闭。如果被拒绝,则会触发一个js事件,发送获取json数据(下一页内容)的请求。还有公众号文章的链接,以及文章的阅读量和喜欢的链接(返回json数据)。这些链接的形式是固定的,可以通过逻辑判断来区分。这里的问题是,如果所有的历史页面都需要爬取,怎么做。我的想法是模拟鼠标通过js向下滑动触发提交加载列表下一部分的请求。或者直接使用anyproxy分析滑动加载请求,直接将请求发送到微信服务器。但是一直存在一个问题,就是如何判断没有剩余数据。我正在抓取最新数据。我暂时没有这个需求,以后可能需要。有需要的可以试试。
querylist采集微信公众号文章(Python批量抓取公众号文章 )
采集交流 • 优采云 发表了文章 • 0 个评论 • 438 次浏览 • 2021-09-02 11:04
)
PS:如需Python学习资料,可点击下方链接自行获取
Python免费学习资料和群交流答案点击加入
爬取的方法有很多种。今天给大家分享一个更简单的方法,就是通过微信公众号后台的“超链接”功能进行爬取。可能有的朋友还没有接触过微信公众号后台,这里放个图让大家了解一下
这里有的朋友可能会说,我后台无法登录公众号,怎么办? ? ?
没关系,虽然每个爬虫的目的都是为了得到我们想要的结果,但这不是我们学习的重点。我们学习的重点是爬取过程,也就是我们如何获取目标数据,所以无法公开登录 看完这篇文章后,后台的朋友可能无法获取到最终爬取结果,但看完这篇文章你也会有所收获。
一、前期准备
选择要抓取的目标公众号
点击超链接-进入编辑超链接界面-输入我们需要抓取的搜索目标公众号
今天我们以“数据分析”公众号的爬取为例给大家介绍
点击公众号查看每个文章对应的标题信息
我们这次爬虫的目标是获取文章的标题和对应的链接。
二、开始爬取
爬虫的三个步骤:
1、请求网页
首先导入我们使用这个爬虫需要的第三方库
import re#用来解析网页
import requests#用来请求网页
import csv#用来保存数据
import time#用来设置每次爬取间隔的时间
找到我们抓取的目标数据所在的位置,点击搜索得到的包,获取目标URL和请求头信息
请求网页
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#请求头信息,这里cookie信息必须添加,否则得不到网页信息
url='https://mp.weixin.qq.com/cgi-b ... 39%3B
response=requests.get(url,headers=headers)#得到响应内容
response.encoding='utf-8'#设置响应内容为utf-8格式
html=response.text#得到网页的文本形式
print(html)
这里的请求头信息必须加上cookie信息,否则无法获取网页信息
网页的请求结果如下图所示。红框标记了我们需要的文章title 和文章 链接
2、分析网页
从网页响应结果我们可以看到,每个文章的标题和链接分别位于“title”标签和“cover”标签后面,所以我们可以直接使用正则表达式来解析它们
title=re.findall('"title":"(.*?)"',html)#得到文章标题
cover=re.findall('"cover":"(.*?)"',html)#得到文章链接
all=zip(title,cover)#利用zip方法,将两个列表中的数据一一对应
print(list(all))#list是对zip方法得到的数据进行解压
解析后的结果如下
3、保存数据
for data in all:#for循环遍历列表
time.sleep(3)#每爬取一篇文章间隔3秒,以防触发反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公众号文章.csv','a',encoding='utf-8-sig') as file:
#将数据保存到桌面
write=csv.writer(file)
write.writerow(data)
到此这个爬虫就完成了,我们来看看最终的结果
完整代码
import re#用来解析网页
import requests#用来请求网页
import csv#用来保存数据
import time#用来设置每次爬取间隔的时间
# 请求网页
index=0
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#请求头信息,这里cookie信息必须添加,否则得不到网页信息
for i in range(2):#设置for循环实现翻页,爬取多页内容,这里range括号内的参数可以更改
url='https://mp.weixin.qq.com/cgi-b ... 2Bstr(index)+'&count=5&fakeid=MjM5MjAxMDM4MA==&type=9&query=&token=59293242&lang=zh_CN&f=json&ajax=1'
response=requests.get(url,headers=headers)#得到响应内容
response.encoding='utf-8'#设置响应内容为utf-8格式
html=response.text#得到网页的文本形式
# 解析网页
title=re.findall('"title":"(.*?)"',html)#得到文章标题
cover=re.findall('"cover":"(.*?)"',html)#得到文章链接
all=zip(title,cover)#利用zip方法,将两个列表中的数据一一对应
# print(list(all))#list是对zip方法得到的数据进行解压
# 保存数据
for data in all:#for循环遍历列表
time.sleep(3)#每爬取一篇文章间隔3秒,以防出发反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公众号文章.csv','a',encoding='utf-8-sig') as file:
#将数据保存到桌面
write=csv.writer(file)
write.writerow(data)
pass
pass
index += 5 查看全部
querylist采集微信公众号文章(Python批量抓取公众号文章
)
PS:如需Python学习资料,可点击下方链接自行获取
Python免费学习资料和群交流答案点击加入
爬取的方法有很多种。今天给大家分享一个更简单的方法,就是通过微信公众号后台的“超链接”功能进行爬取。可能有的朋友还没有接触过微信公众号后台,这里放个图让大家了解一下

这里有的朋友可能会说,我后台无法登录公众号,怎么办? ? ?
没关系,虽然每个爬虫的目的都是为了得到我们想要的结果,但这不是我们学习的重点。我们学习的重点是爬取过程,也就是我们如何获取目标数据,所以无法公开登录 看完这篇文章后,后台的朋友可能无法获取到最终爬取结果,但看完这篇文章你也会有所收获。
一、前期准备
选择要抓取的目标公众号
点击超链接-进入编辑超链接界面-输入我们需要抓取的搜索目标公众号
今天我们以“数据分析”公众号的爬取为例给大家介绍

点击公众号查看每个文章对应的标题信息

我们这次爬虫的目标是获取文章的标题和对应的链接。
二、开始爬取
爬虫的三个步骤:
1、请求网页
首先导入我们使用这个爬虫需要的第三方库
import re#用来解析网页
import requests#用来请求网页
import csv#用来保存数据
import time#用来设置每次爬取间隔的时间
找到我们抓取的目标数据所在的位置,点击搜索得到的包,获取目标URL和请求头信息

请求网页
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#请求头信息,这里cookie信息必须添加,否则得不到网页信息
url='https://mp.weixin.qq.com/cgi-b ... 39%3B
response=requests.get(url,headers=headers)#得到响应内容
response.encoding='utf-8'#设置响应内容为utf-8格式
html=response.text#得到网页的文本形式
print(html)
这里的请求头信息必须加上cookie信息,否则无法获取网页信息
网页的请求结果如下图所示。红框标记了我们需要的文章title 和文章 链接

2、分析网页
从网页响应结果我们可以看到,每个文章的标题和链接分别位于“title”标签和“cover”标签后面,所以我们可以直接使用正则表达式来解析它们
title=re.findall('"title":"(.*?)"',html)#得到文章标题
cover=re.findall('"cover":"(.*?)"',html)#得到文章链接
all=zip(title,cover)#利用zip方法,将两个列表中的数据一一对应
print(list(all))#list是对zip方法得到的数据进行解压
解析后的结果如下

3、保存数据
for data in all:#for循环遍历列表
time.sleep(3)#每爬取一篇文章间隔3秒,以防触发反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公众号文章.csv','a',encoding='utf-8-sig') as file:
#将数据保存到桌面
write=csv.writer(file)
write.writerow(data)
到此这个爬虫就完成了,我们来看看最终的结果

完整代码
import re#用来解析网页
import requests#用来请求网页
import csv#用来保存数据
import time#用来设置每次爬取间隔的时间
# 请求网页
index=0
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#请求头信息,这里cookie信息必须添加,否则得不到网页信息
for i in range(2):#设置for循环实现翻页,爬取多页内容,这里range括号内的参数可以更改
url='https://mp.weixin.qq.com/cgi-b ... 2Bstr(index)+'&count=5&fakeid=MjM5MjAxMDM4MA==&type=9&query=&token=59293242&lang=zh_CN&f=json&ajax=1'
response=requests.get(url,headers=headers)#得到响应内容
response.encoding='utf-8'#设置响应内容为utf-8格式
html=response.text#得到网页的文本形式
# 解析网页
title=re.findall('"title":"(.*?)"',html)#得到文章标题
cover=re.findall('"cover":"(.*?)"',html)#得到文章链接
all=zip(title,cover)#利用zip方法,将两个列表中的数据一一对应
# print(list(all))#list是对zip方法得到的数据进行解压
# 保存数据
for data in all:#for循环遍历列表
time.sleep(3)#每爬取一篇文章间隔3秒,以防出发反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公众号文章.csv','a',encoding='utf-8-sig') as file:
#将数据保存到桌面
write=csv.writer(file)
write.writerow(data)
pass
pass
index += 5
querylist采集微信公众号文章(微信公众号采集二级目录生成工具是一款第三版巧妙伪原创来袭 )
采集交流 • 优采云 发表了文章 • 0 个评论 • 106 次浏览 • 2021-08-31 22:22
)
微信公众号采集二级目录生成工具是巧妙伪原创来击]微信公众号采集+巧妙伪原创+多cms版本的第三版,这个软件可以批量伪原创然后批量伪原创检查。这是非常值得注意的。请先在本地环境中测试。另外,这个软件不能自动编码。
类似软件
版本说明
软件地址
软件说明
1.本软件的作用:
为优采云站长准备的,也适合养站的人站群
2.运行过程:
采集微信文章,然后伪原创点击这些文章,然后更新为网站。整个过程是全自动的。无需打开后台,通过数据库发送。因此,需要生成静态页面。
3.与上一版本对比:和之前一样,微信公众号文章采集,之后使用采集伪原创。不知道这个算不算伪原创,不过确实达到了伪原创的效果,
这个新版本伪原创的玩法很巧妙。是翻译。先从中文翻译成英文,再从英文翻译成中文。可惜一天翻译量有限,可以自行更改IP地址。 (其实不适合更新太多,一天几条就可以了,一般如果是老站的话。关键词可以快速重新排名)
如何使用
新手站长不推荐这个,因为这个软件是用来偷懒的,新手最好不要偷懒,重点是怕新手不懂概念,遇到问题也解决不了问题。然后来找我。我也很弱,我也是菜鸟。我不想回答简单的问题。我不会复杂。
不是你不问我,而是希望你先百度一下,不要再问了。有时同样的问题可能会被问很多次,就会有脾气。我是这个德行的人,请不要摘下来。还是希望和大家一起进步。
查看全部
querylist采集微信公众号文章(微信公众号采集二级目录生成工具是一款第三版巧妙伪原创来袭
)
微信公众号采集二级目录生成工具是巧妙伪原创来击]微信公众号采集+巧妙伪原创+多cms版本的第三版,这个软件可以批量伪原创然后批量伪原创检查。这是非常值得注意的。请先在本地环境中测试。另外,这个软件不能自动编码。
类似软件
版本说明
软件地址
软件说明
1.本软件的作用:
为优采云站长准备的,也适合养站的人站群
2.运行过程:
采集微信文章,然后伪原创点击这些文章,然后更新为网站。整个过程是全自动的。无需打开后台,通过数据库发送。因此,需要生成静态页面。
3.与上一版本对比:和之前一样,微信公众号文章采集,之后使用采集伪原创。不知道这个算不算伪原创,不过确实达到了伪原创的效果,
这个新版本伪原创的玩法很巧妙。是翻译。先从中文翻译成英文,再从英文翻译成中文。可惜一天翻译量有限,可以自行更改IP地址。 (其实不适合更新太多,一天几条就可以了,一般如果是老站的话。关键词可以快速重新排名)
如何使用
新手站长不推荐这个,因为这个软件是用来偷懒的,新手最好不要偷懒,重点是怕新手不懂概念,遇到问题也解决不了问题。然后来找我。我也很弱,我也是菜鸟。我不想回答简单的问题。我不会复杂。
不是你不问我,而是希望你先百度一下,不要再问了。有时同样的问题可能会被问很多次,就会有脾气。我是这个德行的人,请不要摘下来。还是希望和大家一起进步。

querylist采集微信公众号文章(querylist采集微信公众号文章采集-微信号采集软件教程)
采集交流 • 优采云 发表了文章 • 0 个评论 • 155 次浏览 • 2021-08-31 08:02
querylist采集微信公众号文章采集-微信公众号采集软件是针对微信公众号进行内容抓取的工具,为快速采集微信公众号文章提供方便。具体请看下面的教程:准备工作安装并使用:pipinstallworkerget,抓取微信公众号文章可以从这里下载安装环境matplotlibimportpyplotsetup()创建项目并编译(暂时先不编译)#configpyplot.__version__为获取所需项目的version信息mats_version="1.0"将本地配置文件放到本地的users/username/.txt文件里。
#pathtothetemplatepyplot.__version__="1.0"用txt命令打开刚才编译生成的users/username/.txt文件mats_version="1.0"#template指定一个或多个预处理的目录mats_version_template="[+]pyglass"#当然也可以其他的打开users/username/.txt文件并下一步。
点击下一步,将指定的两个选项拖到configure阶段。#configsite接下来才可以开始编译config=pyplot.__version__+mats_version#编译config_align=["left","right"]将前端配置文件放在同一文件夹下,如果要先编译文件会将它在服务器的预处理目录下添加绝对路径,如果要在服务器编译文件才需要指定文件路径。
#windows-win="windows/config"安装flex-directory和httpcompiler-directory#matplotlib-import_pyplot.__version__="1.0"#编译config_alias=["flex-directory","httpcompiler-directory"]#加载到python环境中如果你的python版本超过了python的3.6,请使用更新版本。
如果你使用的是3.6,请使用下面的命令:sudoapt-getupdatesudoapt-getupgrade检查是否完成#gunbuild检查下flex-directory已安装,如果没有则需要编译flex-directory为你的系统c:\users\administrator\.bind:\flex-directory-project\python.exe#fastddf_project指定的variabled:\flex-directory-project\python.exe\flash.exe#letfs_perf_root()%pathfs_perf_root()%path\flex-directory-project\flash.exe\fps.exe#setpython_path=d:\flex-directory-project\python.exe\python.exe\python.exe.\flex-directory-project\flash.exeset_path=d:\flex-directory-project\python.exe\python.exe\python.exe#configurewww_imagemats_version="1.0。 查看全部
querylist采集微信公众号文章(querylist采集微信公众号文章采集-微信号采集软件教程)
querylist采集微信公众号文章采集-微信公众号采集软件是针对微信公众号进行内容抓取的工具,为快速采集微信公众号文章提供方便。具体请看下面的教程:准备工作安装并使用:pipinstallworkerget,抓取微信公众号文章可以从这里下载安装环境matplotlibimportpyplotsetup()创建项目并编译(暂时先不编译)#configpyplot.__version__为获取所需项目的version信息mats_version="1.0"将本地配置文件放到本地的users/username/.txt文件里。
#pathtothetemplatepyplot.__version__="1.0"用txt命令打开刚才编译生成的users/username/.txt文件mats_version="1.0"#template指定一个或多个预处理的目录mats_version_template="[+]pyglass"#当然也可以其他的打开users/username/.txt文件并下一步。
点击下一步,将指定的两个选项拖到configure阶段。#configsite接下来才可以开始编译config=pyplot.__version__+mats_version#编译config_align=["left","right"]将前端配置文件放在同一文件夹下,如果要先编译文件会将它在服务器的预处理目录下添加绝对路径,如果要在服务器编译文件才需要指定文件路径。
#windows-win="windows/config"安装flex-directory和httpcompiler-directory#matplotlib-import_pyplot.__version__="1.0"#编译config_alias=["flex-directory","httpcompiler-directory"]#加载到python环境中如果你的python版本超过了python的3.6,请使用更新版本。
如果你使用的是3.6,请使用下面的命令:sudoapt-getupdatesudoapt-getupgrade检查是否完成#gunbuild检查下flex-directory已安装,如果没有则需要编译flex-directory为你的系统c:\users\administrator\.bind:\flex-directory-project\python.exe#fastddf_project指定的variabled:\flex-directory-project\python.exe\flash.exe#letfs_perf_root()%pathfs_perf_root()%path\flex-directory-project\flash.exe\fps.exe#setpython_path=d:\flex-directory-project\python.exe\python.exe\python.exe.\flex-directory-project\flash.exeset_path=d:\flex-directory-project\python.exe\python.exe\python.exe#configurewww_imagemats_version="1.0。
querylist采集微信公众号文章(querylist采集微信公众号文章内容流量,楼上说的很清楚了)
采集交流 • 优采云 发表了文章 • 0 个评论 • 145 次浏览 • 2021-08-29 18:02
querylist采集微信公众号文章内容流量,
楼上说的很清楚了。我补充一点,将今日头条的浏览数据导入web,对用户进行画像,提高个性化推荐率。
我想知道你们具体怎么做的?我也做过今日头条的图文推荐系统。如果要完成公众号的推荐,个人认为你们至少需要:基础数据:头条号的账号信息,如头条号id、签约、健康度、粉丝量等。产品数据:今日头条推荐算法的介绍,使用pdf版的论文会好一些。现在已有今日头条的平台数据,可参考相关数据建立模型的准确率、召回率等指标,结合实际情况一起设计模型,根据实际情况对模型的泛化能力、特征工程等进行微调。
模型交叉:比如在泛化能力较差时对其他数据使用,进行特征交叉或者对某个数据进行偏僻标签,从而提高泛化能力。数据一般有:检索、关注、公众号历史文章等。相关性、相似性:模型初期需要考虑特征间相关性,建立连续、相关、正负相关度不等权重特征表达式。对权重特征进行聚类等方式提高泛化能力。精准关键词、转发量、评论量、点赞量、粉丝量。
只做字节跳动的话,今日头条可以说是非常完整的一套产品矩阵。另外一方面,使用推荐系统从业者,很多都会注意到背后离不开系统的底层架构的搭建。其中包括api接口,代码开发,系统优化,反馈系统以及业务的指导等。 查看全部
querylist采集微信公众号文章(querylist采集微信公众号文章内容流量,楼上说的很清楚了)
querylist采集微信公众号文章内容流量,
楼上说的很清楚了。我补充一点,将今日头条的浏览数据导入web,对用户进行画像,提高个性化推荐率。
我想知道你们具体怎么做的?我也做过今日头条的图文推荐系统。如果要完成公众号的推荐,个人认为你们至少需要:基础数据:头条号的账号信息,如头条号id、签约、健康度、粉丝量等。产品数据:今日头条推荐算法的介绍,使用pdf版的论文会好一些。现在已有今日头条的平台数据,可参考相关数据建立模型的准确率、召回率等指标,结合实际情况一起设计模型,根据实际情况对模型的泛化能力、特征工程等进行微调。
模型交叉:比如在泛化能力较差时对其他数据使用,进行特征交叉或者对某个数据进行偏僻标签,从而提高泛化能力。数据一般有:检索、关注、公众号历史文章等。相关性、相似性:模型初期需要考虑特征间相关性,建立连续、相关、正负相关度不等权重特征表达式。对权重特征进行聚类等方式提高泛化能力。精准关键词、转发量、评论量、点赞量、粉丝量。
只做字节跳动的话,今日头条可以说是非常完整的一套产品矩阵。另外一方面,使用推荐系统从业者,很多都会注意到背后离不开系统的底层架构的搭建。其中包括api接口,代码开发,系统优化,反馈系统以及业务的指导等。
爬取微信公众号怎么做?各种方法的汇总说明
采集交流 • 优采云 发表了文章 • 0 个评论 • 115 次浏览 • 2021-08-27 04:08
爬取微信公众号怎么做?各种方法的汇总说明
爬虫
我经常有朋友在公众号文章爬取方面需要帮助。这次我将各种方法做一个总结。
目前微信公众号的抓取方式主要有以下三种:
通过爬取第三方公众号文章聚网站并使用微信官方平台引用文章接口。通过抓包程序,分析微信app界面通过第三方公众号文章聚网站攀取访问公众号文章
微信公众号文章未提供搜外功能。直到2013年,微信投资搜狗后,搜狗搜索访问了微信公众号数据。从此您可以通过搜狗搜索浏览或查询相关公众号和@。文章。
域名为:
搜狗微信
可以直接搜索公众号或文章的关键词。部分热门公众号及时更新,几乎与微信同步。
公众号搜索
所以,可以使用搜狗微信界面抓取一些热门公众号,但是有些小众公众号搜索不到,而且搜狗的反抓取机制更新更频繁,获取数据的界面变化更快,有经常两三个月就调整一次,这样爬虫就容易挂了。这里,推荐使用selenium,爬得更省心。此外,搜狗对每个ip也有访问限制。访问太频ip会被封锁24小时,需要购买ip池处理。
还有一些其他公众号文章聚网站(比如门户),也有更新不及时或者收录的问题。毕竟搜狗这个亲儿子不好。通过微信公众平台引用文章interface
这个界面比较隐蔽,不能匿名访问。需要有官方账号。最好注册一个新的公众号,以免被屏蔽。
先说具体步骤:先登录微信公众号,进入首页选择新群发,然后点击自建图,在文章edit工具栏中找到超链接,如下图:
点击超链接
点击这个超链接按钮,会弹出一个对话框,选择链接输入法找到文章,如下图:
找到文章
这里可以输入公众号名称,回车后微信会返回匹配的公众号列表,如下图:
搜索公众号
然后点击你要抢的公众号,就会显示具体的文章列表,已经是倒序了。最新的文章是第一个。如下图:
文章List
微信的分页机制比较奇怪。每个公众号每个页面显示的数据项数量是不同的。分页爬行时需要处理。
通过chrome分析网络请求的数据,我们基本得到了我们想要的数据,文章链接、封面、发布日期、副标题等,如下图:
网络请求数据
好了,这个爬虫方法的原理讲完了,下面开始实际操作。
因为微信公众平台登录验证比较严格,输入密码后手机必须扫码确认才能登录,所以最好使用selenium进行自动化。具体微信界面的分析过程我就不一一列举了,直接贴上代码:
import re
import time
import random
import traceback
import requests
from selenium import webdriver
class Spider(object):
'''
微信公众号文章爬虫
'''
def __init__(self):
# 微信公众号账号
self.account = '286394973@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-b ... 51598,
# 从这里获取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 小时。 查看全部
爬取微信公众号怎么做?各种方法的汇总说明
爬虫
我经常有朋友在公众号文章爬取方面需要帮助。这次我将各种方法做一个总结。
目前微信公众号的抓取方式主要有以下三种:
通过爬取第三方公众号文章聚网站并使用微信官方平台引用文章接口。通过抓包程序,分析微信app界面通过第三方公众号文章聚网站攀取访问公众号文章
微信公众号文章未提供搜外功能。直到2013年,微信投资搜狗后,搜狗搜索访问了微信公众号数据。从此您可以通过搜狗搜索浏览或查询相关公众号和@。文章。
域名为:
搜狗微信
可以直接搜索公众号或文章的关键词。部分热门公众号及时更新,几乎与微信同步。
公众号搜索
所以,可以使用搜狗微信界面抓取一些热门公众号,但是有些小众公众号搜索不到,而且搜狗的反抓取机制更新更频繁,获取数据的界面变化更快,有经常两三个月就调整一次,这样爬虫就容易挂了。这里,推荐使用selenium,爬得更省心。此外,搜狗对每个ip也有访问限制。访问太频ip会被封锁24小时,需要购买ip池处理。
还有一些其他公众号文章聚网站(比如门户),也有更新不及时或者收录的问题。毕竟搜狗这个亲儿子不好。通过微信公众平台引用文章interface
这个界面比较隐蔽,不能匿名访问。需要有官方账号。最好注册一个新的公众号,以免被屏蔽。
先说具体步骤:先登录微信公众号,进入首页选择新群发,然后点击自建图,在文章edit工具栏中找到超链接,如下图:
点击超链接
点击这个超链接按钮,会弹出一个对话框,选择链接输入法找到文章,如下图:
找到文章
这里可以输入公众号名称,回车后微信会返回匹配的公众号列表,如下图:
搜索公众号
然后点击你要抢的公众号,就会显示具体的文章列表,已经是倒序了。最新的文章是第一个。如下图:
文章List
微信的分页机制比较奇怪。每个公众号每个页面显示的数据项数量是不同的。分页爬行时需要处理。
通过chrome分析网络请求的数据,我们基本得到了我们想要的数据,文章链接、封面、发布日期、副标题等,如下图:
网络请求数据
好了,这个爬虫方法的原理讲完了,下面开始实际操作。
因为微信公众平台登录验证比较严格,输入密码后手机必须扫码确认才能登录,所以最好使用selenium进行自动化。具体微信界面的分析过程我就不一一列举了,直接贴上代码:
import re
import time
import random
import traceback
import requests
from selenium import webdriver
class Spider(object):
'''
微信公众号文章爬虫
'''
def __init__(self):
# 微信公众号账号
self.account = '286394973@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-b ... 51598,
# 从这里获取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 小时。
querylist采集微信公众号文章(querylist采集微信公众号文章实现了关键词过滤及数据接口定制)
采集交流 • 优采云 发表了文章 • 0 个评论 • 137 次浏览 • 2021-09-13 15:02
querylist采集微信公众号文章,实现了每篇文章的单篇信息收集,并实现了相应的关键词过滤及数据接口定制。-middleware实现上述功能,其实非常简单,就是通过js包装相应的js,在微信公众号进行引入就可以做到了。另外,enjoyglobaljsresolve,这个是数据上传器。
会有一个优化空间可以让正常人(如我)也可以公众号转码大海捞针,但是只是很小一部分,因为微信方面根本没有对公众号做跨站请求的格式化。
我来解释一下使用爬虫抓取是不是会破坏原有用户关注的时间线规律,作为一个小白,我认为不会。首先应该没有爬虫什么时候回去爬这个“答案列表”,也就是能不能找到所有未被编辑的答案。微信这一点上是有点欠考虑的,因为我觉得如果数据传输得太大了,这对微信是一种隐患,因为这让它变得复杂而冗长,而且都是僵尸粉,就不要费那事了,最后一天的关注也会干扰微信阅读。
正常来说,整个原生浏览器的chrome或ie访问时间轴是按照推送最早时间来的,这样的话我们抓取正常用户关注人的话得在100秒内进行采集,但是这也有个小bug,我们大胆假设,如果微信是推送下午时间线的话就会麻烦的多,因为上午大部分人已经不看了。但是我用过一个同学的一个神奇插件,可以清除本地的缓存,这样就可以大大减少那些僵尸粉了,当然清除缓存本身肯定有问题的,就会造成页面被篡改,最后导致爬虫被屏蔽。
爬虫其实对用户来说是不是很麻烦,个人认为不是,各位大神可以借鉴一下:我用的插件是github-hi5881166/vczh:vczh.io现在觉得爬虫的整个思想和原理一样,只不过用js编写而已。有机会写一写爬虫,顺便写一下完整的采集方案,欢迎关注!。 查看全部
querylist采集微信公众号文章(querylist采集微信公众号文章实现了关键词过滤及数据接口定制)
querylist采集微信公众号文章,实现了每篇文章的单篇信息收集,并实现了相应的关键词过滤及数据接口定制。-middleware实现上述功能,其实非常简单,就是通过js包装相应的js,在微信公众号进行引入就可以做到了。另外,enjoyglobaljsresolve,这个是数据上传器。
会有一个优化空间可以让正常人(如我)也可以公众号转码大海捞针,但是只是很小一部分,因为微信方面根本没有对公众号做跨站请求的格式化。
我来解释一下使用爬虫抓取是不是会破坏原有用户关注的时间线规律,作为一个小白,我认为不会。首先应该没有爬虫什么时候回去爬这个“答案列表”,也就是能不能找到所有未被编辑的答案。微信这一点上是有点欠考虑的,因为我觉得如果数据传输得太大了,这对微信是一种隐患,因为这让它变得复杂而冗长,而且都是僵尸粉,就不要费那事了,最后一天的关注也会干扰微信阅读。
正常来说,整个原生浏览器的chrome或ie访问时间轴是按照推送最早时间来的,这样的话我们抓取正常用户关注人的话得在100秒内进行采集,但是这也有个小bug,我们大胆假设,如果微信是推送下午时间线的话就会麻烦的多,因为上午大部分人已经不看了。但是我用过一个同学的一个神奇插件,可以清除本地的缓存,这样就可以大大减少那些僵尸粉了,当然清除缓存本身肯定有问题的,就会造成页面被篡改,最后导致爬虫被屏蔽。
爬虫其实对用户来说是不是很麻烦,个人认为不是,各位大神可以借鉴一下:我用的插件是github-hi5881166/vczh:vczh.io现在觉得爬虫的整个思想和原理一样,只不过用js编写而已。有机会写一写爬虫,顺便写一下完整的采集方案,欢迎关注!。
querylist采集微信公众号文章(工具Python3+版本Fiddler下载地址(图)下载)
采集交流 • 优采云 发表了文章 • 0 个评论 • 146 次浏览 • 2021-09-11 08:14
代码测试有效期至2019/03/08
微信爬虫步骤:
必需品:
我的微信公众号Fiddler抓包工具Python 3+版
提琴手下载链接
HTTP 代理工具也称为抓包工具。主流的抓包工具是Windows平台的Fiddler,macOS平台的Charles,阿里开源了一个叫AnyProxy的工具。它们的基本原理类似,即通过在移动客户端上设置代理IP和端口,所有来自客户端的HTTP和HTTPS请求都会通过代理工具。在代理工具中,您可以清楚地看到每个请求。然后可以分析详细信息以找出每个请求的构造方式。搞清楚这些之后,我们就可以用Python来模拟发起请求了,然后就可以得到我们想要的数据了。
安装包超过4M。配置前,首先确保您的手机和电脑在同一个局域网内。如果不在同一个局域网内,可以购买便携式WiFi,在电脑上搭建一个极简的无线路由器。一路点击下一步,完成安装过程。
Fiddler 配置选择工具> Fiddler 选项> 连接 Fiddler 的默认端口为8888,如果该端口已经被其他程序占用,需要手动更改,勾选允许远程计算机连接,其他选项即可。 , 配置更新后记得重启Fiddler。一定要重启Fiddler,否则代理将失效。 .接下来需要配置手机,但是这里微信有pc客户端,所以不需要配置手机
现在打开微信,随机选择一个公众号,进入公众号的【查看历史信息】
同时观察 Fiddler 的主面板。当微信从公众号介绍页面进入历史消息页面时,已经可以在Fiddler上看到请求进来了。这些请求是微信APP向服务器发送的请求。现在简单介绍一下这个请求面板上各个模块的含义。
我将上面的主面板分成了 7 个块。需要了解每个区块的内容,然后才可以使用Python代码模拟微信请求。 1、服务器响应结果,200表示服务器成功响应了2、请求协议,微信请求协议是基于HTTPS的,所以之前一定要配置好,否则看不到HTTPS请求。 3、微信服务器主机名4、请求路径5、请求行,包括请求方法(GET)、请求协议(HTTP/1.1)、请求路径(/mp/profile_ext...)一长串参数)6、收录cookie信息的请求头。7、微信服务器返回的响应数据,我们切换到TextView和WebView看看返回的数据是什么样子的。
TextView模式下的预览效果为服务器返回的HTML源代码
WebView 模式是 HTML 代码的渲染效果。其实就是我们在手机微信上看到的效果,但是因为风格欠缺,没有看到手机上的美化效果。
如果服务器返回的是Json格式或者XML,也可以切换到对应的页面进行预览查看。
开始抓取:
1、拥有微信公众号
登录微信公众号,在菜单栏:素材管理—>新建素材,出现如下页面
F12查看网络,点击图中位置
公众号和user-Agent的cookies如下
Fakeid和token获取如下: 查看全部
querylist采集微信公众号文章(工具Python3+版本Fiddler下载地址(图)下载)
代码测试有效期至2019/03/08
微信爬虫步骤:
必需品:
我的微信公众号Fiddler抓包工具Python 3+版
提琴手下载链接
HTTP 代理工具也称为抓包工具。主流的抓包工具是Windows平台的Fiddler,macOS平台的Charles,阿里开源了一个叫AnyProxy的工具。它们的基本原理类似,即通过在移动客户端上设置代理IP和端口,所有来自客户端的HTTP和HTTPS请求都会通过代理工具。在代理工具中,您可以清楚地看到每个请求。然后可以分析详细信息以找出每个请求的构造方式。搞清楚这些之后,我们就可以用Python来模拟发起请求了,然后就可以得到我们想要的数据了。
安装包超过4M。配置前,首先确保您的手机和电脑在同一个局域网内。如果不在同一个局域网内,可以购买便携式WiFi,在电脑上搭建一个极简的无线路由器。一路点击下一步,完成安装过程。
Fiddler 配置选择工具> Fiddler 选项> 连接 Fiddler 的默认端口为8888,如果该端口已经被其他程序占用,需要手动更改,勾选允许远程计算机连接,其他选项即可。 , 配置更新后记得重启Fiddler。一定要重启Fiddler,否则代理将失效。 .接下来需要配置手机,但是这里微信有pc客户端,所以不需要配置手机
现在打开微信,随机选择一个公众号,进入公众号的【查看历史信息】
同时观察 Fiddler 的主面板。当微信从公众号介绍页面进入历史消息页面时,已经可以在Fiddler上看到请求进来了。这些请求是微信APP向服务器发送的请求。现在简单介绍一下这个请求面板上各个模块的含义。

我将上面的主面板分成了 7 个块。需要了解每个区块的内容,然后才可以使用Python代码模拟微信请求。 1、服务器响应结果,200表示服务器成功响应了2、请求协议,微信请求协议是基于HTTPS的,所以之前一定要配置好,否则看不到HTTPS请求。 3、微信服务器主机名4、请求路径5、请求行,包括请求方法(GET)、请求协议(HTTP/1.1)、请求路径(/mp/profile_ext...)一长串参数)6、收录cookie信息的请求头。7、微信服务器返回的响应数据,我们切换到TextView和WebView看看返回的数据是什么样子的。
TextView模式下的预览效果为服务器返回的HTML源代码

WebView 模式是 HTML 代码的渲染效果。其实就是我们在手机微信上看到的效果,但是因为风格欠缺,没有看到手机上的美化效果。

如果服务器返回的是Json格式或者XML,也可以切换到对应的页面进行预览查看。
开始抓取:
1、拥有微信公众号
登录微信公众号,在菜单栏:素材管理—>新建素材,出现如下页面

F12查看网络,点击图中位置

公众号和user-Agent的cookies如下

Fakeid和token获取如下:
querylist采集微信公众号文章(puppeteer实战:爬取搜狗微信搜索的公众号文章并写入Excel )
采集交流 • 优采云 发表了文章 • 0 个评论 • 351 次浏览 • 2021-09-11 08:12
)
在上一本书中提到,使用puppeteer库进行截图操作只是简单的展示了puppeteer的特性和基本用法。这次我们来谈谈使用puppeteer抓取页面数据并写入Excel。
Puppeteer实战:抓取搜狗微信搜索到的公众号文章,写入Excel
背景一:搜狗搜索现在有了根据关键词查询微信公众号文章的功能,而我们要做的就是爬下指定关键词的文章,因为这个需求来自我 来自公司业务部,所以为了方便同学们操作查看,还需要把爬取的数据放到Excel中。
用过之后,感觉这个东西并不复杂,只要懂API就行。我认为复杂的是需要考虑各种基本情况。
首先一般网站已经进行了防爬处理。我们需要以合理的方式绕过它。比如搜狗搜索就是。一开始,我打算读取a标签的href属性,然后直接在浏览器中打开链接。但是在尝试之后,我发现我能够做到这一点。估计搜狗做了一些反爬行动。这样做将报告 IP 异常。所以我放弃了,使用puppeteer的page.click方法来解决这个问题,因为puppeteer本质上是通过模拟真实用户的点击操作来实现的,所以不会受到反爬机制的影响。
另外一个是因为爬虫是微信文章,我们还需要考虑微信文章本身的一些情况,比如文章被发布者删除或移动,文章被举报,或者这个文章时分享另一篇文章文章Wait...
总之,我觉得用puppeteer写的爬虫脚本跟业务是强耦合的,所以我个人觉得代码本身没有参考意义。不过还是可以看看自己在写过程中遇到的各种奇怪的问题,或许可以为大家解决遇到的问题提供一些思路。
完整代码如下:
exportExcel 导出 Excel:
const fs = require("fs");
const xlsx = require("node-xlsx");
module.exports = {
async exportExcel(fileName, data) {
let dataArr = [];
let title = ["文章标题", "文章URL", "作者名(公众号)", "发布日期", "内容"];
dataArr.push(title);
data.forEach(curr => {
dataArr.push([
curr.title,
curr.url,
curr.account,
curr.publishTime,
curr.content
]);
});
const options = {
"!cols": [
{ wch: 70 },
{ wch: 100 },
{ wch: 30 },
{ wch: 30 },
{ wch: 200 }
]
};
// 写xlsx
var buffer = await xlsx.build(
[
{
name: "sheet1",
data: dataArr
}
],
options
);
await fs.writeFile(`./dist/data1【${fileName}】.xlsx`, buffer, function(
err
) {
if (err) throw err;
console.log("写入成功!");
});
}
}; 查看全部
querylist采集微信公众号文章(puppeteer实战:爬取搜狗微信搜索的公众号文章并写入Excel
)
在上一本书中提到,使用puppeteer库进行截图操作只是简单的展示了puppeteer的特性和基本用法。这次我们来谈谈使用puppeteer抓取页面数据并写入Excel。
Puppeteer实战:抓取搜狗微信搜索到的公众号文章,写入Excel
背景一:搜狗搜索现在有了根据关键词查询微信公众号文章的功能,而我们要做的就是爬下指定关键词的文章,因为这个需求来自我 来自公司业务部,所以为了方便同学们操作查看,还需要把爬取的数据放到Excel中。
用过之后,感觉这个东西并不复杂,只要懂API就行。我认为复杂的是需要考虑各种基本情况。
首先一般网站已经进行了防爬处理。我们需要以合理的方式绕过它。比如搜狗搜索就是。一开始,我打算读取a标签的href属性,然后直接在浏览器中打开链接。但是在尝试之后,我发现我能够做到这一点。估计搜狗做了一些反爬行动。这样做将报告 IP 异常。所以我放弃了,使用puppeteer的page.click方法来解决这个问题,因为puppeteer本质上是通过模拟真实用户的点击操作来实现的,所以不会受到反爬机制的影响。
另外一个是因为爬虫是微信文章,我们还需要考虑微信文章本身的一些情况,比如文章被发布者删除或移动,文章被举报,或者这个文章时分享另一篇文章文章Wait...
总之,我觉得用puppeteer写的爬虫脚本跟业务是强耦合的,所以我个人觉得代码本身没有参考意义。不过还是可以看看自己在写过程中遇到的各种奇怪的问题,或许可以为大家解决遇到的问题提供一些思路。
完整代码如下:
exportExcel 导出 Excel:
const fs = require("fs");
const xlsx = require("node-xlsx");
module.exports = {
async exportExcel(fileName, data) {
let dataArr = [];
let title = ["文章标题", "文章URL", "作者名(公众号)", "发布日期", "内容"];
dataArr.push(title);
data.forEach(curr => {
dataArr.push([
curr.title,
curr.url,
curr.account,
curr.publishTime,
curr.content
]);
});
const options = {
"!cols": [
{ wch: 70 },
{ wch: 100 },
{ wch: 30 },
{ wch: 30 },
{ wch: 200 }
]
};
// 写xlsx
var buffer = await xlsx.build(
[
{
name: "sheet1",
data: dataArr
}
],
options
);
await fs.writeFile(`./dist/data1【${fileName}】.xlsx`, buffer, function(
err
) {
if (err) throw err;
console.log("写入成功!");
});
}
};
querylist采集微信公众号文章(如何抓取微信公众号的所有文章 )
采集交流 • 优采云 发表了文章 • 0 个评论 • 340 次浏览 • 2021-09-07 17:59
)
准备阶段
为了实现这个爬虫,我们需要使用以下工具
另外,这个爬虫程序使用了微信公众号后台编辑素材接口。原理是当我们插入超链接时,微信会调用一个特殊的API(见下图)来获取指定公众号的文章列表。因此,我们还需要有一个官方帐号。
图1
正式开始
我们需要登录微信公众号,点击素材管理,点击新建图文消息,然后点击上面的超链接。
图2
接下来,按 F12,打开 Chrome 的开发者工具,然后选择网络
图3
此时,在之前的超链接界面,点击“选择其他公众号”,输入你需要抓取的公众号(例如中国移动)
图4
这时候之前的Network会刷新一些链接,其中“appmsg”开头的内容就是我们需要分析的
图5
我们解析请求的 URL
https://mp.weixin.qq.com/cgi-b ... x%3D1
分为三个部分
通过不断浏览下一页,我们发现每次只有begin会改变,每次增加5,这就是count的值。
接下来我们使用Python获取同样的资源,但是直接运行下面的代码是无法获取资源的。
import requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {'base_resp': {'ret': 200003, 'err_msg': 'invalid session'}}
之所以能在浏览器上获取资源,是因为我们登录了微信公众号后台。而Python没有我们的登录信息,所以请求无效。我们需要在requests中设置headers参数,并传入Cookie和User-Agent来模拟登录
由于头信息的内容每次都会变化,所以我把这些内容放在一个单独的文件中,即“wechat.yaml”,信息如下
cookie: ua_id=wuzWM9FKE14...
user_agent: Mozilla/5.0...
你只需要稍后阅读
# 读取cookie和user_agent
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config['cookie'],
"User-Agent": config['user_agent']
}
requests.get(url, headers=headers, verify=False).json()
在返回的JSON中,我们可以看到每个文章的标题(title)、摘要(digest)、链接(link)、推送时间(update_time)和封面地址(cover)。
appmsgid 是每条推文的唯一标识符,aid 是每条推文的唯一标识符。
图6
其实除了cookies,URL中的token参数也会用来限制爬虫,所以上面代码的输出很可能是{'base_resp': {'ret': 200040,'err_msg ':'无效的 csrf 令牌'}}
接下来,我们编写一个循环来获取所有文章 JSON 并保存。
import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config['cookie'],
"User-Agent": config['user_agent']
}
# 请求参数
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config['fakeid'],
"type": "9",
"token": config['token'],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放结果
app_msg_list = []
# 在不知道公众号有多少文章的情况下,使用while语句
# 也方便重新运行时设置页数
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 随机暂停几秒,避免过快的请求导致过快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()['base_resp']['ret'] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
break
# 如果返回的内容中为空则结束
if len(resp.json()['app_msg_list']) == 0:
print("all ariticle parsed")
break
app_msg_list.append(resp.json())
# 翻页
i += 1
在上面的代码中,我还在“wechat.yaml”文件中存储了fakeid和token。这是因为 fakeid 是每个公众号的唯一标识符,令牌会经常变化。这个信息可以通过解析URL获取,也可以在开发者工具中查看
图7
爬取一段时间后,会遇到以下问题
{'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
此时在公众号后台尝试插入超链接时,会遇到如下提示
图8
这是公众号的流量限制,通常需要等待30-60分钟才能继续。为了完美处理这个问题,你可能需要申请多个公众号,可能需要对抗微信公众号登录系统,或者你可能需要设置代理池。
但是我不需要工业级的爬虫,我只想爬取自己的公众号信息,所以等了一个小时,再次登录公众号,获取cookie和token,运行。我不想用自己的兴趣挑战别人的工作。
最后,将结果保存为 JSON 格式。
# 保存结果为JSON
json_name = "mp_data_{}.json".format(str(begin))
with open(json_name, "w") as file:
file.write(json.dumps(app_msg_list, indent=2, ensure_ascii=False))
或者提取文章identifier、标题、网址、发布时间四列,保存为CSV。
info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list)) 查看全部
querylist采集微信公众号文章(如何抓取微信公众号的所有文章
)
准备阶段
为了实现这个爬虫,我们需要使用以下工具
另外,这个爬虫程序使用了微信公众号后台编辑素材接口。原理是当我们插入超链接时,微信会调用一个特殊的API(见下图)来获取指定公众号的文章列表。因此,我们还需要有一个官方帐号。
图1
正式开始
我们需要登录微信公众号,点击素材管理,点击新建图文消息,然后点击上面的超链接。
图2
接下来,按 F12,打开 Chrome 的开发者工具,然后选择网络
图3
此时,在之前的超链接界面,点击“选择其他公众号”,输入你需要抓取的公众号(例如中国移动)
图4
这时候之前的Network会刷新一些链接,其中“appmsg”开头的内容就是我们需要分析的
图5
我们解析请求的 URL
https://mp.weixin.qq.com/cgi-b ... x%3D1
分为三个部分
通过不断浏览下一页,我们发现每次只有begin会改变,每次增加5,这就是count的值。
接下来我们使用Python获取同样的资源,但是直接运行下面的代码是无法获取资源的。
import requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {'base_resp': {'ret': 200003, 'err_msg': 'invalid session'}}
之所以能在浏览器上获取资源,是因为我们登录了微信公众号后台。而Python没有我们的登录信息,所以请求无效。我们需要在requests中设置headers参数,并传入Cookie和User-Agent来模拟登录
由于头信息的内容每次都会变化,所以我把这些内容放在一个单独的文件中,即“wechat.yaml”,信息如下
cookie: ua_id=wuzWM9FKE14...
user_agent: Mozilla/5.0...
你只需要稍后阅读
# 读取cookie和user_agent
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config['cookie'],
"User-Agent": config['user_agent']
}
requests.get(url, headers=headers, verify=False).json()
在返回的JSON中,我们可以看到每个文章的标题(title)、摘要(digest)、链接(link)、推送时间(update_time)和封面地址(cover)。
appmsgid 是每条推文的唯一标识符,aid 是每条推文的唯一标识符。
图6
其实除了cookies,URL中的token参数也会用来限制爬虫,所以上面代码的输出很可能是{'base_resp': {'ret': 200040,'err_msg ':'无效的 csrf 令牌'}}
接下来,我们编写一个循环来获取所有文章 JSON 并保存。
import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config['cookie'],
"User-Agent": config['user_agent']
}
# 请求参数
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config['fakeid'],
"type": "9",
"token": config['token'],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放结果
app_msg_list = []
# 在不知道公众号有多少文章的情况下,使用while语句
# 也方便重新运行时设置页数
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 随机暂停几秒,避免过快的请求导致过快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()['base_resp']['ret'] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
break
# 如果返回的内容中为空则结束
if len(resp.json()['app_msg_list']) == 0:
print("all ariticle parsed")
break
app_msg_list.append(resp.json())
# 翻页
i += 1
在上面的代码中,我还在“wechat.yaml”文件中存储了fakeid和token。这是因为 fakeid 是每个公众号的唯一标识符,令牌会经常变化。这个信息可以通过解析URL获取,也可以在开发者工具中查看
图7
爬取一段时间后,会遇到以下问题
{'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
此时在公众号后台尝试插入超链接时,会遇到如下提示
图8
这是公众号的流量限制,通常需要等待30-60分钟才能继续。为了完美处理这个问题,你可能需要申请多个公众号,可能需要对抗微信公众号登录系统,或者你可能需要设置代理池。
但是我不需要工业级的爬虫,我只想爬取自己的公众号信息,所以等了一个小时,再次登录公众号,获取cookie和token,运行。我不想用自己的兴趣挑战别人的工作。
最后,将结果保存为 JSON 格式。
# 保存结果为JSON
json_name = "mp_data_{}.json".format(str(begin))
with open(json_name, "w") as file:
file.write(json.dumps(app_msg_list, indent=2, ensure_ascii=False))
或者提取文章identifier、标题、网址、发布时间四列,保存为CSV。
info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list))
querylist采集微信公众号文章( IOP出版社与Charlesworth集团合作成功研发“文章追踪”功能 )
采集交流 • 优采云 发表了文章 • 0 个评论 • 208 次浏览 • 2021-09-07 02:17
IOP出版社与Charlesworth集团合作成功研发“文章追踪”功能
)
IOP Publishing 微信公众号新推出“文章tracking”功能
2020 年 11 月 27 日加布里埃尔
此处提供此页面的英文版本
近期,IOP Publishing与Charlesworth Group合作,成功将Charlesworth自主研发的微信产品——“文章tracking”功能纳入“IOP Publishing”微信公众号功能菜单。现在,所有向IOP Press期刊投稿的中国作者都可以通过微信使用公众号“文章tracking”功能,实时查看文章投稿状态。以前,作者只能登录IOP Science网站查看文章状态。
通过Charlesworth Group提供的技术支持,来自中国的作者可以在公众号提交文章ID,立即获得文章的状态信息。使用微信追踪文章大大降低了中国用户在国外访问网站时可能遇到的速度和连接问题。同时,将“文章tracking”功能纳入微信,大大提升了中国作者社区的用户体验,助力“IOP出版社”公众号成为中国作者获取信息的重要平台和服务。
“文章tracking”功能的网关由 Charlesworth Group 开发。该技术获得了 2020 年出版业 ALPSP 创新奖的提名。可以将发布者自己的平台和后台系统集成到微信中,并提供营销工具和分析仪表盘,让发布者可以管理其微信公众号的方方面面。
查尔斯沃思集团首席执行官迈克尔·埃文斯表示:“IOP Publishing 在中国拥有广泛的客户群。通过与查尔斯沃思集团合作开发该技术解决方案,作者可以从“IOP Publishing”的微信公众号获取信息。更多服务。通过整合‘文章tracking’,IOP Press的中国作者可以获得更好的用户体验,并与其他已添加此功能的出版商一起在公众号中享受微信查看文章方便快捷状态。”
操作指南第一步
查看全部
querylist采集微信公众号文章(
IOP出版社与Charlesworth集团合作成功研发“文章追踪”功能
)
IOP Publishing 微信公众号新推出“文章tracking”功能
2020 年 11 月 27 日加布里埃尔

此处提供此页面的英文版本
近期,IOP Publishing与Charlesworth Group合作,成功将Charlesworth自主研发的微信产品——“文章tracking”功能纳入“IOP Publishing”微信公众号功能菜单。现在,所有向IOP Press期刊投稿的中国作者都可以通过微信使用公众号“文章tracking”功能,实时查看文章投稿状态。以前,作者只能登录IOP Science网站查看文章状态。
通过Charlesworth Group提供的技术支持,来自中国的作者可以在公众号提交文章ID,立即获得文章的状态信息。使用微信追踪文章大大降低了中国用户在国外访问网站时可能遇到的速度和连接问题。同时,将“文章tracking”功能纳入微信,大大提升了中国作者社区的用户体验,助力“IOP出版社”公众号成为中国作者获取信息的重要平台和服务。
“文章tracking”功能的网关由 Charlesworth Group 开发。该技术获得了 2020 年出版业 ALPSP 创新奖的提名。可以将发布者自己的平台和后台系统集成到微信中,并提供营销工具和分析仪表盘,让发布者可以管理其微信公众号的方方面面。
查尔斯沃思集团首席执行官迈克尔·埃文斯表示:“IOP Publishing 在中国拥有广泛的客户群。通过与查尔斯沃思集团合作开发该技术解决方案,作者可以从“IOP Publishing”的微信公众号获取信息。更多服务。通过整合‘文章tracking’,IOP Press的中国作者可以获得更好的用户体验,并与其他已添加此功能的出版商一起在公众号中享受微信查看文章方便快捷状态。”
操作指南第一步

querylist采集微信公众号文章(搜狗微信中会怎么样?小编讲解思路及讲解方法)
采集交流 • 优采云 发表了文章 • 0 个评论 • 196 次浏览 • 2021-09-07 02:12
这个文章主要介绍python如何抓取搜狗微信公众号文章永久链接。小编觉得还不错。现在分享给大家,给大家参考。跟着小编一起来看看吧。
本文主要讲解思路,代码部分请自行解决
获取搜狗微信当天信息排名
指定输入关键字,通过scrapy抓取公众号
登录微信公众号链接获取cookie信息
由于微信公众平台模拟登录未解决,需要手动登录实时获取cookie信息
固定链接可以在这里转换
代码部分
def parse(self, response):
item = SougouItem()
item["title"] = response.xpath('//title/text()').extract_first()
print("**"*5, item["title"],"**"*5)
name = input("----------请输入需要搜索的信息:")
print(name)
url = "http://weixin.sogou.com/weixin ... ot%3B
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name":name})
搜狗微信访问频率会过快导致需要输入验证码
def parse_two(self, response):
print(response.url)
name = response.meta["name"]
resp = response.xpath('//ul[@class="news-list"]/li')
s = 1
# 判断url 是否是需要输入验证码
res = re.search("from", response.url) # 需要验证码验证
if res:
print(response.url)
img = response.xpath('//img/@src').extract()
print(img)
url_img = "http://weixin.sogou.com/antispider/"+ img[1]
print(url_img)
url_img = requests.get(url_img).content with open("urli.jpg", "wb") as f:
f.write(url_img) # f.close()
img = input("请输入验证码:")
print(img)
url = response.url
r = re.search(r"from=(.*)",url).group(1)
print(r)
postData = {"c":img,"r":r,"v":"5"}
url = "http://weixin.sogou.com/antispider/thank.php"
yield scrapy.FormRequest(url=url, formdata=postData, callback=self.parse_two,meta={"name":name})
# 不需要验证码验证
else:
for res, i in zip(resp, range(1, 10)):
item = SougouItem()
item["url"] = res.xpath('.//p[1]/a/@href').extract_first()
item["name"] = name
print("第%d条" % i) # 转化永久链接
headers = {"Host": "mp.weixin.qq.com",
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cookie": "noticeLoginFlag=1; pgv_pvi=5269297152; pt2gguin=o1349184918; RK=ph4smy/QWu; ptcz=f3eb6ede5db921d0ada7f1713e6d1ca516d200fec57d602e677245490fcb7f1e; pgv_pvid=1033302674; o_cookie=1349184918; pac_uid=1_1349184918; ua_id=4nooSvHNkTOjpIpgAAAAAFX9OSNcLApfsluzwfClLW8=; mm_lang=zh_CN; noticeLoginFlag=1; remember_acct=Liangkai318; rewardsn=; wxtokenkey=777; pgv_si=s1944231936; uuid=700c40c965347f0925a8e8fdcc1e003e; ticket=023fc8861356b01527983c2c4765ef80903bf3d7; ticket_id=gh_6923d82780e4; cert=L_cE4aRdaZeDnzao3xEbMkcP3Kwuejoi; data_bizuin=3075391054; bizuin=3208078327; data_ticket=XrzOnrV9Odc80hJLtk8vFjTLI1vd7kfKJ9u+DzvaeeHxZkMXbv9kcWk/Pmqx/9g7; slave_sid=SWRKNmFyZ1NkM002Rk9NR0RRVGY5VFdMd1lXSkExWGtPcWJaREkzQ1BESEcyQkNLVlQ3YnB4OFNoNmtRZzdFdGpnVGlHak9LMjJ5eXBNVEgxZDlZb1BZMnlfN1hKdnJsV0NKallsQW91Zjk5Y3prVjlQRDNGYUdGUWNFNEd6eTRYT1FSOEQxT0MwR01Ja0Vo; slave_user=gh_6923d82780e4; xid=7b2245140217dbb3c5c0a552d46b9664; openid2ticket_oTr5Ot_B4nrDSj14zUxlXg8yrzws=D/B6//xK73BoO+mKE2EAjdcgIXNPw/b5PEDTDWM6t+4="}
respon = requests.get(url=item["url"]).content
gongzhongh = etree.HTML(respon).xpath('//a[@id="post-user"]/text()')[0]
# times = etree.HTML(respon).xpath('//*[@id="post-date"]/text()')[0]
title_one = etree.HTML(respon).xpath('//*[@id="activity-name"]/text()')[0].split()[0]
print(gongzhongh, title_one)
item["tit"] = title_one
item["gongzhongh"] = gongzhongh
# item["times"] = times
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + gongzhongh + "&begin=0&count=5"
# wenzhang_url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
resp = requests.get(url=url, headers=headers).content
print(resp)
faskeids = json.loads(resp.decode("utf-8"))
try:
list_fask = faskeids["list"] except Exception as f:
print("**********[INFO]:请求失败,登陆失败, 请重新登陆*************")
return
for fask in list_fask:
fakeid = fask["fakeid"]
nickname = fask["nickname"] if nickname == item["gongzhongh"]:
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + fakeid + "&type=9"
# url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] +"&fakeid=" + fakeid +"&type=9"
resp = requests.get(url=url, headers=headers).content
app = json.loads(resp.decode("utf-8"))["app_msg_list"]
item["aid"] = app["aid"]
item["appmsgid"] = app["appmsgid"]
item["cover"] = app["cover"]
item["digest"] = app["digest"]
item["url_link"] = app["link"]
item["tit"] = app["title"]
print(item)
time.sleep(10) # time.sleep(5)
# dict_wengzhang = json.loads(resp.decode("utf-8"))
# app_msg_list = dict_wengzhang["app_msg_list"]
# print(len(app_msg_list))
# for app in app_msg_list:
# print(app)
# title = app["title"]
# if title == item["tit"]:
# item["url_link"] = app["link"]
# updata_time = app["update_time"]
# item["times"] = time.strftime("%Y-%m-%d %H:%M:%S", updata_time)
# print("最终链接为:", item["url_link"])
# yield item
# else:
# print(app["title"], item["tit"])
# print("与所选文章不同放弃")
# # item["tit"] = app["title"]
# # item["url_link"] = app["link"]
# # yield item
# else:
# print(nickname, item["gongzhongh"])
# print("与所选公众号不一致放弃")
# time.sleep(100)
# yield item
if response.xpath('//a[@class="np"]'):
s += 1
url = "http://weixin.sogou.com/weixin ... 2Bstr(s) # time.sleep(3)
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name": name})
以上是python如何抓取搜狗微信公众号文章permanent链接的详细内容。更多详情请关注Gxl其他相关文章! 查看全部
querylist采集微信公众号文章(搜狗微信中会怎么样?小编讲解思路及讲解方法)
这个文章主要介绍python如何抓取搜狗微信公众号文章永久链接。小编觉得还不错。现在分享给大家,给大家参考。跟着小编一起来看看吧。
本文主要讲解思路,代码部分请自行解决
获取搜狗微信当天信息排名
指定输入关键字,通过scrapy抓取公众号
登录微信公众号链接获取cookie信息
由于微信公众平台模拟登录未解决,需要手动登录实时获取cookie信息




固定链接可以在这里转换
代码部分
def parse(self, response):
item = SougouItem()
item["title"] = response.xpath('//title/text()').extract_first()
print("**"*5, item["title"],"**"*5)
name = input("----------请输入需要搜索的信息:")
print(name)
url = "http://weixin.sogou.com/weixin ... ot%3B
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name":name})
搜狗微信访问频率会过快导致需要输入验证码
def parse_two(self, response):
print(response.url)
name = response.meta["name"]
resp = response.xpath('//ul[@class="news-list"]/li')
s = 1
# 判断url 是否是需要输入验证码
res = re.search("from", response.url) # 需要验证码验证
if res:
print(response.url)
img = response.xpath('//img/@src').extract()
print(img)
url_img = "http://weixin.sogou.com/antispider/"+ img[1]
print(url_img)
url_img = requests.get(url_img).content with open("urli.jpg", "wb") as f:
f.write(url_img) # f.close()
img = input("请输入验证码:")
print(img)
url = response.url
r = re.search(r"from=(.*)",url).group(1)
print(r)
postData = {"c":img,"r":r,"v":"5"}
url = "http://weixin.sogou.com/antispider/thank.php"
yield scrapy.FormRequest(url=url, formdata=postData, callback=self.parse_two,meta={"name":name})
# 不需要验证码验证
else:
for res, i in zip(resp, range(1, 10)):
item = SougouItem()
item["url"] = res.xpath('.//p[1]/a/@href').extract_first()
item["name"] = name
print("第%d条" % i) # 转化永久链接
headers = {"Host": "mp.weixin.qq.com",
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cookie": "noticeLoginFlag=1; pgv_pvi=5269297152; pt2gguin=o1349184918; RK=ph4smy/QWu; ptcz=f3eb6ede5db921d0ada7f1713e6d1ca516d200fec57d602e677245490fcb7f1e; pgv_pvid=1033302674; o_cookie=1349184918; pac_uid=1_1349184918; ua_id=4nooSvHNkTOjpIpgAAAAAFX9OSNcLApfsluzwfClLW8=; mm_lang=zh_CN; noticeLoginFlag=1; remember_acct=Liangkai318; rewardsn=; wxtokenkey=777; pgv_si=s1944231936; uuid=700c40c965347f0925a8e8fdcc1e003e; ticket=023fc8861356b01527983c2c4765ef80903bf3d7; ticket_id=gh_6923d82780e4; cert=L_cE4aRdaZeDnzao3xEbMkcP3Kwuejoi; data_bizuin=3075391054; bizuin=3208078327; data_ticket=XrzOnrV9Odc80hJLtk8vFjTLI1vd7kfKJ9u+DzvaeeHxZkMXbv9kcWk/Pmqx/9g7; slave_sid=SWRKNmFyZ1NkM002Rk9NR0RRVGY5VFdMd1lXSkExWGtPcWJaREkzQ1BESEcyQkNLVlQ3YnB4OFNoNmtRZzdFdGpnVGlHak9LMjJ5eXBNVEgxZDlZb1BZMnlfN1hKdnJsV0NKallsQW91Zjk5Y3prVjlQRDNGYUdGUWNFNEd6eTRYT1FSOEQxT0MwR01Ja0Vo; slave_user=gh_6923d82780e4; xid=7b2245140217dbb3c5c0a552d46b9664; openid2ticket_oTr5Ot_B4nrDSj14zUxlXg8yrzws=D/B6//xK73BoO+mKE2EAjdcgIXNPw/b5PEDTDWM6t+4="}
respon = requests.get(url=item["url"]).content
gongzhongh = etree.HTML(respon).xpath('//a[@id="post-user"]/text()')[0]
# times = etree.HTML(respon).xpath('//*[@id="post-date"]/text()')[0]
title_one = etree.HTML(respon).xpath('//*[@id="activity-name"]/text()')[0].split()[0]
print(gongzhongh, title_one)
item["tit"] = title_one
item["gongzhongh"] = gongzhongh
# item["times"] = times
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + gongzhongh + "&begin=0&count=5"
# wenzhang_url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
resp = requests.get(url=url, headers=headers).content
print(resp)
faskeids = json.loads(resp.decode("utf-8"))
try:
list_fask = faskeids["list"] except Exception as f:
print("**********[INFO]:请求失败,登陆失败, 请重新登陆*************")
return
for fask in list_fask:
fakeid = fask["fakeid"]
nickname = fask["nickname"] if nickname == item["gongzhongh"]:
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + fakeid + "&type=9"
# url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] +"&fakeid=" + fakeid +"&type=9"
resp = requests.get(url=url, headers=headers).content
app = json.loads(resp.decode("utf-8"))["app_msg_list"]
item["aid"] = app["aid"]
item["appmsgid"] = app["appmsgid"]
item["cover"] = app["cover"]
item["digest"] = app["digest"]
item["url_link"] = app["link"]
item["tit"] = app["title"]
print(item)
time.sleep(10) # time.sleep(5)
# dict_wengzhang = json.loads(resp.decode("utf-8"))
# app_msg_list = dict_wengzhang["app_msg_list"]
# print(len(app_msg_list))
# for app in app_msg_list:
# print(app)
# title = app["title"]
# if title == item["tit"]:
# item["url_link"] = app["link"]
# updata_time = app["update_time"]
# item["times"] = time.strftime("%Y-%m-%d %H:%M:%S", updata_time)
# print("最终链接为:", item["url_link"])
# yield item
# else:
# print(app["title"], item["tit"])
# print("与所选文章不同放弃")
# # item["tit"] = app["title"]
# # item["url_link"] = app["link"]
# # yield item
# else:
# print(nickname, item["gongzhongh"])
# print("与所选公众号不一致放弃")
# time.sleep(100)
# yield item
if response.xpath('//a[@class="np"]'):
s += 1
url = "http://weixin.sogou.com/weixin ... 2Bstr(s) # time.sleep(3)
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name": name})
以上是python如何抓取搜狗微信公众号文章permanent链接的详细内容。更多详情请关注Gxl其他相关文章!
querylist采集微信公众号文章(腾讯appium微信采集深度探索篇其实我分析了n种方案)
采集交流 • 优采云 发表了文章 • 0 个评论 • 154 次浏览 • 2021-09-06 16:06
querylist采集微信公众号文章,一般需要反爬虫扫描文章末尾二维码进行反爬虫,文章链接为文章正文href,图片为文章一部分。在微信后台放入本页面地址即可。代码如下:main方法:初始化需要用到:微信id:微信id/tagid(tagid从0开始递增,微信id为i13)scanner:微信反爬虫采集系统分析文章页面,与app端进行对比,并取出我们需要采集到文章列表model:用于爬取分析文章信息,已获取第一个按钮text+#,鼠标移动到text里可以获取到实际字符,点击text进行识别即可获取text信息keyword:获取上标取出下标即为分析文章条目,获取上标得到页面中所有的内容,点击text进行获取条目类别contentboolean注册安卓版注册完成以后需要用vuerouter注册安卓浏览器,在手机登录openinstall微信后台,获取安卓浏览器keywordid,取出同名detail标签model对应分析软件:appium,免费开源工具,可自定义绑定工具,fiddler调试工具部署公众号,获取二维码,打开后台就可以获取获取到微信公众号的列表secondlife类,进行分析。
appium+vuerouter
请先把爬虫分析功能能力提升一下。
#腾讯appium微信采集深度探索篇其实我分析了n种方案,最后还是appium的微信采集功能最强大。但是为什么最后还是选择了appium,而不是webdriver呢?因为我非常喜欢appium,与其它机器学习工具相比,使用appium非常容易上手,只要会计算机基础就可以用它来实现复杂的机器学习功能。腾讯开发的proactive.js很好用,用得也很顺手。
还有它不止是采集微信公众号文章信息,我还发现它已经开始支持抓取企业的店铺、知乎等多个平台的公众号。并且proactive.js在中国市场几乎是免费的。 查看全部
querylist采集微信公众号文章(腾讯appium微信采集深度探索篇其实我分析了n种方案)
querylist采集微信公众号文章,一般需要反爬虫扫描文章末尾二维码进行反爬虫,文章链接为文章正文href,图片为文章一部分。在微信后台放入本页面地址即可。代码如下:main方法:初始化需要用到:微信id:微信id/tagid(tagid从0开始递增,微信id为i13)scanner:微信反爬虫采集系统分析文章页面,与app端进行对比,并取出我们需要采集到文章列表model:用于爬取分析文章信息,已获取第一个按钮text+#,鼠标移动到text里可以获取到实际字符,点击text进行识别即可获取text信息keyword:获取上标取出下标即为分析文章条目,获取上标得到页面中所有的内容,点击text进行获取条目类别contentboolean注册安卓版注册完成以后需要用vuerouter注册安卓浏览器,在手机登录openinstall微信后台,获取安卓浏览器keywordid,取出同名detail标签model对应分析软件:appium,免费开源工具,可自定义绑定工具,fiddler调试工具部署公众号,获取二维码,打开后台就可以获取获取到微信公众号的列表secondlife类,进行分析。
appium+vuerouter
请先把爬虫分析功能能力提升一下。
#腾讯appium微信采集深度探索篇其实我分析了n种方案,最后还是appium的微信采集功能最强大。但是为什么最后还是选择了appium,而不是webdriver呢?因为我非常喜欢appium,与其它机器学习工具相比,使用appium非常容易上手,只要会计算机基础就可以用它来实现复杂的机器学习功能。腾讯开发的proactive.js很好用,用得也很顺手。
还有它不止是采集微信公众号文章信息,我还发现它已经开始支持抓取企业的店铺、知乎等多个平台的公众号。并且proactive.js在中国市场几乎是免费的。
querylist采集微信公众号文章(ios微信公众号文章数据可视化千里之行始于足下)
采集交流 • 优采云 发表了文章 • 0 个评论 • 126 次浏览 • 2021-09-06 14:01
querylist采集微信公众号文章内容时,需要到微信公众号后台的后台历史消息里查找自己需要的历史文章,前期使用websocket后台自带的,很慢,没有收到定期发送的消息,网上也有很多方法尝试,常用方法如下:1.用socket,同一ip多次查询(每次次间隔3秒),然后用sendblock传回消息2.用xmlhttprequest动态网页获取-querylist.html,设置头信息,然后传回消息。如果时间和语言允许,java还是用tomcat服务器作为后台,同一ip多次查询也可以。
ios微信公众号文章数据可视化爬虫
千里之行始于足下。websocket是一个关于网络传输的协议。采用网络连接时,数据传输可靠性非常高。你的微信公众号不是第一个采用这个协议来作为关系数据的。你上哪里发请求呢?服务器上并没有对应的开源协议。推荐你c#和mysql使用websocket(我自己调用的-xinaya),数据传输没问题。可以简单的基于php或者.net做网页上部分信息来交互。
我这里有,部分免费。
微信公众号文章文章链接:
有代码可以使用canvas画图
使用websocket、xmlhttprequest、socket
公众号文章的基本模型可以归纳为如下几种:json串,这里主要指公众号一般后台自动生成,比如昵称、账号、关注号、点赞数、转发数,用json格式收到后推送到前端。文章id,一般由两个或者两个以上的json对象构成,用来收到推送消息,一般会存在你的域名里,通过id获取该字段。文章简介,一般用个json对象记录,大致可以用datetime类类型进行记录。
推送订阅号消息,推送公众号菜单,通过event的方式。推送订阅号消息,推送微信群消息,推送电话联系人消息,推送好友消息,推送通知消息。公众号文章的文章主体信息:标题、开头、中间、尾声、确认完成。用字段“jsontext"表示:text{text}jsontext{'appid':'xxx','content':'xxx','content':'xxx','content':'xxx','content':'xxx','expires':'xxx','license':'xxx','recipient':'xxx','ticket':'xxx','character':'xxx','content-type':'xxx','encoding':'xxx','documentjson':'xxx','contentdata':'xxx','content':'xxx','content':'xxx','content-name':'xxx','content':'xxx','content':'xxx','text':'xxx','text':'xxx','text':'xxx','text':。 查看全部
querylist采集微信公众号文章(ios微信公众号文章数据可视化千里之行始于足下)
querylist采集微信公众号文章内容时,需要到微信公众号后台的后台历史消息里查找自己需要的历史文章,前期使用websocket后台自带的,很慢,没有收到定期发送的消息,网上也有很多方法尝试,常用方法如下:1.用socket,同一ip多次查询(每次次间隔3秒),然后用sendblock传回消息2.用xmlhttprequest动态网页获取-querylist.html,设置头信息,然后传回消息。如果时间和语言允许,java还是用tomcat服务器作为后台,同一ip多次查询也可以。
ios微信公众号文章数据可视化爬虫
千里之行始于足下。websocket是一个关于网络传输的协议。采用网络连接时,数据传输可靠性非常高。你的微信公众号不是第一个采用这个协议来作为关系数据的。你上哪里发请求呢?服务器上并没有对应的开源协议。推荐你c#和mysql使用websocket(我自己调用的-xinaya),数据传输没问题。可以简单的基于php或者.net做网页上部分信息来交互。
我这里有,部分免费。
微信公众号文章文章链接:
有代码可以使用canvas画图
使用websocket、xmlhttprequest、socket
公众号文章的基本模型可以归纳为如下几种:json串,这里主要指公众号一般后台自动生成,比如昵称、账号、关注号、点赞数、转发数,用json格式收到后推送到前端。文章id,一般由两个或者两个以上的json对象构成,用来收到推送消息,一般会存在你的域名里,通过id获取该字段。文章简介,一般用个json对象记录,大致可以用datetime类类型进行记录。
推送订阅号消息,推送公众号菜单,通过event的方式。推送订阅号消息,推送微信群消息,推送电话联系人消息,推送好友消息,推送通知消息。公众号文章的文章主体信息:标题、开头、中间、尾声、确认完成。用字段“jsontext"表示:text{text}jsontext{'appid':'xxx','content':'xxx','content':'xxx','content':'xxx','content':'xxx','expires':'xxx','license':'xxx','recipient':'xxx','ticket':'xxx','character':'xxx','content-type':'xxx','encoding':'xxx','documentjson':'xxx','contentdata':'xxx','content':'xxx','content':'xxx','content-name':'xxx','content':'xxx','content':'xxx','text':'xxx','text':'xxx','text':'xxx','text':。
querylist采集微信公众号文章(sock优采云采集器微信公众号文章网页,ctrlist和urllist的功能)
采集交流 • 优采云 发表了文章 • 0 个评论 • 148 次浏览 • 2021-09-06 07:02
querylist采集微信公众号文章网页,最后转化为词典存到analyzer中。taglist采集关键词到单个analyzer进行排序。因为词典一次只能抓取一个网页,所以都是按照最常见的、排名最靠前的句子抓取的。相当于一个抓取网页的热词池。ctrlist采集微信小程序实时的ctr、点击流网页数据。tcplist、urllist采集已经抓取到的资源地址进行统计。
ctrlist就是抓取微信开发平台提供的源码。taglist采集已经抓取到的资源地址进行统计。taglist还有web服务端。ctrlist基本是集成了taglist和urllist的功能。
可以参考我这篇总结。
socket抓取分页列表站:analyzer/click.py爬虫语言:python,c++,
ctrlist主要用于各大前端公司采集js关键字,
我用的是一款叫微信开发抓取工具,抓取的方式很简单,将微信公众号的文章网页网址发送到我们公众号服务器上,然后我们就可以在公众号文章网页源代码里面获取到相应的数据。抓取过程简单,
看自己的需求,比如快速抓取一个页面的代码:ctrlist:这个可以做一个单页面项目ctrlistr:只抓取了前端, 查看全部
querylist采集微信公众号文章(sock优采云采集器微信公众号文章网页,ctrlist和urllist的功能)
querylist采集微信公众号文章网页,最后转化为词典存到analyzer中。taglist采集关键词到单个analyzer进行排序。因为词典一次只能抓取一个网页,所以都是按照最常见的、排名最靠前的句子抓取的。相当于一个抓取网页的热词池。ctrlist采集微信小程序实时的ctr、点击流网页数据。tcplist、urllist采集已经抓取到的资源地址进行统计。
ctrlist就是抓取微信开发平台提供的源码。taglist采集已经抓取到的资源地址进行统计。taglist还有web服务端。ctrlist基本是集成了taglist和urllist的功能。
可以参考我这篇总结。
socket抓取分页列表站:analyzer/click.py爬虫语言:python,c++,
ctrlist主要用于各大前端公司采集js关键字,
我用的是一款叫微信开发抓取工具,抓取的方式很简单,将微信公众号的文章网页网址发送到我们公众号服务器上,然后我们就可以在公众号文章网页源代码里面获取到相应的数据。抓取过程简单,
看自己的需求,比如快速抓取一个页面的代码:ctrlist:这个可以做一个单页面项目ctrlistr:只抓取了前端,
querylist采集微信公众号文章(更新日志v20200520修复一个严重问题导致批量黑白直播下载官网使用)
采集交流 • 优采云 发表了文章 • 0 个评论 • 373 次浏览 • 2021-09-06 03:30
微信公众号文章batch黑白直播下载官网软件是一款可以帮助用户批量处理采集微信公号内容的工具,支持文章和图片批量黑白直播下载官网,支持按关键词相关内容搜索 黑白直播下载官网,功能非常强大,有需要的用户不要错过,欢迎使用黑白直播下载官网!
使用说明
1、在设置中心开启该功能。
2、按照提示重启软件,确认安装证书。
3、登录电脑微信,选择公众号,查看历史或点击文章文章,返回软件查看软件底部提醒是否变红(红色表示在后台工作
进行中)。
4、黑白直播官网下载完成后自动完成。
注意事项
1、只能一一获取微信公众号,请勿打开更多软件,否则会出现意想不到的问题!
2、 如果发现网络不通,请正确关闭软件。如果还是不行,请重新打开软件几次,然后再关闭。
3、背景分析文章的文章数和黑白直播下载官网的文章数大多不一致,因为部分文章已经被删除或者屏蔽了,但是找到的文章数量总是很大
从黑白直播官网下载的文章数。
4、如有问题,请一次性详细描述清楚,并将失败的请求链接或操作步骤提供给论坛或我的博客。
更新日志
v20200520
修复了导致批量黑白直播下载官网无法下载黑白直播官网的严重问题。之前的微信文章
只有黑白直播下载官网原创文章
v20200428
修复评论交互时显示“作者”的问题
修复标题重复点
修复搜狗搜索特殊字符编码问题
v20200426
添加格式化的json并输出到文件
修复之前的公众号文章无法从黑白直播官网下载的问题 查看全部
querylist采集微信公众号文章(更新日志v20200520修复一个严重问题导致批量黑白直播下载官网使用)
微信公众号文章batch黑白直播下载官网软件是一款可以帮助用户批量处理采集微信公号内容的工具,支持文章和图片批量黑白直播下载官网,支持按关键词相关内容搜索 黑白直播下载官网,功能非常强大,有需要的用户不要错过,欢迎使用黑白直播下载官网!

使用说明
1、在设置中心开启该功能。
2、按照提示重启软件,确认安装证书。
3、登录电脑微信,选择公众号,查看历史或点击文章文章,返回软件查看软件底部提醒是否变红(红色表示在后台工作
进行中)。
4、黑白直播官网下载完成后自动完成。
注意事项
1、只能一一获取微信公众号,请勿打开更多软件,否则会出现意想不到的问题!
2、 如果发现网络不通,请正确关闭软件。如果还是不行,请重新打开软件几次,然后再关闭。
3、背景分析文章的文章数和黑白直播下载官网的文章数大多不一致,因为部分文章已经被删除或者屏蔽了,但是找到的文章数量总是很大
从黑白直播官网下载的文章数。
4、如有问题,请一次性详细描述清楚,并将失败的请求链接或操作步骤提供给论坛或我的博客。
更新日志
v20200520
修复了导致批量黑白直播下载官网无法下载黑白直播官网的严重问题。之前的微信文章
只有黑白直播下载官网原创文章
v20200428
修复评论交互时显示“作者”的问题
修复标题重复点
修复搜狗搜索特殊字符编码问题
v20200426
添加格式化的json并输出到文件
修复之前的公众号文章无法从黑白直播官网下载的问题
querylist采集微信公众号文章(解放双手【软件特色】搜索支持搜索文章一键下载)
采集交流 • 优采云 发表了文章 • 0 个评论 • 135 次浏览 • 2021-09-04 18:23
13、支持搜索文章一键下载、自定义选择下载、多线程下载全部;
14、支持验证码自动编码,解放双手
[软件功能]
1、搜索所有微信公众号文章至关键词,支持搜索指定时间段内的相关内容,支持文章内容导出word、pdf、excle格式;
2、一键采集指定公众号文章的所有历史记录,支持文章内容批量导出word和pdf格式(文章原排版,文字+图片);
3、可以按照发布时间、标题、公众号对关键词search相关文章内容进行排序,支持标题去重,搜索结果二次搜索;
4、关键词search文章支持通过公众号和关键词屏蔽,所有不想看的内容都过滤掉,支持拖拽选择,一键屏蔽;
5、内置验证码自动打印,自动IP切换功能,解放双手,操作更便捷;
6、文章Content 页面支持关键词搜索,快速查明是否需要文章;
7、保存搜索关键词history,搜索过去关键词,直接从搜索历史中拉取关键词,输入更方便;
8、内置大量快捷键,勾选文章,搜索内容更方便、更人性化;
9、一键搜索所有微信公众号文章,按时间段搜索;
10、支持公众号关键词filtering,以及title关键词filtering;
11、支持查询单个公众号的所有海量发帖记录;
12、支持搜索结果、公众号、时间、标题排序;
13、支持一键导出搜索结果,方便查看。 查看全部
querylist采集微信公众号文章(解放双手【软件特色】搜索支持搜索文章一键下载)
13、支持搜索文章一键下载、自定义选择下载、多线程下载全部;
14、支持验证码自动编码,解放双手

[软件功能]
1、搜索所有微信公众号文章至关键词,支持搜索指定时间段内的相关内容,支持文章内容导出word、pdf、excle格式;
2、一键采集指定公众号文章的所有历史记录,支持文章内容批量导出word和pdf格式(文章原排版,文字+图片);
3、可以按照发布时间、标题、公众号对关键词search相关文章内容进行排序,支持标题去重,搜索结果二次搜索;
4、关键词search文章支持通过公众号和关键词屏蔽,所有不想看的内容都过滤掉,支持拖拽选择,一键屏蔽;
5、内置验证码自动打印,自动IP切换功能,解放双手,操作更便捷;
6、文章Content 页面支持关键词搜索,快速查明是否需要文章;
7、保存搜索关键词history,搜索过去关键词,直接从搜索历史中拉取关键词,输入更方便;
8、内置大量快捷键,勾选文章,搜索内容更方便、更人性化;
9、一键搜索所有微信公众号文章,按时间段搜索;
10、支持公众号关键词filtering,以及title关键词filtering;
11、支持查询单个公众号的所有海量发帖记录;
12、支持搜索结果、公众号、时间、标题排序;
13、支持一键导出搜索结果,方便查看。
querylist采集微信公众号文章(querylist采集微信公众号文章大小为6m,方案根据需要调整)
采集交流 • 优采云 发表了文章 • 0 个评论 • 113 次浏览 • 2021-09-03 16:03
querylist采集微信公众号文章大小为6m,方案根据需要调整。内容采集:每个公众号对应的文章都可以采集下来,利用requests.session或者requests库即可抓取。内容爬取:对文章进行信息提取、选择、插入保存等等,利用workerman即可实现。会同步push到服务器上,另外抓取公众号的话还可以做二次更新。
文章采集通过mysql实现。这种方式对数据的要求较低,虽然抓取的时候有一定的延迟,但是每个微信公众号的文章数量有限,通过人工进行抓取就ok。对于内容爬取,每个微信公众号的文章数量有限,那么就需要尽可能多的建表,实现不同的爬取,好提取一些具有共性的特征信息,比如这里采集的一些词,那么他们的分类标签是属于哪一类的,每个分类标签有哪些人数关注人数等等。
这样的话就能够实现为每个公众号对应的采集,甚至每个公众号里面,有的文章数量较少。为了大家方便阅读,这里通过爬取到的词做统计,看看词频,然后根据那些词看看是不是能够比较方便的得到他们的分类。爬取到词语一览表这一篇大概就对爬取到的词进行了统计,这些词都是比较相关的,对于公众号一般经常读的或者一般常写的可以抓取到较为准确的词汇。
对于爬取到的词进行了一个下标统计:根据上图统计,可以看到,目前一共爬取了大概4000左右的词,每个词的上下最多只爬取了7个节点,而且还不是最大的。下一篇主要写实现内容爬取,如果爬取到的词类型比较多,还要分词的话,还有点麻烦。所以,就用代码实现一下吧。 查看全部
querylist采集微信公众号文章(querylist采集微信公众号文章大小为6m,方案根据需要调整)
querylist采集微信公众号文章大小为6m,方案根据需要调整。内容采集:每个公众号对应的文章都可以采集下来,利用requests.session或者requests库即可抓取。内容爬取:对文章进行信息提取、选择、插入保存等等,利用workerman即可实现。会同步push到服务器上,另外抓取公众号的话还可以做二次更新。
文章采集通过mysql实现。这种方式对数据的要求较低,虽然抓取的时候有一定的延迟,但是每个微信公众号的文章数量有限,通过人工进行抓取就ok。对于内容爬取,每个微信公众号的文章数量有限,那么就需要尽可能多的建表,实现不同的爬取,好提取一些具有共性的特征信息,比如这里采集的一些词,那么他们的分类标签是属于哪一类的,每个分类标签有哪些人数关注人数等等。
这样的话就能够实现为每个公众号对应的采集,甚至每个公众号里面,有的文章数量较少。为了大家方便阅读,这里通过爬取到的词做统计,看看词频,然后根据那些词看看是不是能够比较方便的得到他们的分类。爬取到词语一览表这一篇大概就对爬取到的词进行了统计,这些词都是比较相关的,对于公众号一般经常读的或者一般常写的可以抓取到较为准确的词汇。
对于爬取到的词进行了一个下标统计:根据上图统计,可以看到,目前一共爬取了大概4000左右的词,每个词的上下最多只爬取了7个节点,而且还不是最大的。下一篇主要写实现内容爬取,如果爬取到的词类型比较多,还要分词的话,还有点麻烦。所以,就用代码实现一下吧。
querylist采集微信公众号文章(知乎专题微信公众号内容的批量采集与应用,延续这份分享精神 )
采集交流 • 优采云 发表了文章 • 0 个评论 • 157 次浏览 • 2021-09-03 07:29
)
:///
参考知乎thematic微信公众号采集批号及申请,作者:饭口团队负责人
原作者(方口团队负责人)有句话:我的方法来自于很多同事的分享精神,所以我会延续这种精神,分享我的成果。
这个系列的文章也是为了延续这种分享精神!
这个文章系列是基于知乎话题教程的一步步实现过程,在实现过程中踩到了一些坑。
原理介绍这里不再赘述,可以参考知乎topic。
代码改进前的准备
原作者使用的是php环境。如果有能力,可以尝试其他语言来实现,比如python、java等,不过原作者已经给出了部分php代码,这里也实现了。
所以你要准备一个php环境。 win下推荐使用优采云集成环境,如wamp、xamp、phpstudy等,因为之前电脑里就有wamp环境,可以直接使用。先配置虚拟域名。但是下面的代码需要改成自己对应的路径。配置虚拟域名的教程可以参考我的另一篇文章php本地虚拟域名配置和端口的一些折腾。这里假设我配置的虚拟域名是
修改 rule_default.js 代码
下面仅给出了一些示例。其他人做同样的修改(如果没有配置虚拟域名,需要将域名改为路径访问,如localhost/weixin/,直接修改即可):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
HttpPost(ret[1],req.url,"/getMsgJson.php");
var http = require('http');
http.get('http://hojun.weixin.com/getWxHis.php', function(res) {
res.on('data', function(chunk){
callback(chunk+serverResData);
})
});
------------------
var options = {
method: "POST",
host: "hojun.weixin.com",
port: 80,
path: path,//接收程序的路径和文件名
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
"Content-Length": content.length
}
};
找到要修改的函数replaceRequestOption:
1
2
3
4
5
6
7
8
replaceRequestOption : function(req,option){
var newOption = option;
if(/google/i.test(newOption.headers.host)){
newOption.hostname = "www.baidu.com";
newOption.port = "80";
}
return newOption;
},
创建数据库和数据表
在完善php代码之前,我们还需要先创建数据库和数据表。好消息是组长已经给出了数据表的创建sql语句。修改了一些语法错误和关键字重复
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
微信公众号表
CREATE TABLE `weixin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) DEFAULT ' ' COMMENT '公众号唯一标识biz',
`collect` int(11) DEFAULT 1 COMMENT '记录采集时间的时间戳',
PRIMARY KEY (`id`)
) ;
微信文章表
CREATE TABLE `post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '文章对应的公众号biz',
`field_id` int(11) NOT NULL COMMENT '微信定义的一个id,每条文章唯一',
`title` varchar(255) NOT NULL DEFAULT ' ' COMMENT '文章标题',
`title_encode` text CHARACTER SET utf8 NOT NULL COMMENT '文章编码,防止文章出现emoji',
`digest` varchar(500) NOT NULL DEFAULT ' ' COMMENT '文章摘要',
`content_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '文章地址',
`source_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '阅读原文地址',
`cover` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '封面图片',
`is_multi` int(11) NOT NULL COMMENT '是否多图文',
`is_top` int(11) NOT NULL COMMENT '是否头条',
`datetime` int(11) NOT NULL COMMENT '文章时间戳',
`readNum` int(11) NOT NULL DEFAULT 1 COMMENT '文章阅读量',
`likeNum` int(11) NOT NULL DEFAULT 0 COMMENT '文章点赞量',
PRIMARY KEY (`id`)
) ;
采集队列表
CREATE TABLE `tmplist` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`content_url` varchar(255) DEFAULT NULL COMMENT '文章地址',
`load` int(11) DEFAULT 0 COMMENT '读取中标记',
PRIMARY KEY (`id`),
UNIQUE KEY `content_url` (`content_url`)
) ;
登录phpMyAdmin后台,语言可设置为中文。
注意排序规则设置为utf8_general_ci。
一一执行sql生成数据表。
待续......待续......
希望这个文章能给你带来知识和乐趣。喜欢博主文章可以加博主好友
如果你有好的文章,也可以给博主投稿。
查看全部
querylist采集微信公众号文章(知乎专题微信公众号内容的批量采集与应用,延续这份分享精神
)
:///
参考知乎thematic微信公众号采集批号及申请,作者:饭口团队负责人
原作者(方口团队负责人)有句话:我的方法来自于很多同事的分享精神,所以我会延续这种精神,分享我的成果。
这个系列的文章也是为了延续这种分享精神!
这个文章系列是基于知乎话题教程的一步步实现过程,在实现过程中踩到了一些坑。
原理介绍这里不再赘述,可以参考知乎topic。
代码改进前的准备
原作者使用的是php环境。如果有能力,可以尝试其他语言来实现,比如python、java等,不过原作者已经给出了部分php代码,这里也实现了。
所以你要准备一个php环境。 win下推荐使用优采云集成环境,如wamp、xamp、phpstudy等,因为之前电脑里就有wamp环境,可以直接使用。先配置虚拟域名。但是下面的代码需要改成自己对应的路径。配置虚拟域名的教程可以参考我的另一篇文章php本地虚拟域名配置和端口的一些折腾。这里假设我配置的虚拟域名是
修改 rule_default.js 代码
下面仅给出了一些示例。其他人做同样的修改(如果没有配置虚拟域名,需要将域名改为路径访问,如localhost/weixin/,直接修改即可):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
HttpPost(ret[1],req.url,"/getMsgJson.php");
var http = require('http');
http.get('http://hojun.weixin.com/getWxHis.php', function(res) {
res.on('data', function(chunk){
callback(chunk+serverResData);
})
});
------------------
var options = {
method: "POST",
host: "hojun.weixin.com",
port: 80,
path: path,//接收程序的路径和文件名
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
"Content-Length": content.length
}
};
找到要修改的函数replaceRequestOption:
1
2
3
4
5
6
7
8
replaceRequestOption : function(req,option){
var newOption = option;
if(/google/i.test(newOption.headers.host)){
newOption.hostname = "www.baidu.com";
newOption.port = "80";
}
return newOption;
},
创建数据库和数据表
在完善php代码之前,我们还需要先创建数据库和数据表。好消息是组长已经给出了数据表的创建sql语句。修改了一些语法错误和关键字重复
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
微信公众号表
CREATE TABLE `weixin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) DEFAULT ' ' COMMENT '公众号唯一标识biz',
`collect` int(11) DEFAULT 1 COMMENT '记录采集时间的时间戳',
PRIMARY KEY (`id`)
) ;
微信文章表
CREATE TABLE `post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '文章对应的公众号biz',
`field_id` int(11) NOT NULL COMMENT '微信定义的一个id,每条文章唯一',
`title` varchar(255) NOT NULL DEFAULT ' ' COMMENT '文章标题',
`title_encode` text CHARACTER SET utf8 NOT NULL COMMENT '文章编码,防止文章出现emoji',
`digest` varchar(500) NOT NULL DEFAULT ' ' COMMENT '文章摘要',
`content_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '文章地址',
`source_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '阅读原文地址',
`cover` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '封面图片',
`is_multi` int(11) NOT NULL COMMENT '是否多图文',
`is_top` int(11) NOT NULL COMMENT '是否头条',
`datetime` int(11) NOT NULL COMMENT '文章时间戳',
`readNum` int(11) NOT NULL DEFAULT 1 COMMENT '文章阅读量',
`likeNum` int(11) NOT NULL DEFAULT 0 COMMENT '文章点赞量',
PRIMARY KEY (`id`)
) ;
采集队列表
CREATE TABLE `tmplist` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`content_url` varchar(255) DEFAULT NULL COMMENT '文章地址',
`load` int(11) DEFAULT 0 COMMENT '读取中标记',
PRIMARY KEY (`id`),
UNIQUE KEY `content_url` (`content_url`)
) ;
登录phpMyAdmin后台,语言可设置为中文。
注意排序规则设置为utf8_general_ci。
一一执行sql生成数据表。
待续......待续......
希望这个文章能给你带来知识和乐趣。喜欢博主文章可以加博主好友

如果你有好的文章,也可以给博主投稿。

querylist采集微信公众号文章( 微信公众号文章的GET及方法(二)-)
采集交流 • 优采云 发表了文章 • 0 个评论 • 159 次浏览 • 2021-09-03 02:08
微信公众号文章的GET及方法(二)-)
Python 微信公众号文章crawl
一.Idea
我们通过微信公众平台网页版图文消息中的超链接获取我们需要的界面
从界面我们可以得到对应的微信公众号和所有对应的微信公众号文章。
二.接口分析
微信公众号访问:
参数:
action=search_biz
开始=0
计数=5
query=官方账号
token=每个账户对应的token值
lang=zh_CN
f=json
ajax=1
请求方法:
获取
所以在这个界面我们只需要获取token,查询的是你需要搜索的公众号,登录后可以通过网页链接获取token。
获取公众号对应的文章界面:
参数:
action=list_ex
开始=0
计数=5
fakeid=MjM5NDAwMTA2MA==
type=9
查询=
令牌=557131216
lang=zh_CN
f=json
ajax=1
请求方法:
获取
我们需要在这个接口中获取的值是上一步的token和fakeid,这个fakeid可以在第一个接口中获取。这样我们就可以获取到微信公众号文章的数据了。
三.实现第一步:
首先我们需要通过selenium模拟登录,然后获取cookie和对应的token
def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 点击切换到账号密码输入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模拟用户点击
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 点击登录
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登录验证
print('请扫描二维码')
sleep(20)
# 刷新当前网页
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 获取当前网页链接
url = browser.current_url
# 获取当前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 转换为字符串
cookie_str = json.dumps(post)
# 存储到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 对当前网页链接进行切片,获取到token
paramList = url.strip().split('?')[1].split('&')
# 定义一个字典存储数据
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
定义一个登录方法,里面的参数是登录账号和密码,然后定义一个字典来存储cookie的值。模拟用户,输入对应的账号密码,点击登录,会出现扫码验证,用登录微信扫一扫即可。
刷新当前网页后,获取当前cookie和token,然后返回。
第二步:1.请求对应的公众号接口获取我们需要的fakeid
url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公众号名称',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
传入我们获取的token和cookie,然后通过requests.get请求获取返回的微信公众号的json数据
lists = search_resp.json().get('list')[0]
通过上面的代码可以得到对应的公众号数据
fakeid = lists.get('fakeid')
通过上面的代码可以得到对应的fakeid
2.请求获取微信公众号文章接口,获取我们需要的文章data
appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
我们传入fakeid和token,然后调用requests.get请求接口获取返回的json数据。
我们已经实现了微信公众号文章的抓取。
四.Summary
通过爬取微信公众号文章,需要掌握selenium和requests的用法,以及如何获取request接口。但是需要注意的是,当我们在循环中获取文章时,一定要设置一个延迟时间,否则账号很容易被封,获取不到返回的数据。 查看全部
querylist采集微信公众号文章(
微信公众号文章的GET及方法(二)-)
Python 微信公众号文章crawl
一.Idea
我们通过微信公众平台网页版图文消息中的超链接获取我们需要的界面


从界面我们可以得到对应的微信公众号和所有对应的微信公众号文章。
二.接口分析
微信公众号访问:
参数:
action=search_biz
开始=0
计数=5
query=官方账号
token=每个账户对应的token值
lang=zh_CN
f=json
ajax=1
请求方法:
获取
所以在这个界面我们只需要获取token,查询的是你需要搜索的公众号,登录后可以通过网页链接获取token。

获取公众号对应的文章界面:
参数:
action=list_ex
开始=0
计数=5
fakeid=MjM5NDAwMTA2MA==
type=9
查询=
令牌=557131216
lang=zh_CN
f=json
ajax=1
请求方法:
获取
我们需要在这个接口中获取的值是上一步的token和fakeid,这个fakeid可以在第一个接口中获取。这样我们就可以获取到微信公众号文章的数据了。

三.实现第一步:
首先我们需要通过selenium模拟登录,然后获取cookie和对应的token
def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 点击切换到账号密码输入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模拟用户点击
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 点击登录
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登录验证
print('请扫描二维码')
sleep(20)
# 刷新当前网页
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 获取当前网页链接
url = browser.current_url
# 获取当前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 转换为字符串
cookie_str = json.dumps(post)
# 存储到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 对当前网页链接进行切片,获取到token
paramList = url.strip().split('?')[1].split('&')
# 定义一个字典存储数据
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
定义一个登录方法,里面的参数是登录账号和密码,然后定义一个字典来存储cookie的值。模拟用户,输入对应的账号密码,点击登录,会出现扫码验证,用登录微信扫一扫即可。
刷新当前网页后,获取当前cookie和token,然后返回。
第二步:1.请求对应的公众号接口获取我们需要的fakeid
url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公众号名称',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
传入我们获取的token和cookie,然后通过requests.get请求获取返回的微信公众号的json数据
lists = search_resp.json().get('list')[0]
通过上面的代码可以得到对应的公众号数据
fakeid = lists.get('fakeid')
通过上面的代码可以得到对应的fakeid
2.请求获取微信公众号文章接口,获取我们需要的文章data
appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
我们传入fakeid和token,然后调用requests.get请求接口获取返回的json数据。
我们已经实现了微信公众号文章的抓取。
四.Summary
通过爬取微信公众号文章,需要掌握selenium和requests的用法,以及如何获取request接口。但是需要注意的是,当我们在循环中获取文章时,一定要设置一个延迟时间,否则账号很容易被封,获取不到返回的数据。
querylist采集微信公众号文章(微信公众号爬取程序分享搞成java的难点在于)
采集交流 • 优采云 发表了文章 • 0 个评论 • 165 次浏览 • 2021-09-03 02:08
最近需要爬取微信公众号的文章信息。上网查了一下,发现微信公众号爬取的难点是公众号文章的链接在PC端打不开。需要使用微信的浏览器(获取微信客户端的补充参数才能获取其他平台的Open),给爬虫程序带来很大的麻烦。后来在知乎上看到一个大牛用php写的微信公众号爬虫程序,他按照大佬的思路直接做了java。改造过程中遇到的细节问题比较多,分享给大家。
系统的基本思想是在安卓模拟器上运行微信。模拟器设置代理,通过代理服务器拦截微信数据,并将获取到的数据发送给自己的程序进行处理。
需要准备的环境:nodejs、anyproxy代理、Android模拟器
nodejs下载地址:我下载的是windows版本,直接下载安装即可。安装完成后,直接运行C:\Program Files\nodejs\npm.cmd自动配置环境。
anyproxy安装:上一步安装好nodejs后,在cmd中直接运行npm install -g anyproxy就会安装
互联网上只有一个 Android 模拟器,很多。
首先安装代理服务器的证书。 Anyproxy 默认不解析 https 链接。安装证书后即可解决。如果在cmd中执行anyproxy --root,就会安装证书。之后,您必须在模拟器上下载证书。
然后输入anyproxy -i命令开启代理服务。 (记得加参数!)
记住这个ip和端口,然后安卓模拟器的代理就会用到这个。现在用浏览器打开网页::8002/ 这是anyproxy的网页界面,用于显示http传输数据。
点击上方红框中的菜单,会显示一个二维码。使用安卓模拟器扫码识别。模拟器(手机)会下载证书并安装。
现在我们准备为模拟器设置代理,代理模式设置为手动,代理ip为运行anyproxy的机器的ip,端口为8001
准备工作到此基本完成,在模拟器上打开微信,开通公众号文章,就可以在刚刚打开的web界面看到anyproxy抓取到的数据了:
在上面的红框中,有一个微信文章的链接,点进去查看具体数据。如果响应正文中没有任何内容,则可能是证书安装有问题。
如果一切顺利,你就可以下去了。
这里我们依靠代理服务来抓取微信数据,但是我们不能抓取一条数据,只能自己操作微信。最好手动复制。所以我们需要微信客户端自己跳转到页面。这时候可以使用anyproxy来拦截微信服务器返回的数据,将页面跳转代码注入其中,然后将处理后的数据返回给模拟器,实现微信客户端的自动重定向。
在anyproxy中打开一个名为rule_default.js的js文件,windows下文件为:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
文件中有一个方法叫replaceServerResDataAsync:function(req,res,serverResData,callback)。该方法负责对anyproxy获得的数据进行各种操作。开头应该只有 callback(serverResData) ;该语句的意思是直接将服务器响应数据返回给客户端。把这条语句删掉,换成下面丹尼尔写的代码就行了。这里的代码我没有做任何改动,里面的注释也解释的很清楚,按照逻辑来理解就好了,问题不大。
1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//当链接地址为公众号历史消息页面时(第一种页面形式)
3 //console.log("开始第一种页面爬取");
4 if(serverResData.toString() !== ""){
try {//防止报错退出程序
7 var reg = /msgList = (.*?);/;//定义历史消息正则匹配规则
8 var ret = reg.exec(serverResData.toString());//转换变量为string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//这个函数是后文定义的,将匹配到的历史消息json发送到自己的服务器
10 var http = require('http');
11 http.get('http://xxx/getWxHis', function(res) {//这个地址是自己服务器上的一个程序,目的是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxHis.php的原理。
12 res.on('data', function(chunk){
13 callback(chunk+serverResData);//将返回的代码插入到历史消息页面中,并返回显示出来
14 })
15 });
16 }catch(e){//如果上面的正则没有匹配到,那么这个页面内容可能是公众号历史消息页面向下翻动的第二页,因为历史消息第一页是html格式的,第二页就是json格式的。
17 //console.log("开始第一种页面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//这个函数和上面的一样是后文定义的,将第二页历史消息的json发送到自己的服务器
22 }
23 }catch(e){
24 console.log(e);//错误捕捉
25 }
26 callback(serverResData);//直接返回第二页json内容
27 }
28 }
29 //console.log("开始第一种页面爬取 结束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//当链接地址为公众号历史消息页面时(第二种页面形式)
31 try {
32 var reg = /var msgList = \'(.*?)\';/;//定义历史消息正则匹配规则(和第一种页面形式的正则不同)
33 var ret = reg.exec(serverResData.toString());//转换变量为string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//这个函数是后文定义的,将匹配到的历史消息json发送到自己的服务器
35 var http = require('http');
36 http.get('xxx/getWxHis', function(res) {//这个地址是自己服务器上的一个程序,目的是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxHis.php的原理。
37 res.on('data', function(chunk){
38 callback(chunk+serverResData);//将返回的代码插入到历史消息页面中,并返回显示出来
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二种页面表现形式的向下翻页后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//这个函数和上面的一样是后文定义的,将第二页历史消息的json发送到自己的服务器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//当链接地址为公众号文章阅读量和点赞量时
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函数是后文定义的,功能是将文章阅读量点赞量的json发送到服务器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//当链接地址为公众号文章时(rumor这个地址是公众号文章被辟谣了)
63 try {
64 var http = require('http');
65 http.get('http://xxx/getWxPost', function(res) {//这个地址是自己服务器上的另一个程序,目的是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxPost.php的原理。
66 res.on('data', function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 }
这里是一个简单的解释。微信公众号历史新闻页面的链接有两种形式:一种以/mp/getmasssendmsg开头,另一种以/mp/profile_ext开头。历史页面可以关闭。如果被拒绝,则会触发一个js事件,发送获取json数据(下一页内容)的请求。还有公众号文章的链接,以及文章的阅读量和喜欢的链接(返回json数据)。这些链接的形式是固定的,可以通过逻辑判断来区分。这里的问题是,如果所有的历史页面都需要爬取,怎么做。我的想法是模拟鼠标通过js向下滑动触发提交加载列表下一部分的请求。或者直接使用anyproxy分析滑动加载请求,直接将请求发送到微信服务器。但是一直存在一个问题,就是如何判断没有剩余数据。我正在抓取最新数据。我暂时没有这个需求,以后可能需要。有需要的可以试试。 查看全部
querylist采集微信公众号文章(微信公众号爬取程序分享搞成java的难点在于)
最近需要爬取微信公众号的文章信息。上网查了一下,发现微信公众号爬取的难点是公众号文章的链接在PC端打不开。需要使用微信的浏览器(获取微信客户端的补充参数才能获取其他平台的Open),给爬虫程序带来很大的麻烦。后来在知乎上看到一个大牛用php写的微信公众号爬虫程序,他按照大佬的思路直接做了java。改造过程中遇到的细节问题比较多,分享给大家。
系统的基本思想是在安卓模拟器上运行微信。模拟器设置代理,通过代理服务器拦截微信数据,并将获取到的数据发送给自己的程序进行处理。
需要准备的环境:nodejs、anyproxy代理、Android模拟器
nodejs下载地址:我下载的是windows版本,直接下载安装即可。安装完成后,直接运行C:\Program Files\nodejs\npm.cmd自动配置环境。
anyproxy安装:上一步安装好nodejs后,在cmd中直接运行npm install -g anyproxy就会安装
互联网上只有一个 Android 模拟器,很多。
首先安装代理服务器的证书。 Anyproxy 默认不解析 https 链接。安装证书后即可解决。如果在cmd中执行anyproxy --root,就会安装证书。之后,您必须在模拟器上下载证书。
然后输入anyproxy -i命令开启代理服务。 (记得加参数!)
记住这个ip和端口,然后安卓模拟器的代理就会用到这个。现在用浏览器打开网页::8002/ 这是anyproxy的网页界面,用于显示http传输数据。
点击上方红框中的菜单,会显示一个二维码。使用安卓模拟器扫码识别。模拟器(手机)会下载证书并安装。
现在我们准备为模拟器设置代理,代理模式设置为手动,代理ip为运行anyproxy的机器的ip,端口为8001
准备工作到此基本完成,在模拟器上打开微信,开通公众号文章,就可以在刚刚打开的web界面看到anyproxy抓取到的数据了:
在上面的红框中,有一个微信文章的链接,点进去查看具体数据。如果响应正文中没有任何内容,则可能是证书安装有问题。
如果一切顺利,你就可以下去了。
这里我们依靠代理服务来抓取微信数据,但是我们不能抓取一条数据,只能自己操作微信。最好手动复制。所以我们需要微信客户端自己跳转到页面。这时候可以使用anyproxy来拦截微信服务器返回的数据,将页面跳转代码注入其中,然后将处理后的数据返回给模拟器,实现微信客户端的自动重定向。
在anyproxy中打开一个名为rule_default.js的js文件,windows下文件为:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
文件中有一个方法叫replaceServerResDataAsync:function(req,res,serverResData,callback)。该方法负责对anyproxy获得的数据进行各种操作。开头应该只有 callback(serverResData) ;该语句的意思是直接将服务器响应数据返回给客户端。把这条语句删掉,换成下面丹尼尔写的代码就行了。这里的代码我没有做任何改动,里面的注释也解释的很清楚,按照逻辑来理解就好了,问题不大。
1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//当链接地址为公众号历史消息页面时(第一种页面形式)
3 //console.log("开始第一种页面爬取");
4 if(serverResData.toString() !== ""){
try {//防止报错退出程序
7 var reg = /msgList = (.*?);/;//定义历史消息正则匹配规则
8 var ret = reg.exec(serverResData.toString());//转换变量为string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//这个函数是后文定义的,将匹配到的历史消息json发送到自己的服务器
10 var http = require('http');
11 http.get('http://xxx/getWxHis', function(res) {//这个地址是自己服务器上的一个程序,目的是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxHis.php的原理。
12 res.on('data', function(chunk){
13 callback(chunk+serverResData);//将返回的代码插入到历史消息页面中,并返回显示出来
14 })
15 });
16 }catch(e){//如果上面的正则没有匹配到,那么这个页面内容可能是公众号历史消息页面向下翻动的第二页,因为历史消息第一页是html格式的,第二页就是json格式的。
17 //console.log("开始第一种页面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//这个函数和上面的一样是后文定义的,将第二页历史消息的json发送到自己的服务器
22 }
23 }catch(e){
24 console.log(e);//错误捕捉
25 }
26 callback(serverResData);//直接返回第二页json内容
27 }
28 }
29 //console.log("开始第一种页面爬取 结束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//当链接地址为公众号历史消息页面时(第二种页面形式)
31 try {
32 var reg = /var msgList = \'(.*?)\';/;//定义历史消息正则匹配规则(和第一种页面形式的正则不同)
33 var ret = reg.exec(serverResData.toString());//转换变量为string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//这个函数是后文定义的,将匹配到的历史消息json发送到自己的服务器
35 var http = require('http');
36 http.get('xxx/getWxHis', function(res) {//这个地址是自己服务器上的一个程序,目的是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxHis.php的原理。
37 res.on('data', function(chunk){
38 callback(chunk+serverResData);//将返回的代码插入到历史消息页面中,并返回显示出来
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二种页面表现形式的向下翻页后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//这个函数和上面的一样是后文定义的,将第二页历史消息的json发送到自己的服务器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//当链接地址为公众号文章阅读量和点赞量时
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函数是后文定义的,功能是将文章阅读量点赞量的json发送到服务器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//当链接地址为公众号文章时(rumor这个地址是公众号文章被辟谣了)
63 try {
64 var http = require('http');
65 http.get('http://xxx/getWxPost', function(res) {//这个地址是自己服务器上的另一个程序,目的是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxPost.php的原理。
66 res.on('data', function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 }
这里是一个简单的解释。微信公众号历史新闻页面的链接有两种形式:一种以/mp/getmasssendmsg开头,另一种以/mp/profile_ext开头。历史页面可以关闭。如果被拒绝,则会触发一个js事件,发送获取json数据(下一页内容)的请求。还有公众号文章的链接,以及文章的阅读量和喜欢的链接(返回json数据)。这些链接的形式是固定的,可以通过逻辑判断来区分。这里的问题是,如果所有的历史页面都需要爬取,怎么做。我的想法是模拟鼠标通过js向下滑动触发提交加载列表下一部分的请求。或者直接使用anyproxy分析滑动加载请求,直接将请求发送到微信服务器。但是一直存在一个问题,就是如何判断没有剩余数据。我正在抓取最新数据。我暂时没有这个需求,以后可能需要。有需要的可以试试。
querylist采集微信公众号文章(Python批量抓取公众号文章 )
采集交流 • 优采云 发表了文章 • 0 个评论 • 438 次浏览 • 2021-09-02 11:04
)
PS:如需Python学习资料,可点击下方链接自行获取
Python免费学习资料和群交流答案点击加入
爬取的方法有很多种。今天给大家分享一个更简单的方法,就是通过微信公众号后台的“超链接”功能进行爬取。可能有的朋友还没有接触过微信公众号后台,这里放个图让大家了解一下
这里有的朋友可能会说,我后台无法登录公众号,怎么办? ? ?
没关系,虽然每个爬虫的目的都是为了得到我们想要的结果,但这不是我们学习的重点。我们学习的重点是爬取过程,也就是我们如何获取目标数据,所以无法公开登录 看完这篇文章后,后台的朋友可能无法获取到最终爬取结果,但看完这篇文章你也会有所收获。
一、前期准备
选择要抓取的目标公众号
点击超链接-进入编辑超链接界面-输入我们需要抓取的搜索目标公众号
今天我们以“数据分析”公众号的爬取为例给大家介绍
点击公众号查看每个文章对应的标题信息
我们这次爬虫的目标是获取文章的标题和对应的链接。
二、开始爬取
爬虫的三个步骤:
1、请求网页
首先导入我们使用这个爬虫需要的第三方库
import re#用来解析网页
import requests#用来请求网页
import csv#用来保存数据
import time#用来设置每次爬取间隔的时间
找到我们抓取的目标数据所在的位置,点击搜索得到的包,获取目标URL和请求头信息
请求网页
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#请求头信息,这里cookie信息必须添加,否则得不到网页信息
url='https://mp.weixin.qq.com/cgi-b ... 39%3B
response=requests.get(url,headers=headers)#得到响应内容
response.encoding='utf-8'#设置响应内容为utf-8格式
html=response.text#得到网页的文本形式
print(html)
这里的请求头信息必须加上cookie信息,否则无法获取网页信息
网页的请求结果如下图所示。红框标记了我们需要的文章title 和文章 链接
2、分析网页
从网页响应结果我们可以看到,每个文章的标题和链接分别位于“title”标签和“cover”标签后面,所以我们可以直接使用正则表达式来解析它们
title=re.findall('"title":"(.*?)"',html)#得到文章标题
cover=re.findall('"cover":"(.*?)"',html)#得到文章链接
all=zip(title,cover)#利用zip方法,将两个列表中的数据一一对应
print(list(all))#list是对zip方法得到的数据进行解压
解析后的结果如下
3、保存数据
for data in all:#for循环遍历列表
time.sleep(3)#每爬取一篇文章间隔3秒,以防触发反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公众号文章.csv','a',encoding='utf-8-sig') as file:
#将数据保存到桌面
write=csv.writer(file)
write.writerow(data)
到此这个爬虫就完成了,我们来看看最终的结果
完整代码
import re#用来解析网页
import requests#用来请求网页
import csv#用来保存数据
import time#用来设置每次爬取间隔的时间
# 请求网页
index=0
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#请求头信息,这里cookie信息必须添加,否则得不到网页信息
for i in range(2):#设置for循环实现翻页,爬取多页内容,这里range括号内的参数可以更改
url='https://mp.weixin.qq.com/cgi-b ... 2Bstr(index)+'&count=5&fakeid=MjM5MjAxMDM4MA==&type=9&query=&token=59293242&lang=zh_CN&f=json&ajax=1'
response=requests.get(url,headers=headers)#得到响应内容
response.encoding='utf-8'#设置响应内容为utf-8格式
html=response.text#得到网页的文本形式
# 解析网页
title=re.findall('"title":"(.*?)"',html)#得到文章标题
cover=re.findall('"cover":"(.*?)"',html)#得到文章链接
all=zip(title,cover)#利用zip方法,将两个列表中的数据一一对应
# print(list(all))#list是对zip方法得到的数据进行解压
# 保存数据
for data in all:#for循环遍历列表
time.sleep(3)#每爬取一篇文章间隔3秒,以防出发反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公众号文章.csv','a',encoding='utf-8-sig') as file:
#将数据保存到桌面
write=csv.writer(file)
write.writerow(data)
pass
pass
index += 5 查看全部
querylist采集微信公众号文章(Python批量抓取公众号文章
)
PS:如需Python学习资料,可点击下方链接自行获取
Python免费学习资料和群交流答案点击加入
爬取的方法有很多种。今天给大家分享一个更简单的方法,就是通过微信公众号后台的“超链接”功能进行爬取。可能有的朋友还没有接触过微信公众号后台,这里放个图让大家了解一下

这里有的朋友可能会说,我后台无法登录公众号,怎么办? ? ?
没关系,虽然每个爬虫的目的都是为了得到我们想要的结果,但这不是我们学习的重点。我们学习的重点是爬取过程,也就是我们如何获取目标数据,所以无法公开登录 看完这篇文章后,后台的朋友可能无法获取到最终爬取结果,但看完这篇文章你也会有所收获。
一、前期准备
选择要抓取的目标公众号
点击超链接-进入编辑超链接界面-输入我们需要抓取的搜索目标公众号
今天我们以“数据分析”公众号的爬取为例给大家介绍

点击公众号查看每个文章对应的标题信息

我们这次爬虫的目标是获取文章的标题和对应的链接。
二、开始爬取
爬虫的三个步骤:
1、请求网页
首先导入我们使用这个爬虫需要的第三方库
import re#用来解析网页
import requests#用来请求网页
import csv#用来保存数据
import time#用来设置每次爬取间隔的时间
找到我们抓取的目标数据所在的位置,点击搜索得到的包,获取目标URL和请求头信息

请求网页
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#请求头信息,这里cookie信息必须添加,否则得不到网页信息
url='https://mp.weixin.qq.com/cgi-b ... 39%3B
response=requests.get(url,headers=headers)#得到响应内容
response.encoding='utf-8'#设置响应内容为utf-8格式
html=response.text#得到网页的文本形式
print(html)
这里的请求头信息必须加上cookie信息,否则无法获取网页信息
网页的请求结果如下图所示。红框标记了我们需要的文章title 和文章 链接

2、分析网页
从网页响应结果我们可以看到,每个文章的标题和链接分别位于“title”标签和“cover”标签后面,所以我们可以直接使用正则表达式来解析它们
title=re.findall('"title":"(.*?)"',html)#得到文章标题
cover=re.findall('"cover":"(.*?)"',html)#得到文章链接
all=zip(title,cover)#利用zip方法,将两个列表中的数据一一对应
print(list(all))#list是对zip方法得到的数据进行解压
解析后的结果如下

3、保存数据
for data in all:#for循环遍历列表
time.sleep(3)#每爬取一篇文章间隔3秒,以防触发反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公众号文章.csv','a',encoding='utf-8-sig') as file:
#将数据保存到桌面
write=csv.writer(file)
write.writerow(data)
到此这个爬虫就完成了,我们来看看最终的结果

完整代码
import re#用来解析网页
import requests#用来请求网页
import csv#用来保存数据
import time#用来设置每次爬取间隔的时间
# 请求网页
index=0
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#请求头信息,这里cookie信息必须添加,否则得不到网页信息
for i in range(2):#设置for循环实现翻页,爬取多页内容,这里range括号内的参数可以更改
url='https://mp.weixin.qq.com/cgi-b ... 2Bstr(index)+'&count=5&fakeid=MjM5MjAxMDM4MA==&type=9&query=&token=59293242&lang=zh_CN&f=json&ajax=1'
response=requests.get(url,headers=headers)#得到响应内容
response.encoding='utf-8'#设置响应内容为utf-8格式
html=response.text#得到网页的文本形式
# 解析网页
title=re.findall('"title":"(.*?)"',html)#得到文章标题
cover=re.findall('"cover":"(.*?)"',html)#得到文章链接
all=zip(title,cover)#利用zip方法,将两个列表中的数据一一对应
# print(list(all))#list是对zip方法得到的数据进行解压
# 保存数据
for data in all:#for循环遍历列表
time.sleep(3)#每爬取一篇文章间隔3秒,以防出发反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公众号文章.csv','a',encoding='utf-8-sig') as file:
#将数据保存到桌面
write=csv.writer(file)
write.writerow(data)
pass
pass
index += 5
querylist采集微信公众号文章(微信公众号采集二级目录生成工具是一款第三版巧妙伪原创来袭 )
采集交流 • 优采云 发表了文章 • 0 个评论 • 106 次浏览 • 2021-08-31 22:22
)
微信公众号采集二级目录生成工具是巧妙伪原创来击]微信公众号采集+巧妙伪原创+多cms版本的第三版,这个软件可以批量伪原创然后批量伪原创检查。这是非常值得注意的。请先在本地环境中测试。另外,这个软件不能自动编码。
类似软件
版本说明
软件地址
软件说明
1.本软件的作用:
为优采云站长准备的,也适合养站的人站群
2.运行过程:
采集微信文章,然后伪原创点击这些文章,然后更新为网站。整个过程是全自动的。无需打开后台,通过数据库发送。因此,需要生成静态页面。
3.与上一版本对比:和之前一样,微信公众号文章采集,之后使用采集伪原创。不知道这个算不算伪原创,不过确实达到了伪原创的效果,
这个新版本伪原创的玩法很巧妙。是翻译。先从中文翻译成英文,再从英文翻译成中文。可惜一天翻译量有限,可以自行更改IP地址。 (其实不适合更新太多,一天几条就可以了,一般如果是老站的话。关键词可以快速重新排名)
如何使用
新手站长不推荐这个,因为这个软件是用来偷懒的,新手最好不要偷懒,重点是怕新手不懂概念,遇到问题也解决不了问题。然后来找我。我也很弱,我也是菜鸟。我不想回答简单的问题。我不会复杂。
不是你不问我,而是希望你先百度一下,不要再问了。有时同样的问题可能会被问很多次,就会有脾气。我是这个德行的人,请不要摘下来。还是希望和大家一起进步。
查看全部
querylist采集微信公众号文章(微信公众号采集二级目录生成工具是一款第三版巧妙伪原创来袭
)
微信公众号采集二级目录生成工具是巧妙伪原创来击]微信公众号采集+巧妙伪原创+多cms版本的第三版,这个软件可以批量伪原创然后批量伪原创检查。这是非常值得注意的。请先在本地环境中测试。另外,这个软件不能自动编码。
类似软件
版本说明
软件地址
软件说明
1.本软件的作用:
为优采云站长准备的,也适合养站的人站群
2.运行过程:
采集微信文章,然后伪原创点击这些文章,然后更新为网站。整个过程是全自动的。无需打开后台,通过数据库发送。因此,需要生成静态页面。
3.与上一版本对比:和之前一样,微信公众号文章采集,之后使用采集伪原创。不知道这个算不算伪原创,不过确实达到了伪原创的效果,
这个新版本伪原创的玩法很巧妙。是翻译。先从中文翻译成英文,再从英文翻译成中文。可惜一天翻译量有限,可以自行更改IP地址。 (其实不适合更新太多,一天几条就可以了,一般如果是老站的话。关键词可以快速重新排名)
如何使用
新手站长不推荐这个,因为这个软件是用来偷懒的,新手最好不要偷懒,重点是怕新手不懂概念,遇到问题也解决不了问题。然后来找我。我也很弱,我也是菜鸟。我不想回答简单的问题。我不会复杂。
不是你不问我,而是希望你先百度一下,不要再问了。有时同样的问题可能会被问很多次,就会有脾气。我是这个德行的人,请不要摘下来。还是希望和大家一起进步。

querylist采集微信公众号文章(querylist采集微信公众号文章采集-微信号采集软件教程)
采集交流 • 优采云 发表了文章 • 0 个评论 • 155 次浏览 • 2021-08-31 08:02
querylist采集微信公众号文章采集-微信公众号采集软件是针对微信公众号进行内容抓取的工具,为快速采集微信公众号文章提供方便。具体请看下面的教程:准备工作安装并使用:pipinstallworkerget,抓取微信公众号文章可以从这里下载安装环境matplotlibimportpyplotsetup()创建项目并编译(暂时先不编译)#configpyplot.__version__为获取所需项目的version信息mats_version="1.0"将本地配置文件放到本地的users/username/.txt文件里。
#pathtothetemplatepyplot.__version__="1.0"用txt命令打开刚才编译生成的users/username/.txt文件mats_version="1.0"#template指定一个或多个预处理的目录mats_version_template="[+]pyglass"#当然也可以其他的打开users/username/.txt文件并下一步。
点击下一步,将指定的两个选项拖到configure阶段。#configsite接下来才可以开始编译config=pyplot.__version__+mats_version#编译config_align=["left","right"]将前端配置文件放在同一文件夹下,如果要先编译文件会将它在服务器的预处理目录下添加绝对路径,如果要在服务器编译文件才需要指定文件路径。
#windows-win="windows/config"安装flex-directory和httpcompiler-directory#matplotlib-import_pyplot.__version__="1.0"#编译config_alias=["flex-directory","httpcompiler-directory"]#加载到python环境中如果你的python版本超过了python的3.6,请使用更新版本。
如果你使用的是3.6,请使用下面的命令:sudoapt-getupdatesudoapt-getupgrade检查是否完成#gunbuild检查下flex-directory已安装,如果没有则需要编译flex-directory为你的系统c:\users\administrator\.bind:\flex-directory-project\python.exe#fastddf_project指定的variabled:\flex-directory-project\python.exe\flash.exe#letfs_perf_root()%pathfs_perf_root()%path\flex-directory-project\flash.exe\fps.exe#setpython_path=d:\flex-directory-project\python.exe\python.exe\python.exe.\flex-directory-project\flash.exeset_path=d:\flex-directory-project\python.exe\python.exe\python.exe#configurewww_imagemats_version="1.0。 查看全部
querylist采集微信公众号文章(querylist采集微信公众号文章采集-微信号采集软件教程)
querylist采集微信公众号文章采集-微信公众号采集软件是针对微信公众号进行内容抓取的工具,为快速采集微信公众号文章提供方便。具体请看下面的教程:准备工作安装并使用:pipinstallworkerget,抓取微信公众号文章可以从这里下载安装环境matplotlibimportpyplotsetup()创建项目并编译(暂时先不编译)#configpyplot.__version__为获取所需项目的version信息mats_version="1.0"将本地配置文件放到本地的users/username/.txt文件里。
#pathtothetemplatepyplot.__version__="1.0"用txt命令打开刚才编译生成的users/username/.txt文件mats_version="1.0"#template指定一个或多个预处理的目录mats_version_template="[+]pyglass"#当然也可以其他的打开users/username/.txt文件并下一步。
点击下一步,将指定的两个选项拖到configure阶段。#configsite接下来才可以开始编译config=pyplot.__version__+mats_version#编译config_align=["left","right"]将前端配置文件放在同一文件夹下,如果要先编译文件会将它在服务器的预处理目录下添加绝对路径,如果要在服务器编译文件才需要指定文件路径。
#windows-win="windows/config"安装flex-directory和httpcompiler-directory#matplotlib-import_pyplot.__version__="1.0"#编译config_alias=["flex-directory","httpcompiler-directory"]#加载到python环境中如果你的python版本超过了python的3.6,请使用更新版本。
如果你使用的是3.6,请使用下面的命令:sudoapt-getupdatesudoapt-getupgrade检查是否完成#gunbuild检查下flex-directory已安装,如果没有则需要编译flex-directory为你的系统c:\users\administrator\.bind:\flex-directory-project\python.exe#fastddf_project指定的variabled:\flex-directory-project\python.exe\flash.exe#letfs_perf_root()%pathfs_perf_root()%path\flex-directory-project\flash.exe\fps.exe#setpython_path=d:\flex-directory-project\python.exe\python.exe\python.exe.\flex-directory-project\flash.exeset_path=d:\flex-directory-project\python.exe\python.exe\python.exe#configurewww_imagemats_version="1.0。
querylist采集微信公众号文章(querylist采集微信公众号文章内容流量,楼上说的很清楚了)
采集交流 • 优采云 发表了文章 • 0 个评论 • 145 次浏览 • 2021-08-29 18:02
querylist采集微信公众号文章内容流量,
楼上说的很清楚了。我补充一点,将今日头条的浏览数据导入web,对用户进行画像,提高个性化推荐率。
我想知道你们具体怎么做的?我也做过今日头条的图文推荐系统。如果要完成公众号的推荐,个人认为你们至少需要:基础数据:头条号的账号信息,如头条号id、签约、健康度、粉丝量等。产品数据:今日头条推荐算法的介绍,使用pdf版的论文会好一些。现在已有今日头条的平台数据,可参考相关数据建立模型的准确率、召回率等指标,结合实际情况一起设计模型,根据实际情况对模型的泛化能力、特征工程等进行微调。
模型交叉:比如在泛化能力较差时对其他数据使用,进行特征交叉或者对某个数据进行偏僻标签,从而提高泛化能力。数据一般有:检索、关注、公众号历史文章等。相关性、相似性:模型初期需要考虑特征间相关性,建立连续、相关、正负相关度不等权重特征表达式。对权重特征进行聚类等方式提高泛化能力。精准关键词、转发量、评论量、点赞量、粉丝量。
只做字节跳动的话,今日头条可以说是非常完整的一套产品矩阵。另外一方面,使用推荐系统从业者,很多都会注意到背后离不开系统的底层架构的搭建。其中包括api接口,代码开发,系统优化,反馈系统以及业务的指导等。 查看全部
querylist采集微信公众号文章(querylist采集微信公众号文章内容流量,楼上说的很清楚了)
querylist采集微信公众号文章内容流量,
楼上说的很清楚了。我补充一点,将今日头条的浏览数据导入web,对用户进行画像,提高个性化推荐率。
我想知道你们具体怎么做的?我也做过今日头条的图文推荐系统。如果要完成公众号的推荐,个人认为你们至少需要:基础数据:头条号的账号信息,如头条号id、签约、健康度、粉丝量等。产品数据:今日头条推荐算法的介绍,使用pdf版的论文会好一些。现在已有今日头条的平台数据,可参考相关数据建立模型的准确率、召回率等指标,结合实际情况一起设计模型,根据实际情况对模型的泛化能力、特征工程等进行微调。
模型交叉:比如在泛化能力较差时对其他数据使用,进行特征交叉或者对某个数据进行偏僻标签,从而提高泛化能力。数据一般有:检索、关注、公众号历史文章等。相关性、相似性:模型初期需要考虑特征间相关性,建立连续、相关、正负相关度不等权重特征表达式。对权重特征进行聚类等方式提高泛化能力。精准关键词、转发量、评论量、点赞量、粉丝量。
只做字节跳动的话,今日头条可以说是非常完整的一套产品矩阵。另外一方面,使用推荐系统从业者,很多都会注意到背后离不开系统的底层架构的搭建。其中包括api接口,代码开发,系统优化,反馈系统以及业务的指导等。
爬取微信公众号怎么做?各种方法的汇总说明
采集交流 • 优采云 发表了文章 • 0 个评论 • 115 次浏览 • 2021-08-27 04:08
爬取微信公众号怎么做?各种方法的汇总说明
爬虫
我经常有朋友在公众号文章爬取方面需要帮助。这次我将各种方法做一个总结。
目前微信公众号的抓取方式主要有以下三种:
通过爬取第三方公众号文章聚网站并使用微信官方平台引用文章接口。通过抓包程序,分析微信app界面通过第三方公众号文章聚网站攀取访问公众号文章
微信公众号文章未提供搜外功能。直到2013年,微信投资搜狗后,搜狗搜索访问了微信公众号数据。从此您可以通过搜狗搜索浏览或查询相关公众号和@。文章。
域名为:
搜狗微信
可以直接搜索公众号或文章的关键词。部分热门公众号及时更新,几乎与微信同步。
公众号搜索
所以,可以使用搜狗微信界面抓取一些热门公众号,但是有些小众公众号搜索不到,而且搜狗的反抓取机制更新更频繁,获取数据的界面变化更快,有经常两三个月就调整一次,这样爬虫就容易挂了。这里,推荐使用selenium,爬得更省心。此外,搜狗对每个ip也有访问限制。访问太频ip会被封锁24小时,需要购买ip池处理。
还有一些其他公众号文章聚网站(比如门户),也有更新不及时或者收录的问题。毕竟搜狗这个亲儿子不好。通过微信公众平台引用文章interface
这个界面比较隐蔽,不能匿名访问。需要有官方账号。最好注册一个新的公众号,以免被屏蔽。
先说具体步骤:先登录微信公众号,进入首页选择新群发,然后点击自建图,在文章edit工具栏中找到超链接,如下图:
点击超链接
点击这个超链接按钮,会弹出一个对话框,选择链接输入法找到文章,如下图:
找到文章
这里可以输入公众号名称,回车后微信会返回匹配的公众号列表,如下图:
搜索公众号
然后点击你要抢的公众号,就会显示具体的文章列表,已经是倒序了。最新的文章是第一个。如下图:
文章List
微信的分页机制比较奇怪。每个公众号每个页面显示的数据项数量是不同的。分页爬行时需要处理。
通过chrome分析网络请求的数据,我们基本得到了我们想要的数据,文章链接、封面、发布日期、副标题等,如下图:
网络请求数据
好了,这个爬虫方法的原理讲完了,下面开始实际操作。
因为微信公众平台登录验证比较严格,输入密码后手机必须扫码确认才能登录,所以最好使用selenium进行自动化。具体微信界面的分析过程我就不一一列举了,直接贴上代码:
import re
import time
import random
import traceback
import requests
from selenium import webdriver
class Spider(object):
'''
微信公众号文章爬虫
'''
def __init__(self):
# 微信公众号账号
self.account = '286394973@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-b ... 51598,
# 从这里获取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 小时。 查看全部
爬取微信公众号怎么做?各种方法的汇总说明
爬虫
我经常有朋友在公众号文章爬取方面需要帮助。这次我将各种方法做一个总结。
目前微信公众号的抓取方式主要有以下三种:
通过爬取第三方公众号文章聚网站并使用微信官方平台引用文章接口。通过抓包程序,分析微信app界面通过第三方公众号文章聚网站攀取访问公众号文章
微信公众号文章未提供搜外功能。直到2013年,微信投资搜狗后,搜狗搜索访问了微信公众号数据。从此您可以通过搜狗搜索浏览或查询相关公众号和@。文章。
域名为:
搜狗微信
可以直接搜索公众号或文章的关键词。部分热门公众号及时更新,几乎与微信同步。
公众号搜索
所以,可以使用搜狗微信界面抓取一些热门公众号,但是有些小众公众号搜索不到,而且搜狗的反抓取机制更新更频繁,获取数据的界面变化更快,有经常两三个月就调整一次,这样爬虫就容易挂了。这里,推荐使用selenium,爬得更省心。此外,搜狗对每个ip也有访问限制。访问太频ip会被封锁24小时,需要购买ip池处理。
还有一些其他公众号文章聚网站(比如门户),也有更新不及时或者收录的问题。毕竟搜狗这个亲儿子不好。通过微信公众平台引用文章interface
这个界面比较隐蔽,不能匿名访问。需要有官方账号。最好注册一个新的公众号,以免被屏蔽。
先说具体步骤:先登录微信公众号,进入首页选择新群发,然后点击自建图,在文章edit工具栏中找到超链接,如下图:
点击超链接
点击这个超链接按钮,会弹出一个对话框,选择链接输入法找到文章,如下图:
找到文章
这里可以输入公众号名称,回车后微信会返回匹配的公众号列表,如下图:
搜索公众号
然后点击你要抢的公众号,就会显示具体的文章列表,已经是倒序了。最新的文章是第一个。如下图:
文章List
微信的分页机制比较奇怪。每个公众号每个页面显示的数据项数量是不同的。分页爬行时需要处理。
通过chrome分析网络请求的数据,我们基本得到了我们想要的数据,文章链接、封面、发布日期、副标题等,如下图:
网络请求数据
好了,这个爬虫方法的原理讲完了,下面开始实际操作。
因为微信公众平台登录验证比较严格,输入密码后手机必须扫码确认才能登录,所以最好使用selenium进行自动化。具体微信界面的分析过程我就不一一列举了,直接贴上代码:
import re
import time
import random
import traceback
import requests
from selenium import webdriver
class Spider(object):
'''
微信公众号文章爬虫
'''
def __init__(self):
# 微信公众号账号
self.account = '286394973@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-b ... 51598,
# 从这里获取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 小时。