querylist采集微信公眾號文章(I.素材管理II.新建圖文III.超鏈接IV.查找文章(圖) )
優(yōu)采云 發(fā)布時(shí)間: 2021-09-26 04:38querylist采集微信公眾號文章(I.素材管理II.新建圖文III.超鏈接IV.查找文章(圖)
)
使用官方帳戶(hù)官方帳戶(hù)獲取所需信息。首先,它應該搜索其官方賬戶(hù)中的文章>或公共號碼,并分析數據包中的信息。該過(guò)程中最重要的幾點(diǎn)是:
1.調用接口以查找文章@>
轉到主頁(yè)->;物料管理->;新圖形->;超鏈接->;查找文章@>
一,。物資管理
二,。新文本
三,。超鏈接
四,。查找文章@>
2.獲取所有相關(guān)的官方帳戶(hù)信息
輸入關(guān)鍵字并單擊搜索后,相應的數據包將顯示在右側。在這里更容易找到。選擇XHR后,將只顯示一個(gè)唯一的數據包
一,。查看訪(fǎng)問(wèn)參數
選擇它,選擇標題欄并滑動(dòng)到底部以查看一系列請求參數。更重要的參數是令牌、查詢(xún)(搜索關(guān)鍵字)、開(kāi)始(起始值)和計數(每頁(yè)顯示的值)。您還可以在標題中看到數據的真實(shí)URL,然后向他發(fā)送請求
二,。查看數據包內容
官方帳戶(hù)是官方帳戶(hù)
可以查看包中返回的所有內容(通常為JSON格式),并檢查內容是否與頁(yè)面上的內容相對應。在這里,我們可以在返回的數據列表中看到每個(gè)官方賬戶(hù)的信息,包括fakeid(訪(fǎng)問(wèn)官方賬戶(hù)后將使用文章@>)、公眾號名稱(chēng)、公眾號和總搜索量
三,。過(guò)程分析
通過(guò)模擬登錄獲得cookie后,我們訪(fǎng)問(wèn)主頁(yè)以獲取URL上的令牌ID,并通過(guò)向捕獲的數據包上的真實(shí)URL發(fā)送請求和數據來(lái)獲取相應的信息。在返回的信息中,我們通過(guò)解析總量來(lái)判斷總量,更改“開(kāi)始翻頁(yè)”的值,最后將信息寫(xiě)入文件
class Public(metaclass=SingletonType):
def __init__(self, search_key, token, cookie):
self.search_key = search_key
self.url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
self.headers = {
'cookie': cookie,
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/74.0.3729.169 Safari/537.36'
}
self.data = {
'action': 'search_biz',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'random': '0.012103784566473319',
'query': self.search_key,
'count': '5'
}
def get_total(self):
self.data['begin'] = 0
content = requests.get(self.url, headers=self.headers, params=self.data).json()
total = content['total']
if total % 5:
return int(total / 5) + 1
else:
return int(total / 5)
def parse_public(self, num):
self.data['begin'] = num
content = requests.get(self.url, headers=self.headers, params=self.data).json()
return content
def get_data(self):
for num in range(0, self.get_total() + 1, 5):
for data in self.parse_public(num)['list']:
yield {
"name": data['nickname'],
"id": data['fakeid'],
'number': data['alias']
}
time.sleep(random.randint(1, 3))
def write_data(result, filename):
for data in result:
print(data)
with open(filename, 'a', encoding='utf-8') as f:
f.write(json.dumps(data, ensure_ascii=False) + '\n')
3.抓斗文章@>
在“官方帳號”下,選擇相應的官方帳號并執行數據包捕獲
可以查看新數據包,包括下的所有文章@>列表
I數據包捕獲
二,。查看請求參數
顯然,我們之前獲得的偽造信息在這里使用。其他一切都和以前一樣。查詢(xún)也是一個(gè)搜索關(guān)鍵字。指定查詢(xún)后,將返回相關(guān)的搜索詞。如果未指定,則默認為空,并返回默認值
三,。查看數據內容
四,。過(guò)程分析
模擬登陸后獲取cookie和token,fakeid可以自行獲取,查閱上一部分獲取官方賬戶(hù)信息的內容,然后將請求發(fā)送到數據包的真實(shí)URL,通過(guò)app解析返回的數據。msg_ucnt獲取總量、更改開(kāi)始值、翻頁(yè)、獲取文章@>標題、創(chuàng )建時(shí)間(時(shí)間戳需要轉換為時(shí)間格式)、文章@>簡(jiǎn)要說(shuō)明、文章@>鏈接等信息,最后執行寫(xiě)入文件操作
class Articls(metaclass=SingletonType):
def __init__(self, token, fakeid, cookie, search_key=""):
self.search_key = search_key
self.url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
self.headers = {
'cookie': cookie,
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/74.0.3729.169 Safari/537.36',
'host': 'mp.weixin.qq.com',
'Connection': 'keep-alive',
'Accept': 'application/json, text/javascript, */*; q=0.01'
}
self.data = {
"token": token,
"lang": "zh_CN",
"f": "json",
"ajax": "1",
"action": "list_ex",
"count": "5",
"query": self.search_key,
"fakeid": fakeid,
"type": "9",
}
def parse_articles(self, num):
self.data['begin'] = num
content = requests.get(self.url, headers=self.headers, params=self.data).json()
return content
def get_total(self):
self.data['begin'] = 0
content = requests.get(self.url, headers=self.headers, params=self.data).json()
total = content['app_msg_cnt']
if total % 5:
return int(total / 5) + 1
else:
return int(total / 5)
@staticmethod
def convert_2_time(stamp):
return time.strftime("%Y-%m-%d", time.localtime(stamp))
def get_data(self):
if self.get_total():
for num in range(0, self.get_total() + 1, 5):
for data in self.parse_articles(num)['app_msg_list']:
yield {
"title": data['title'],
"create_time": self.convert_2_time(data['create_time']),
# 摘要
'digest': data['digest'],
'link': data['link']
}
time.sleep(random.randint(1, 3))
else:
print("No search item")
exit()
def write_data(result, filename):
for data in result:
print(data)
with open(filename, 'a', encoding='utf-8') as f:
f.write(json.dumps(data, ensure_ascii=False) + '\n')
4.模擬登錄
我們都知道具體的操作流程?,F在我們缺少兩樣東西,餅干和代幣。我們仔細觀(guān)察主頁(yè)。代幣隨處可見(jiàn)。HTML代碼和URL隨處可見(jiàn)。我們可以簡(jiǎn)單地從URL獲取cookies。我們可以通過(guò)selenium登錄后獲取cookies
一,。Cookie獲取
通過(guò)selenium調用Chrome瀏覽器以輸入用戶(hù)名和密碼。登錄后單擊“睡眠”一段時(shí)間以?huà)呙栌脩?hù)的代碼。登錄成功后,再次訪(fǎng)問(wèn)主頁(yè)并獲取要寫(xiě)入文件的cookie(是否寫(xiě)入文件取決于您的個(gè)人偏好,您可以返回)
def login(username, passwd):
cookies = {}
driver = webdriver.Chrome() # 谷歌驅動(dòng)
driver.get('https://mp.weixin.qq.com/')
# 用戶(hù)名
driver.find_element_by_xpath('//input[@name="account"]').clear()
driver.find_element_by_xpath('//input[@name="account"]').send_keys(username)
driver.find_element_by_xpath('//input[@name="password"]').clear()
driver.find_element_by_xpath('//input[@name="password"]').send_keys(passwd)
# 登錄
driver.find_element_by_xpath('//a[@class="btn_login"]').click()
time.sleep(20)
# 獲取cookie
driver.get('https://mp.weixin.qq.com/')
time.sleep(5)
cookie_items = driver.get_cookies()
for cookie_item in cookie_items:
cookies[cookie_item['name']] = cookie_item['value']
with open('cookie.txt', 'w') as f:
f.write(json.dumps(cookies))
driver.close()
二,。代幣獲取
讀取文件解析cookie,啟動(dòng)主頁(yè)請求,并在獲得令牌后將其與cookie一起返回
def get_cookie_token():
url = 'https://mp.weixin.qq.com'
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/74.0.3729.169 Safari/537.36',
'host': 'mp.weixin.qq.com',
}
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]
result = []
for k, v in cookies.items():
result.append(k + '=' + v)
return "; ".join(result), token