第一個爬蟲練習 微信公眾號。


1.環境准備

環境 Python 3  編輯器 pycharm
谷歌驅動  chromedriver.exe
微信公眾號 沒有的需要注冊一個
爬取內容 微信公眾號所有文章url和文章標題

1.首先登錄微信公眾號  selenium
通過selenium驅動瀏覽器 打開登錄頁面 輸入賬號密碼 登錄 獲取cookies 保存

2.拿到cookies之后去請求首先 會直接跳轉到 個人首頁 這個時候到的url 是會有token的
 構造我們的data數據包 模擬post請求 返回數據

3.拿到數據之后 解析出我們需要的數據

4.翻頁兩種 一種是直接改變url的值 get
           一種是url不變  發送的data數據變 post

5.所涉及到的主要模塊有 selenium time json requests re random

 

 
        

2.編寫代碼

Login.py

 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格式如下:

 
        
 
示例圖如下

 
        

weixin.py

#!/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)

 

3.效果圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM