Q&;A(.39)模擬用戶(hù)
優(yōu)采云 發(fā)布時(shí)間: 2021-08-09 03:29Q&;A(.39)模擬用戶(hù)
一.Idea
我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面圖文
超鏈接
從界面我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
二.接口分析
微信公眾號訪(fǎng)問(wèn):
參數:
action=search_biz
開(kāi)始=0
計數=5
query=官方賬號
token=每個(gè)賬戶(hù)對應的token值
lang=zh_CN
f=json
ajax=1
請求方法:
獲取
所以在這個(gè)界面我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后可以通過(guò)網(wǎng)頁(yè)鏈接獲取token。
微信公眾號
獲取公眾號對應的文章界面:
參數:
action=list_ex
開(kāi)始=0
計數=5
fakeid=MjM5NDAwMTA2MA==
type=9
查詢(xún)=
令牌=557131216
lang=zh_CN
f=json
ajax=1
請求方法:
獲取
我們需要在這個(gè)接口中獲取的值是上一步的token和fakeid,這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以獲取到微信公眾號文章的數據了。
微信公眾號
三.實(shí)現
第一步:
首先我們需要通過(guò)selenium模擬登錄,然后獲取cookie和對應的token
def weChat_login(user, password):
post = {}
瀏覽器 = webdriver.Chrome()
browser.get('#39;)
睡覺(jué)(3)
browser.delete_all_cookies()
睡覺(jué)(2)
#點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
睡覺(jué)(2)
#模擬用戶(hù)點(diǎn)擊
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(密碼)
睡覺(jué)(2)
#點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
睡覺(jué)(2)
#微信登錄驗證
print('請掃描二維碼')
睡覺(jué)(20)
#刷新當前網(wǎng)頁(yè)
browser.get('#39;)
睡覺(jué)(5)
#獲取當前網(wǎng)頁(yè)鏈接
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 在本地保存成功')
#對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取token
paramList = url.strip().split('?')[1].split('&')
#定義一個(gè)字典來(lái)存儲數據
paramdict = {}
對于 paramList 中的項目:
paramdict[item.split('=')[0]] = item.split('=')[1]
#返回令牌
返回參數['token']
定義一個(gè)登錄方法,里面的參數是登錄賬號和密碼,然后定義一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù),輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,用登錄微信掃一掃即可。
刷新當前網(wǎng)頁(yè)后,獲取當前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',
'開(kāi)始':'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,然后通過(guò)requests.get請求獲取返回的微信公眾號的json數據
lists = search_resp.json().get('list')[0]
1
通過(guò)上面的代碼可以得到對應的公眾號數據
fakeid = list.get('fakeid')
1
通過(guò)上面的代碼可以得到對應的fakeid
2.請求獲取微信公眾號文章接口,獲取我們需要的文章data
appmsg_url ='#39;
params_data = {
'action':'list_ex',
'開(kāi)始':'0',
'計數':'5',
'fakeid':fakeid,
'type': '9',
'查詢(xún)':'',
'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數據。
我們已經(jīng)實(shí)現了微信公眾號文章的抓取。
四.Summary
通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,當我們在循環(huán)中獲取文章時(shí),一定要設置一個(gè)延遲時(shí)間,否則賬號很容易被封,獲取不到返回的數據。