微信公众号数据抓取

1.抓取某个公众号所有的文件信息

Charles +电脑版微信+pycharm+python

 

2. 分析

经过分析:每个公众号文章列表页连接都是

https://mp.weixin.qq.com/mp/profile_ext  开头 ,抓取时每个公众号的只有几个参照不一样

抓取:

 

 3. 代码

import requests
import json
import time

def parse(__biz, uin, key, pass_ticket, appmsg_token="", offset="0"):
    """
    文章信息获取
    """
    url = 'https://mp.weixin.qq.com/mp/profile_ext'
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.901.400 QQBrowser/9.0.2524.400",
    }
    params = {
        "action": "getmsg",
        "__biz": __biz,
        "f": "json",
        "offset": str(offset),
        "count": "10",
        "is_ok": "1",
        "scene": "124",
        "uin": uin,
        "key": key,
        "pass_ticket": pass_ticket,
        "wxtoken": "",
        "appmsg_token": appmsg_token,
        "x5": "0",
    }

    res = requests.get(url, headers=headers, params=params, timeout=3)
    data = json.loads(res.text)
    print(data)
    # 获取信息列表
    msg_list = eval(data.get("general_msg_list")).get("list", [])
    for i in msg_list:
        # 去除文字链接
        try:
            # 文章标题
            title = i["app_msg_ext_info"]["title"].replace(',', '')
            # 文章摘要
            digest = i["app_msg_ext_info"]["digest"].replace(',', '')
            # 文章链接
            url = i["app_msg_ext_info"]["content_url"].replace("\\", "").replace("http", "https")
            # 文章发布时间
            date = i["comm_msg_info"]["datetime"]
            print(title, digest, url, date)
            with open('article.csv', 'a') as f:
                f.write(title + ',' + digest + ',' + url + ',' + str(date) + '\n')
        except:
            pass
    # 判断是否可继续翻页 1-可以翻页  0-到底了
    if 1 == data.get("can_msg_continue", 0):
        time.sleep(3)
        parse(__biz, uin, key, pass_ticket, appmsg_token, data["next_offset"])
    else:
        print("爬取完毕")


if __name__ == '__main__':
    # 请求参数
    __biz = input('biz: ')
    uin = input('uin: ')
    key = input('key: ')
    pass_ticket = input('passtick: ')
    # 解析函数
    parse(__biz, uin, key, pass_ticket, appmsg_token="", offset="0")

通过抓取获取到不同公众号的__biz, uin, key, pass_ticket的参数,就可以完成对该公众号的抓取。

 注意: 程序运行前,用抓包工具获取需要的参数后,需要将charles 或filddle 抓包工具先关闭,然后再运行该程序,否则会报错。(这个程序需要电脑端微信登录后,进行抓取,如果使用的是模拟器,模拟器上的uni和key 参数和电脑端不一样,一般请求不能成功!)

 

转载于:https://www.cnblogs.com/knighterrant/p/10826872.html

### 微信公众号留言数据抓取挑战 微信公众号的内容具有一定的封闭性,通常不对外开放API用于获取除官方提供之外的信息,如文章的评论区留言。对于想要抓取消息留言的需求来说,存在较大的技术和法律风险。 #### 法律合规考量[^1] 在考虑任何技术实现之前,重要的是要理解并遵守相关法律法规以及平台的服务条款。未经授权的大规模数据收集行为可能违反《网络安全法》以及其他个人信息保护法规,在未获得许可的情况下进行此类操作可能导致法律责任。 #### 技术难度分析 即使忽略合法性问题,从纯技术角度来看,直接通过HTTP请求或其他方式访问微信公众平台上特定文章下的用户评论也面临重重障碍: - **加密通信**:现代移动应用和服务端之间往往采用HTTPS协议传输数据,这使得传统的简单抓包难以解析实际内容。 - **动态加载机制**:许多社交平台为了优化用户体验会采用异步JavaScript调用来逐步显示更多条目,这意味着即使是能够解密流量也无法轻易定位到完整的留言列表。 - **反爬虫措施**:正如提到过的那样,微信团队已经部署了一系列有效的防护手段来阻止第三方程序非法读取内部资源,频繁触发这些防御可能会导致IP封禁或者其他形式的惩罚。 ```python import requests from bs4 import BeautifulSoup # 假设代码仅作为概念验证用途,并不会真正运行成功 def fetch_wechat_comments(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', # 更多必要的header字段... } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") comments_section = soup.find('div', class_='comment-area') # 这里只是一个假设的选择器路径 if not comments_section: print("未能找到评论区域") return None comment_list = [] for item in comments_section.findAll('li'): author = item.select_one('.author').get_text(strip=True) content = item.select_one('.content').get_text(strip=True) comment_list.append({ 'author': author, 'content': content }) return comment_list ``` 上述Python脚本展示了理论上如何利用`requests`库发送GET请求至目标网页地址,并借助于`BeautifulSoup`解析HTML文档结构从而提取出所需信息的过程。然而实际上由于前面提及的原因此方法几乎不可能奏效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值