querylist采集微信公众号文章(Python微信公众号文章爬取一.思路我们通过网页版)
优采云 发布时间: 2022-02-04 15:15querylist采集微信公众号文章(Python微信公众号文章爬取一.思路我们通过网页版)
Python微信公众号文章爬取
一.想法
我们通过微信公众平台网页版图文消息中的超链接获取我们需要的界面
从界面中我们可以得到对应的微信公众号和所有对应的微信公众号文章。
二.界面分析
获取微信公众号界面:
范围:
行动=search_biz
开始=0
计数=5
query=公众号
token = 每个账户对应的token值
lang=zh_CN
f=json
阿贾克斯=1
请求方法:
得到
所以在这个界面中,我们只需要获取token,查询的是你需要搜索的公众号,登录后可以通过web链接获取token。
获取公众号对应的文章接口:
范围:
行动=list_ex
开始=0
计数=5
fakeid=MjM5NDAwMTA2MA==
类型=9
查询=
令牌=557131216
lang=zh_CN
f=json
阿贾克斯=1
请求方法:
得到
在这个接口中,我们需要获取的值是上一步的token和fakeid,而这个fakeid可以在第一个接口中获取。这样我们就可以得到微信公众号文章的数据了。
三.实现第一步:
首先我们需要通过selenium来模拟登录,然后获取cookie和对应的token
def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get(\'https://mp.weixin.qq.com/\')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 点击切换到账号密码输入
browser.find_element_by_xpath("//a[@class=\'login__type__container__select-type\']").click()
sleep(2)
# 模拟用户点击
input_user = browser.find_element_by_xpath("//input[@name=\'account\']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name=\'password\']")
input_password.send_keys(password)
sleep(2)
# 点击登录
browser.find_element_by_xpath("//a[@class=\'btn_login\']").click()
sleep(2)
# 微信登录验证
print(\'请扫描二维码\')
sleep(20)
# 刷新当前网页
browser.get(\'https://mp.weixin.qq.com/\')
sleep(5)
# 获取当前网页链接
url = browser.current_url
# 获取当前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item[\'name\']] = item[\'value\']
# 转换为字符串
cookie_str = json.dumps(post)
# 存储到本地
with open(\'cookie.txt\', \'w+\', encoding=\'utf-8\') as f:
f.write(cookie_str)
print(\'cookie保存到本地成功\')
# 对当前网页链接进行切片,获取到token
paramList = url.strip().split(\'?\')[1].split(\'&\')
# 定义一个字典存储数据
paramdict = {}
for item in paramList:
paramdict[item.split(\'=\')[0]] = item.split(\'=\')[1]
# 返回token
return paramdict[\'token\']
定义了一个登录方法,其中的参数是登录账号和密码,然后定义了一个字典来存储cookie的值。模拟用户输入对应的账号密码,点击登录,会出现扫码验证,登录微信即可扫码。
刷新当前网页后,获取当前cookie和token并返回。
第二步:1.请求获取对应的公众号接口,获取我们需要的fakeid
url = \'https://mp.weixin.qq.com\'
headers = {
\'HOST\': \'mp.weixin.qq.com\',
\'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63\'
}
with open(\'cookie.txt\', \'r\', encoding=\'utf-8\') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = \'https://mp.weixin.qq.com/cgi-bin/searchbiz?\'
params = {
\'action\': \'search_biz\',
\'begin\': \'0\',
\'count\': \'5\',
\'query\': \'搜索的公众号名称\',
\'token\': token,
\'lang\': \'zh_CN\',
\'f\': \'json\',
\'ajax\': \'1\'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
传入我们获取的token和cookie,然后通过requests.get请求获取微信公众号返回的json数据
lists = search_resp.json().get(\'list\')[0]
通过以上代码可以获取对应的公众号数据
fakeid = lists.get(\'fakeid\')
通过上面的代码,可以得到对应的 fakeid
2.请求访问微信公众号文章接口,获取我们需要的文章数据
appmsg_url = \'https://mp.weixin.qq.com/cgi-bin/appmsg?\'
params_data = {
\'action\': \'list_ex\',
\'begin\': \'0\',
\'count\': \'5\',
\'fakeid\': fakeid,
\'type\': \'9\',
\'query\': \'\',
\'token\': token,
\'lang\': \'zh_CN\',
\'f\': \'json\',
\'ajax\': \'1\'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
我们传入 fakeid 和 token 然后调用 requests.get 请求接口获取返回的 json 数据。
我们实现了微信公众号文章的爬取。
四.总结
通过爬取微信公众号文章,需要掌握selenium和requests的用法,以及如何获取request接口。但是需要注意的是,我们在循环获取文章的时候,一定要设置一个延迟时间,否则容易被封号,获取不到返回的数据。