querylist采集微信公众号文章(谷歌浏览器微信公众号申请门槛低,服务号需要营业执照等)

优采云 发布时间: 2021-11-02 06:05

  querylist采集微信公众号文章(谷歌浏览器微信公众号申请门槛低,服务号需要营业执照等)

  一、网上的方法:

  1.在订阅账号功能中使用查询链接,(这个链接现在是严重的反乱码措施,抓取几十个页面会屏蔽订阅账号,仅供参考)

  更多详情,请访问此链接:/4652.html

  2.使用搜狗搜索微信搜索(此方法只能查看每个微信公众号的前10条文章)

  详情请访问此链接:/qiqiyingse/article/details/70050113

  3.先抢公众号界面,进入界面获取所有文章连接

  二、环境配置及材料准备

  1.需要安装python selenium模块包,使用selenium中的webdriver驱动浏览器获取cookie,达到登录的效果;

  2. 使用webdriver功能需要安装浏览器对应的驱动插件。我在这里测试的是 Google Chrome。

  3.微信公众号申请(个人订阅号申请门槛低,服务号需要营业执照等)

  4、。微信公众号文章界面地址可以在微信公众号后台新建图文消息,可以通过超链接功能获取;

  

  通过搜索关键字获取所有相关公众号信息,但我只取第一个进行测试,其他感兴趣的人也可以全部获取

  

  5.获取要爬取的公众号的fakeid

  

  6.选择要爬取的公众号,获取文章接口地址

  

  从 selenium 导入 webdriver

  导入时间

  导入json

  导入请求

  重新导入

  随机导入

  user=""

  password="weikuan3344520"

  gzlist=['熊猫']

  #登录微信公众号,登录后获取cookie信息,保存在本地文本

  def weChat_login():

  #定义一个空字典来存储cookies的内容

  post={}

  #使用网络驱动程序启动谷歌浏览器

  print("启动浏览器,打开微信公众号登录界面")

  driver = webdriver.Chrome(executable_path='C:\chromedriver.exe')

  #打开微信公众号登录页面

  driver.get('/')

  #等待 5 秒

  time.sleep(5)

  print("输入微信公众号账号和密码...")

  #清除帐号框中的内容

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

  #自动填写登录用户名

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

  #清空密码框内容

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

  #自动填写登录密码

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

  //这是重点,最近改版后

  #自动输入密码后,需要手动点击记住我

  print("请点击登录界面:记住您的账号")

  time.sleep(10)

  #自动点击登录按钮登录

  driver.find_element_by_xpath("./*//a[@class='btn_login']").click()

  #用手机扫描二维码!

  print("请用手机扫描二维码登录公众号")

  time.sleep(20)

  print("登录成功")

  #重新加载公众号登录页面,登录后会显示公众号后台首页,从返回的内容中获取cookies信息

  driver.get('/')

  #获取cookies

  cookie_items = driver.get_cookies()

  #获取的cookies为列表形式,将cookies转换为json形式存放在名为cookie的本地文本中

  对于 cookie_items 中的 cookie_item:

  post[cookie_item['name']] = cookie_item['value']

  cookie_str = json.dumps(post)

  with open('cookie.txt','w+', encoding='utf-8') as f:

  f.write(cookie_str)

  print("Cookies 信息已保存在本地")

  #Crawl 微信公众号文章并存入本地文本

  def get_content(query):

  #query 是要抓取的公众号名称

  #公众号首页

  url =''

  #设置标题

  标题 = {

  "主机":"",

  "用户代理": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/5< @3.0"

  }

  #读取上一步获取的cookie

  with open('cookie.txt','r', encoding='utf-8') as f:

  cookie = f.read()

  cookies = json.loads(cookie)

  #登录后微信公众号首页url改为:/cgi-bin/home?t=home/index&lang=zh_CN&token=1849751598,获取token信息

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

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

  #搜索微信公众号接口地址

  search_url ='/cgi-bin/searchbiz?'

  #搜索微信公众号接口需要传入的参数,共有三个变量:微信公众号token、随机数random、搜索微信公众号名称

  query_id = {

  'action':'search_biz',

  'token':令牌,

  'lang':'zh_CN',

  'f':'json',

  'ajax': '1',

  'random': random.random(),

  '查询':查询,

  '开始':'0',

  '计数':'5'

  }

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

  search_response = requests.get(search_url, cookies=cookies, headers=header, params=query_id)

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

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

  #获取这个公众号的fakeid,然后抓取公众号文章需要这个字段

  fakeid = list.get('fakeid')

  #微信公众号文章界面地址

  appmsg_url ='/cgi-bin/appmsg?'

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

  query_id_data = {

  'token':令牌,

  'lang':'zh_CN',

  'f':'json',

  'ajax': '1',

  'random': random.random(),

  'action':'list_ex',

  'begin': '0',#不同的页面,这个参数改变,改变规则是每页加5

  '计数':'5',

  '查询':'',

  'fakeid':fakeid,

  '类型':'9'

  }

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

  appmsg_response = requests.get(appmsg_url, cookies=cookies, headers=header, params=query_id_data)

  #获取文章总数

  max_num = appmsg_response.json().get('app_msg_cnt')

  #每页至少有5个条目,获取文章页总数,爬取时需要页面爬取

  num = int(int(max_num) / 5)

  #起始页begin参数,后续每页加5

  开始 = 0

  当 num + 1> 0 :

  query_id_data = {

  'token':令牌,

  'lang':'zh_CN',

  'f':'json',

  'ajax': '1',

  'random': random.random(),

  'action':'list_ex',

  'begin':'{}'.format(str(begin)),

  '计数':'5',

  '查询':'',

  'fakeid':fakeid,

  '类型':'9'

  }

  print('翻页:--------------',begin)

  #获取每个页面的标题和链接地址文章,并写入本地文本

  query_fakeid_response = requests.get(appmsg_url, cookies=cookies, headers=header, params=query_id_data)

  fakeid_list = query_fakeid_response.json().get('app_msg_list')

  对于 fakeid_list 中的项目:

  content_link=item.get('link')

  content_title=item.get('title')

  fileName=query+'.txt'

  with open(fileName,'a',encoding='utf-8') as fh:

  fh.write(content_title+":\n"+content_link+"\n")

  数量 -= 1

  begin = int(begin)

  开始+=5

  time.sleep(2)

  如果 __name__=='__main__':

  试试:

  #登录微信公众号,登录后获取cookie信息,保存在本地文本

  weChat_login()

  #登录后,爬取微信公众号文章微信公众号后台提供的界面文章

  在 gzlist 中查询:

  #Crawl 微信公众号文章并存入本地文本

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线