querylist采集微信公众号文章(谷歌浏览器微信公众号申请门槛低,服务号需要营业执照等)
优采云 发布时间: 2021-11-02 06:05querylist采集微信公众号文章(谷歌浏览器微信公众号申请门槛低,服务号需要营业执照等)
一、网上的方法:
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 微信公众号文章并存入本地文本