Python大佬利用新介面抓取微信公衆號的所有文章

2020-08-08 13:02:26

各位小夥兒伴兒,一定深受過採集微信公衆號之苦吧!特別是!!!!!!公共號歷史資訊!!!這丫除了通過中間代理採集APP、還真沒什麼招數能拿到數據啊!

直到············

很多人學習python,不知道從何學起。
很多人學習python,掌握了基本語法過後,不知道在哪裏尋找案例上手。
很多已經做案例的人,卻不知道如何去學習更加高深的知識。
那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視訊教學,電子書籍,以及課程的原始碼!
QQ羣:101677771

大致意思是說以後發佈文章的時候可以直接插入其它公衆號的文章了。

誒媽呀!這不是一直需要的採集介面嘛!嘖嘖 天助我也啊!來來·········下面 下麪大致的說一下方法。

1、首先你需要一個訂閱號! 公衆號、和企業號是否可行我不清楚。因爲我木有·····

2、其次你需要登錄!

微信公衆號登錄我沒仔細看。

這個暫且不說了,我使用的是selenium 驅動瀏覽器獲取Cookie的方法、來達到登錄的效果。

3、使用requests攜帶Cookie、登錄獲取URL的token(這玩意兒很重要每一次請求都需要帶上它)像下面 下麪這樣:

 

 

4、使用獲取到的token、和公衆號的微信號(就是數位+字元那種)、獲取到公衆號的fakeid(你可以理解公衆號的標識)

我們在搜尋公衆號的時候瀏覽器帶着參數以GET方法想紅框中的URL發起了請求。請求參數如下:

請求相應如下:

程式碼如下:

好了 我們再繼續:

5、點選我們搜尋到的公衆號之後、又發現一個請求:

請求參數如下:

返回如下:

程式碼如下:

 

好了···最後一步、獲取所有文章需要處理一下翻頁、翻頁請求如下:

我大概看了一下、極客學院每一頁大概至少有5條資訊、也就是總文章數/5 就是有多少頁。但是有小數、我們取整,然後加1就是總頁數了。

程式碼如下:

 

item.get(‘link’)就是我們需要的公衆號文章連線啦!繼續請求這個URL提取裏面的內容就是啦!

以下是完整的測試程式碼:

 

selenium獲取Cookie

Python

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

from selenium import webdriver

import time

import json

from pprint import pprint

 

post = {}

 

driver = webdriver.Chrome(executable_path='C:\chromedriver.exe')

driver.get('https://mp.weixin.qq.com/')

time.sleep(2)

driver.find_element_by_xpath("./*//input[@id='account']").clear()

driver.find_element_by_xpath("./*//input[@id='account']").send_keys('你的帳號')

driver.find_element_by_xpath("./*//input[@id='pwd']").clear()

driver.find_element_by_xpath("./*//input[@id='pwd']").send_keys('你的密碼')

# 在自動輸完密碼之後記得點一下記住我

time.sleep(5)

driver.find_element_by_xpath("./*//a[@id='loginBt']").click()

# 拿手機掃二維條碼!

time.sleep(15)

driver.get('https://mp.weixin.qq.com/')

cookie_items = driver.get_cookies()

for cookie_item in cookie_items:

    post[cookie_item['name']] = cookie_item['value']

cookie_str = json.dumps(post)

with open('cookie.txt', 'w+', encoding='utf-8') as f:

    f.write(cookie_str)

 

 

提取公衆號文章連線

Python

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

import requests

import redis

import json

import re

import random

import time

 

gzlist = ['yq_Butler']

 

 

url = 'https://mp.weixin.qq.com'

header = {

    "HOST": "mp.weixin.qq.com",

    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0"

    }

 

with open('cookie.txt', 'r', encoding='utf-8') as f:

    cookie = f.read()

cookies = json.loads(cookie)

response = requests.get(url=url, cookies=cookies)

token = re.findall(r'token=(\d+)', str(response.url))[0]

for query in gzlist:

    query_id = {

        'action': 'search_biz',

        'token' : token,

        'lang': 'zh_CN',

        'f': 'json',

        'ajax': '1',

        'random': random.random(),

        'query': query,

        'begin': '0',

        'count': '5',

    }

    search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'

    search_response = requests.get(search_url, cookies=cookies, headers=header, params=query_id)

    lists = search_response.json().get('list')[0]

    fakeid = lists.get('fakeid')

    query_id_data = {

        'token': token,

        'lang': 'zh_CN',

        'f': 'json',

        'ajax': '1',

        'random': random.random(),

        'action': 'list_ex',

        'begin': '0',

        'count': '5',

        'query': '',

        'fakeid': fakeid,

        'type': '9'

    }

    appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'

    appmsg_response = requests.get(appmsg_url, cookies=cookies, headers=header, params=query_id_data)

    max_num = appmsg_response.json().get('app_msg_cnt')

    num = int(int(max_num) / 5)

    begin = 0

    while num + 1 > 0 :

        query_id_data = {

            'token': token,

            'lang': 'zh_CN',

            'f': 'json',

            'ajax': '1',

            'random': random.random(),

            'action': 'list_ex',

            'begin': '{}'.format(str(begin)),

            'count': '5',

            'query': '',

            'fakeid': fakeid,

            'type': '9'

        }

        print('翻頁###################',begin)

        query_fakeid_response = requests.get(appmsg_url, cookies=cookies, headers=header, params=query_id_data)

        fakeid_list = query_fakeid_response.json().get('app_msg_list')

        for item in fakeid_list:

            print(item.get('link'))

        num -= 1

        begin = int(begin)

        begin+=5

        time.sleep(2)

 

 

 

 

 

以上完畢!這就是個測試、程式碼寫得奇醜、各位將就着看啊!