admin 管理员组文章数量: 887019
1.获取一些必要的信息
1.1获取cookie、fakeid、token三者的值
1.首先进入微信公众号平台,如果没有微信公众号则创建一个微信公众号。进入之后点击图文消息。
2.选择想要获取的公众号
3.选择完成之后就不要动了,按下F12,打开浏览器检查功能(我这里用的浏览器是Microsoft Edge)
4.将选择文章部分用滚轮向下滑动,直到出现如下图所示文件(若滑到最底部还没有那就点击下一页,一般就会弹出来了)
5.记录下cookie、fakeid、token三者的值
1.2撰写代码
!!!声明:使用爬虫需遵守相关法律法规,和网站的 robots.txt 文件规定,避免对网站服务器造成过大负担。!!!
import requests
import json
import math
import time
import random
from tqdm import tqdm
import pandas as pd
# 可选的User-Agent列表
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15",
"Mozilla/5.0 (iPhone; CPU iPhone OS 12_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (Linux; Android 9; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Mobile Safari/537.36",
]
# 目标url
url = "https://mp.weixin.qq/cgi-bin/appmsg"
cookie = "这里填你的cookie"
headers = {
"Cookie": cookie,
}
data = {
"token": "这里填你的token",
"lang": "zh_CN",
"f": "json",
"ajax": "1",
"action": "list_ex",
"begin": "0",
"count": "5",
"query": "",
"fakeid": "这里填你的fakeid", # 自己的号,设置为空
"type": "9",
}
def get_total_count():
headers["User-Agent"] = random.choice(USER_AGENTS) # 每次请求动态更改 User-Agent
content_json = requests.get(url, headers=headers, params=data).json()
count = int(content_json["app_msg_cnt"])
return count
# 每 20 篇文章休息 5 分钟
def get_content_list(count, per_page=5, pause_after=20, pause_time=200):
page = int(math.ceil(count / per_page))
total_fetched = 0
for i in tqdm(range(page), desc="获取文章列表"):
data["begin"] = i * per_page
headers["User-Agent"] = random.choice(USER_AGENTS) # 每次请求动态更改 User-Agent
content_json = requests.get(url, headers=headers, params=data).json()
app_msg_list = content_json["app_msg_list"]
total_fetched += len(app_msg_list)
# 保存成json
with open("content_list.json", "w", encoding="utf-8") as f:
json.dump(app_msg_list, f, ensure_ascii=False, indent=4)
# 实时将数据保存到 CSV 文件中
for item in app_msg_list:
title = item["title"]
link = item["link"]
create_time = time.strftime("%Y-%m-%d %H:%M", time.localtime(item["create_time"]))
result = [[title, link, create_time]]
df = pd.DataFrame(result, columns=['title', 'link', 'create_time'])
df.to_csv("data.csv", mode='a', header=False, index=False, encoding='utf-8') # 追加模式写入
# 延长请求间隔时间,模拟更自然的行为
delay = random.uniform(20, 30) # 延迟10-20秒
print(f"等待 {delay:.2f} 秒后继续...")
time.sleep(delay)
# 每爬取 pause_after 篇文章后,暂停 pause_time 秒
if total_fetched >= pause_after:
print(f"已爬取 {total_fetched} 篇文章,休息 {pause_time / 60} 分钟...")
time.sleep(pause_time) # 暂停 5 分钟(300秒)
total_fetched = 0 # 重置计数器
if __name__ == "__main__":
# 创建 CSV 文件并写入标题行
df = pd.DataFrame(columns=['title', 'link', 'create_time'])
df.to_csv("data.csv", mode='w', index=False, encoding='utf-8')
count = get_total_count()
get_content_list(count)
最后运行效果:
最终代码生成的csv文件,显示公众号发布文章的名称和发布文章的时间(这里是以我自己的公众号为例):
版权声明:本文标题:爬虫获取微信公众号历史文章(这一篇文章就够!) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726778079h1027261.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论