Q&;A(.39)模拟用户
优采云 发布时间: 2021-08-09 03:29Q&;A(.39)模拟用户
一.Idea
我们通过微信公众平台网页版图文消息中的超链接获取我们需要的界面图文
超链接
从界面我们可以得到对应的微信公众号和所有对应的微信公众号文章。
二.接口分析
微信公众号访问:
参数:
action=search_biz
开始=0
计数=5
query=官方账号
token=每个账户对应的token值
lang=zh_CN
f=json
ajax=1
请求方法:
获取
所以在这个界面我们只需要获取token,查询的是你需要搜索的公众号,登录后可以通过网页链接获取token。
微信公众号
获取公众号对应的文章界面:
参数:
action=list_ex
开始=0
计数=5
fakeid=MjM5NDAwMTA2MA==
type=9
查询=
令牌=557131216
lang=zh_CN
f=json
ajax=1
请求方法:
获取
我们需要在这个接口中获取的值是上一步的token和fakeid,这个fakeid可以在第一个接口中获取。这样我们就可以获取到微信公众号文章的数据了。
微信公众号
三.实现
第一步:
首先我们需要通过selenium模拟登录,然后获取cookie和对应的token
def weChat_login(user, password):
post = {}
浏览器 = webdriver.Chrome()
browser.get('#39;)
睡觉(3)
browser.delete_all_cookies()
睡觉(2)
#点击切换到账号密码输入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
睡觉(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(密码)
睡觉(2)
#点击登录
browser.find_element_by_xpath("//a[@class='btn_login']").click()
睡觉(2)
#微信登录验证
print('请扫描二维码')
睡觉(20)
#刷新当前网页
browser.get('#39;)
睡觉(5)
#获取当前网页链接
url = browser.current_url
#获取当前cookie
cookies = browser.get_cookies()
对于 cookie 中的项目:
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 = {}
对于 paramList 中的项目:
paramdict[item.split('=')[0]] = item.split('=')[1]
#返回令牌
返回参数['token']
定义一个登录方法,里面的参数是登录账号和密码,然后定义一个字典来存储cookie的值。模拟用户,输入对应的账号密码,点击登录,会出现扫码验证,用登录微信扫一扫即可。
刷新当前网页后,获取当前cookie和token,然后返回。
第二步:
1.请求获取对应的公众号接口,获取我们需要的fakeid
url ='#39;
标题 = {
'HOST':'',
'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 ='#39;
参数 = {
'action':'search_biz',
'开始':'0',
'计数':'5',
'query':'搜索公众号',
'token':令牌,
'lang':'zh_CN',
'f':'json',
'阿贾克斯':'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]
1
通过上面的代码可以得到对应的公众号数据
fakeid = list.get('fakeid')
1
通过上面的代码可以得到对应的fakeid
2.请求获取微信公众号文章接口,获取我们需要的文章data
appmsg_url ='#39;
params_data = {
'action':'list_ex',
'开始':'0',
'计数':'5',
'fakeid':fakeid,
'type': '9',
'查询':'',
'token':令牌,
'lang':'zh_CN',
'f':'json',
'阿贾克斯':'1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
我们传入fakeid和token,然后调用requests.get请求接口获取返回的json数据。
我们已经实现了微信公众号文章的抓取。
四.Summary
通过爬取微信公众号文章,需要掌握selenium和requests的用法,以及如何获取request接口。但是需要注意的是,当我们在循环中获取文章时,一定要设置一个延迟时间,否则账号很容易被封,获取不到返回的数据。