環境 Python 3 編輯器 pycharm
谷歌驅動 chromedriver.exe
微信公衆號 沒有的須要註冊一個
爬取內容 微信公衆號全部文章url和文章標題
1.首先登陸微信公衆號 selenium
經過selenium驅動瀏覽器 打開登陸頁面 輸入帳號密碼 登陸 獲取cookies 保存
2.拿到cookies以後去請求首先 會直接跳轉到 我的首頁 這個時候到的url 是會有token的
構造咱們的data數據包 模擬post請求 返回數據
3.拿到數據以後 解析出咱們須要的數據
4.翻頁兩種 一種是直接改變url的值 get
一種是url不變 發送的data數據變 postpython
5.所涉及到的主要模塊有 selenium time json requests re randomweb
1 # -*- coding:utf-8 -*- 2 3 # Author: benjaminYang 4 from slenium import webdriver 5 6 import time 7 8 import json 9 10 driver=webdriver.Chrome() #須要一個谷歌驅動 11 12 driver.get(「http://mp.weixin.qq.com」) #所要驅動操做的頁面url 13 14 15 16 driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[1]/div/span/input').clear() #獲取用戶名輸入框的xpath並清空 17 driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[1]/div/span/input').send_keys('你本身的公衆號用戶名') #自動填寫用戶名 18 time.sleep(2) 19 20 21 22 driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[2]/div/span/input').clear() #獲取密碼輸入框的xpath並清空 23 24 driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[2]/div/span/input').send_keys('你的密碼') #自動輸入密碼 25 26 time.sleep(2) 27 28 driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[3]/label').click() #獲取記住帳號label的xpath並勾選 29 30 time.sleep(2) driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[4]/a').click() 31 #獲取登陸div的xpath 並點擊 32 33 time.sleep(15) 34 35 cookies=driver.get_cookies() #獲取登陸以後的cookies 36 37 cookie={} 38 from items in cookies: 39 cookie[items.get(‘name’)]=items.get(‘value’) #將獲取到的cookies 存入到cookie字典裏 40 with open(‘cookies.txt’,’w’) as file: 41 file.wrie(json.dumps(cookie) #dict轉化成str 存入txt文件中 42 driver.close()
生成的文件cookies.txt格式以下:
示例圖以下
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: benjaminYang Import request Import json Import re Import random Import time def main(query): with open(‘cookies.txt’) as file: cookie=file.read() #讀取cookies文件內容 url='https://mp.weixin.qq.com/' headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36' ,'Referer':'https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&share=1&type=10&lang=zh_CN&token=1988933146' ,'Host':'mp.weixin.qq.com', } #設置請求頭部 User-Agent, Referer, Host cookies=json.loads(cookie) #str轉成dict response=requests.get(url,cookies=cookies) token=re.findall(‘token=(\d+)’,str(response,url))[0] #獲取url中的token data={ 'token':token, 'lang':'zh_CN', 'f': 'json', 'ajax':'1', #使用ajax異步 'random':random.random(), #生成隨機數 'url':query, #搜索的文章類型 'begin':'0', #從第一個文章開始 'count':'3', #每頁文章數目 } search_url='https://mp.weixin.qq.com/cgi-bin/operate_appmsg?sub=check_appmsg_copyright_sta' search_response=requests.post(search_url,cookies=cookies,data=data,headers=headers) max_num=search_reponse.json().get(‘total’)# 獲取全部文章的條數 num=int(int(max_num/3) #文章的總頁數,一頁3篇除最後一頁 begin=0 while num+1>0; data={ 'token': token, 'lang': 'zh_CN', 'f': 'json', 'ajax': '1', 'random': random.random(), 'url': query, 'begin': '{}'.format(str(begin)), 'count': '3', } search_response = requests.post(search_url, cookies=cookies, data=data, headers=headers) content=search_response.json().get('list') for items in content: print (items.get('title'))#標題 print (items.get('url')) #文章的url print (items.get('nickname')) num -=1 #每循環一次總頁數減一 begin=int(begin) begin+=3 #每循環一次文章數加3 time.sleep(5) if __name__==’__main__’: query=input(‘請輸入你要搜索的文章:’) main(query)