selenium;time;requests;json,微信自己的公众号接口,爬取微信公众号文章,简单案例,后期可以自己添加公众号或者构造公众号名称列表来寻找文章

本文介绍了一种使用Python和Selenium爬取微信公众号文章的方法,通过登录并利用代理池绕过限制,实现了对指定公众号历史文章的大规模抓取。文章详细讲解了如何设置代理、控制请求频率以及解析数据。

      这样做法可以爬虫每个公众号大概能爬60篇,就会起限制,所以要爬取全部的文章的话,要启用下篇文章中的代理池爬取,就是在请求的时候加上代理,然后睡眠时间需要你自己的尝试了。

      然后其中的查询关键字‘query’,可以换成是手输入的;或者加个找好的公众号列表,在循环遍历,但是呢,这样做的话,最好在函数中定义,然后循环函数,会比这个更加清晰。

# -*- coding: utf-8 -*-
# @date: 2018\11\20 00200:39 
# @Author  : huangtao!!
# @FileName: get_cook.py
# @Software: PyCharm
# @Blog    :https://blog.youkuaiyun.com/Programmer_huangtao
from selenium import webdriver
import time
from pprint import pprint
from fake_useragent import UserAgent
import random
import  requests
import re
import time 
import json
cookie = {}
driver = webdriver.Chrome()
driver.get('https://mp.weixin.qq.com')
time.sleep(2)
driver.find_element_by_xpath('./*//input[@name="account"]').clear()
driver.find_element_by_xpath('./*//input[@name="account"]').send_keys('你的公众号账号')
driver.find_element_by_xpath('./*//input[@name="password"]').clear()
time.sleep(5)
driver.find_element_by_xpath('./*//input[@name="password"]').send_keys('密码')
driver.find_element_by_xpath('//label[@class="frm_checkbox_label"]').click()
driver.find_element_by_xpath('//a[@class="btn_login"]').click()
time.sleep(15)
cookies = driver.get_cookies()
for item in cookies:
    cookie[item.get('name')] = item.get('value')
pprint(cookie)
with open('cookie.txt','w',encoding='utf-8')as f:
    f.write(json.dumps(cookie))
headers = {'User-Agent':UserAgent().random}
with open('cookie.txt','r',encoding='utf-8')as f:
    cookie = f.read()
    cookie = json.loads(cookie)
url = 'https://mp.weixin.qq.com'
response = requests.get(url,headers=headers,cookies=cookie)
print(response.url)
# print(response.text)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
token = re.findall(r'token=(\d*)',response.url)[0]
print(token)
search_data = {
    'action': 'search_biz',
    'token': token ,
    'lang': 'zh_CN',
    'f': 'json',
    'ajax': '1',
    'random': random.random(),
    'query': 'jikexueyuan00',
    'begin': '0',
    'count': '5'
}
# print(response.url)
search_response = requests.get(search_url,cookies=cookie,params=search_data)
# print(search_response.text)
result = search_response.json().get('list')[0]
fakeid = result.get('fakeid')
appmsg_data = {
        'token': token,
        'lang': 'zh_CN',
        'f': 'json',
        'ajax': '1',
        'random': random.random(),
        'action': 'list_ex',
        'begin': '0',
        'count': '5',
        'query': '',
        'fakeid': fakeid,
        'type': '9'
}
appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
appmsg_response = requests.get(appmsg_url,cookies=cookie,params=appmsg_data)
# print(appmsg_response.text)
page_num = int(int(appmsg_response.json().get('app_msg_cnt')) / 5)
begin = 0
while page_num +1 >0:
    appmsg_data = {
        'token': token,
        'lang': 'zh_CN',
        'f': 'json',
        'ajax': '1',
        'random': random.random(),
        'action': 'list_ex',
        'begin': '{}'.format(str(begin)),
        'count': '5',
        'query': '',
        'fakeid': fakeid,
        'type': '9'}
    print('翻页',begin)
    appmsg_response = requests.get(appmsg_url, cookies=cookie, params=appmsg_data)
    appmsg_response_list = appmsg_response.json().get('app_msg_list')
    for item in appmsg_response_list:
        print('标题:',item.get('title'))
        print('链接',item.get('link'))
        pass
    page_num -= 1
    begin = int(begin)
    begin +=5
time.sleep(2)

 

 

 

 

### 使用Python进行微信公众号关键词爬取 为了实现从微信公众号中抓取关键词,可以采用基于API调用的方式。当涉及到具体操作时,搜索微信公众号接口需要传入三个主要变量:微信公众号token、随机数random以及目标微信公众号的名字[^1]。 对于更深入的文章级别的数据获取,则需额外提供所要爬取文章公众号fakeid作为参数之一[^3]。这表明,在构建请求时,除了上述提到的基础参数外,还需关注特定于文章查询的需求。 考虑到实际开发中的应用案例和技术选型,存在多种方法来达成这一目的,包括但不限于利用Selenium WebDriver模拟浏览器行为以绕过某些访问限制[^2]。然而值得注意的是,直接使用官方提供的API通常是更为推荐的做法,因为它更加稳定可靠,并且能够减少因反爬机制带来的麻烦。 下面是一个简单的代码片段展示如何发起HTTP GET请求并解析返回的数据: ```python import requests from urllib.parse import urlencode def fetch_wechat_articles(token, random_num, query): base_url = "https://api.weibo.com/2/search/article.json?" # 假设此URL用于示范;真实场景下应替换为正确的API端点 params = { 'access_token': token, 'rand': str(random_num), 'query': query } response = requests.get(base_url + urlencode(params)) if response.status_code == 200: return response.json() else: raise Exception('Failed to retrieve data') # 示例调用函数 articles_data = fetch_wechat_articles('your_access_token', 123456789, '科技') print(articles_data) ``` 需要注意的是,以上示例仅作说明用途,具体的API路径和所需参数可能有所不同,请参照最新的文档指南调整相应设置。此外,由于微信公众平台可能会不断更新其安全策略和服务条款,建议开发者密切关注官方公告,确保自己的项目符合最新规定。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值