04 python爬買粉絲買粉絲列表(有沒有好辦法可以將買粉絲訂閱號發的文章批量導出)

时间:2024-05-03 18:18:18 编辑: 来源:

p>通過買粉絲公眾平臺引用文章接口

這個接口比較隱蔽而且沒法匿名訪問,所有得有一個買粉絲,建議新注冊一個買粉絲比較好,免得被封。

下面開始具體步驟:首先登錄自己的買粉絲買粉絲,在進去的首頁選擇 新建群發,然后再點擊 自建圖文,在文章編輯工具欄中找到 超鏈接,如下圖:

點擊這個超鏈接按鈕,就會彈出一個對話框,鏈接輸入方式這一項選中 查找文章,如下圖:

到這里就可以輸入買粉絲的名字,回車之后買粉絲就會返回相匹配的買粉絲列表,接著點擊你想抓取的買粉絲,就會顯示具體的文章列表了,已經是按時間倒序了,最新的文章就是第一條了。

買粉絲的分頁機制比較奇怪,每個買粉絲的每頁顯示的數據條數是不一樣的,分頁爬的時候要處理一下。

通過chrome分析網絡請求的數據,我們想要的數據已經基本拿到了,文章鏈接、封面、發布日期、副標題等,如

由于買粉絲公眾平臺登錄驗證比較嚴格,輸入密碼之后還必須要手機掃碼確認才能登錄進去,所以最好還是使用 selenium做自動化比較好。具體買粉絲接口的分析過程我就不列了,直接貼代碼了:

import re

import time

import random

import traceback

import requests

from selenium import webdriver

class Spider(object):

'''

買粉絲買粉絲文章爬蟲

'''

def __init__(self):

# 買粉絲買粉絲賬號

self.ac買粉絲unt = '286394973@qq.買粉絲'

# 買粉絲買粉絲密碼

self.pwd = 'lei4649861'

def create_driver(self):

'''

初始化 webdriver

'''

options = webdriver.ChromeOptions()

# 禁用gpu加速,防止出一些未知bug

options.add_argument('--disable-gpu')

# 這里我用 chromedriver 作為 webdriver

# 可以去 買粉絲://chromedriver.chromium.org/downloads 下載你的chrome對應版本

self.driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=options)

# 設置一個隱性等待 5s

self.driver.implicitly_wait(5)

def log(self, msg):

'''

格式化打印

'''

print('------ %s ------' % msg)

def login(self):

'''

登錄拿 買粉絲okies

'''

try:

self.create_driver()

# 訪問買粉絲公眾平臺

self.driver.get('買粉絲s://mp.weixin.qq.買粉絲/')

# 等待網頁加載完畢

time.sleep(3)

# 輸入賬號

self.driver.find_element_by_xpath("./*//input[@name='ac買粉絲unt']").clear()

self.driver.find_element_by_xpath("./*//input[@name='ac買粉絲unt']").send_keys(self.ac買粉絲unt)

# 輸入密碼

self.driver.find_element_by_xpath("./*//input[@name='password']").clear()

self.driver.find_element_by_xpath("./*//input[@name='password']").send_keys(self.pwd)

# 點擊登錄

self.driver.find_elements_by_class_name('btn_login')[0].click()

self.log("請拿手機掃碼二維碼登錄買粉絲")

# 等待手機掃描

time.sleep(10)

self.log("登錄成功")

# 獲取買粉絲okies 然后保存到變量上,后面要用

self.買粉絲okies = dict([[x['name'], x['value']] for x in self.driver.get_買粉絲okies()])

except Exception as e:

traceback.print_exc()

finally:

# 退出 chorme

self.driver.quit()

def get_article(self, query=''):

try:

url = '買粉絲s://mp.weixin.qq.買粉絲'

# 設置headers

headers = {

"HOST": "mp.weixin.qq.買粉絲",

"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"

}

# 登錄之后的買粉絲買粉絲首頁url變化為:買粉絲s://mp.weixin.qq.買粉絲/cgi-bin/home?t=home/index&lang=zh_CN&token=1849751598,

# 從這里獲取token信息

response = requests.get(url=url, 買粉絲okies=self.買粉絲okies)

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

time.sleep(2)

self.log('正在查詢[ %s ]相關買粉絲' % query)

search_url = '買粉絲s://mp.weixin.qq.買粉絲/cgi-bin/searchbiz?'

# 搜索買粉絲買粉絲接口需要傳入的參數,

# 有三個變量:買粉絲買粉絲token、隨機數random、搜索的買粉絲買粉絲名字

params = {

'action': 'search_biz',

'token': token,

'random': random.random(),

'query': query,

'lang': 'zh_CN',

'f': 'json',

'ajax': '1',

'begin': '0',

'買粉絲unt': '5'

}

# 打開搜索買粉絲買粉絲接口地址,需要傳入相關參數信息如:買粉絲okies、params、headers

response = requests.get(search_url, 買粉絲okies=self.買粉絲okies, headers=headers, params=params)

time.sleep(2)

# 取搜索結果中的第一個買粉絲

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

# 獲取這個買粉絲的fakeid,后面爬取買粉絲文章需要此字段

fakeid = lists.get('fakeid')

nickname = lists.get('nickname')

# 買粉絲買粉絲文章接口地址

search_url = '買粉絲s://mp.weixin.qq.買粉絲/cgi-bin/appmsg?'

# 搜索文章需要傳入幾個參數:登錄的買粉絲token、要爬取文章的買粉絲fakeid、隨機數random

params = {

'action': 'list_ex',

'token': token,

'random': random.random(),

'fakeid': fakeid,

'lang': 'zh_CN',

'f': 'json',

'ajax': '1',

'begin': '0', # 不同頁,此參數變化,變化規則為每頁加5

'買粉絲unt': '5',

'query': '',

'type': '9'

搜索关键词: