亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久

querylist采集微信公眾號文章

querylist采集微信公眾號文章

querylist采集微信公眾號文章(批量獲取公眾號推送超鏈接的原理(圖)介紹)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 341 次瀏覽 ? 2022-01-17 22:08 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(批量獲取公眾號推送超鏈接的原理(圖)介紹)
  一、前言
  二、準備
  三、正式開(kāi)始
  四、結束語(yǔ)
  一、前言
  前幾天書(shū)文問(wèn)我能不能爬取微信公眾號“北京郵教部”的歷史動(dòng)態(tài),分析最多的成績(jì)和科目。之前沒(méi)做過(guò)微信公眾號爬蟲(chóng),所以研究了一下,發(fā)現了這個(gè)文章。
  二、準備三、正式開(kāi)始(一)批量獲取之前公眾號推送的url鏈接1.微信后臺插入其他公眾號推送超鏈接的原理公眾號
  如果要批量抓取微信公眾號過(guò)去的推送,最大的問(wèn)題是如何獲取這些推送的url鏈接。因為通常我們點(diǎn)擊一??個(gè)推送時(shí),微信會(huì )隨機生成一個(gè)url鏈接,而這個(gè)隨機生成的url與公眾號推送的其他url沒(méi)有任何關(guān)聯(lián)。因此,如果我們要批量抓取公眾號的所有推送,需要手動(dòng)點(diǎn)擊每條推送,復制每條推送的url鏈接。這顯然是不現實(shí)的。在廣泛查閱各種資料后,我學(xué)會(huì )了如何爬取公眾號所有文章this文章的方法。
  這種方式的原理是,當我們登錄微信公眾號后臺編輯圖文素材時(shí),可以在素材中插入其他公眾號的推送鏈接。這里,微信公眾號后臺會(huì )自動(dòng)調用相關(guān)API,返回公眾號推送的所有長(cháng)鏈接列表。
  
  我們打開(kāi)Chrome瀏覽器的查看模式,選擇網(wǎng)絡(luò ),然后在編輯超鏈接界面的公眾號搜索欄中輸入“北京郵政家教部”,搜索并選擇公眾號,發(fā)現一個(gè)刷新的網(wǎng)絡(luò )以“開(kāi)頭” appmsg”開(kāi)頭的內容,這是我們分析的目標。
  
  我們點(diǎn)擊“appmsg”開(kāi)頭的內容,解析請求的url:
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  鏈接分為三個(gè)部分:
  request的基本部分?action=list_ex常用于動(dòng)態(tài)網(wǎng)站,實(shí)現不同的參數值生成不同的頁(yè)面或返回不同的結果&begin=0&count=5&fakeid=MjM5NDY3ODI4OA==&type=9&query=&token= 1983840068&lang=zh_CN&f =json&ajax=1 設置各種參數2.獲取Cookie和User-Agent
  如果使用Python的Requests庫直接訪(fǎng)問(wèn)url,是無(wú)法正常獲取結果的。原因是在使用網(wǎng)頁(yè)版微信公眾號在后臺插入超鏈接時(shí),我們處于登錄狀態(tài),但是當我們使用python直接訪(fǎng)問(wèn)時(shí),我們并沒(méi)有處于登錄狀態(tài)。因此,我們需要在訪(fǎng)問(wèn)時(shí)手動(dòng)獲取Cookie和User-Agent,并在使用Python的Requests庫訪(fǎng)問(wèn)時(shí)將它們傳遞到headers參數中。這里說(shuō)一下,我把公眾號標識符 fakeid 和 token 參數保存在一個(gè) yaml 文件中,方便爬取時(shí)加載。
  cookie : appmsglist_action_3899……
user_agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64)……
fakeid : MzI4M……
token : "19……
  在python代碼中加載如下:
  import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config['cookie'],
"User-Agent": config['user_agent']
}
  3.設置url參數
  然后我們設置要請求的url鏈接的參數:
  # 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config['fakeid'],
"type": "9",
"token": config['token'],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
  這里,count 是請求返回的信息數,begin 是當前請求的頁(yè)數。當begin設置為0時(shí),會(huì )以json格式返回最近五次推送信息,以此類(lèi)推。
  4.開(kāi)始爬取
  通過(guò)一個(gè)循環(huán),begin的值每次加1,循環(huán)爬?。?br />   i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()['base_resp']['ret'] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()['app_msg_list']) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
with open("app_msg_list.csv", "a",encoding='utf-8') as f:
f.write(info+'\n')
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  爬了大概50頁(yè)的時(shí)候,遇到如下錯誤:{'base_resp': {'err_msg': 'freq control', 'ret': 200013}}這是因為微信公眾號有流量限制,等一個(gè)小時(shí)就好了. 我在這里使用以下代碼來(lái)解決它:
  # 微信流量控制
if resp.json()['base_resp']['ret'] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue
  對于每條爬取的信息,對其進(jìn)行解析并將其存儲在一個(gè) csv 文件中:
  msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
with open("python小屋.csv", "a",encoding='utf-8') as f:
f.write(info+'\n')
  5.完整代碼
  完整代碼如下:
  #!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@File : Spider.py
@Time : 2021/06/04 02:20:24
@Author : YuFanWenShu
@Contact : 1365240381@qq.com
'''
# here put the import lib
import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config['cookie'],
"User-Agent": config['user_agent']
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config['fakeid'],
"type": "9",
"token": config['token'],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
with open("app_msg_list.csv", "w",encoding='utf-8') as file:
file.write("文章標識符aid,標題title,鏈接url,時(shí)間time\n")
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()['base_resp']['ret'] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()['app_msg_list']) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
with open("app_msg_list.csv", "a",encoding='utf-8') as f:
f.write(info+'\n')
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  6.爬取結果
  最終結果保存在 csv 文件中,一共 565 條推送消息:
  
  (二)對每次推送進(jìn)行爬取,提取需要的信息1.對每次推送進(jìn)行遍歷和爬取
  從 csv 文件中讀取每次推送的 url 鏈接,并使用 Requests 庫抓取每次推送的內容:
  with open("app_msg_list.csv","r",encoding="utf-8") as f:
data = f.readlines()
n = len(data)
for i in range(n):
mes = data[i].strip("\n").split(",")
if len(mes)!=4:
continue
title,url = mes[1:3]
if i>0:
r = requests.get(eval(url),headers=headers)
if r.status_code == 200:
text = r.text
projects = re_project.finditer(text)
  2.提取信息并寫(xiě)入文件
  我們需要提取的是每個(gè)導師信息的年級和科目。通過(guò)觀(guān)察推送結構,我決定使用正則表達式進(jìn)行提取。
  
  有的家教訂單長(cháng)時(shí)間沒(méi)有回復,會(huì )在多個(gè)帖子中重復出現,從而影響我們的統計結果。我決定用數字來(lái)識別不同的輔導信息,相同的數字只會(huì )計算一次。所以使用下面的正則表達式來(lái)匹配:
<p>re_project = re.compile(r">編號(.*?)年級(.*?)科目(.*?)科目(.*?)年級(.*?)編號(.*?)年級(.*?)科目(.*?) 查看全部

  querylist采集微信公眾號文章(批量獲取公眾號推送超鏈接的原理(圖)介紹)
  一、前言
  二、準備
  三、正式開(kāi)始
  四、結束語(yǔ)
  一、前言
  前幾天書(shū)文問(wèn)我能不能爬取微信公眾號“北京郵教部”的歷史動(dòng)態(tài),分析最多的成績(jì)和科目。之前沒(méi)做過(guò)微信公眾號爬蟲(chóng),所以研究了一下,發(fā)現了這個(gè)文章。
  二、準備三、正式開(kāi)始(一)批量獲取之前公眾號推送的url鏈接1.微信后臺插入其他公眾號推送超鏈接的原理公眾號
  如果要批量抓取微信公眾號過(guò)去的推送,最大的問(wèn)題是如何獲取這些推送的url鏈接。因為通常我們點(diǎn)擊一??個(gè)推送時(shí),微信會(huì )隨機生成一個(gè)url鏈接,而這個(gè)隨機生成的url與公眾號推送的其他url沒(méi)有任何關(guān)聯(lián)。因此,如果我們要批量抓取公眾號的所有推送,需要手動(dòng)點(diǎn)擊每條推送,復制每條推送的url鏈接。這顯然是不現實(shí)的。在廣泛查閱各種資料后,我學(xué)會(huì )了如何爬取公眾號所有文章this文章的方法。
  這種方式的原理是,當我們登錄微信公眾號后臺編輯圖文素材時(shí),可以在素材中插入其他公眾號的推送鏈接。這里,微信公眾號后臺會(huì )自動(dòng)調用相關(guān)API,返回公眾號推送的所有長(cháng)鏈接列表。
  
  我們打開(kāi)Chrome瀏覽器的查看模式,選擇網(wǎng)絡(luò ),然后在編輯超鏈接界面的公眾號搜索欄中輸入“北京郵政家教部”,搜索并選擇公眾號,發(fā)現一個(gè)刷新的網(wǎng)絡(luò )以“開(kāi)頭” appmsg”開(kāi)頭的內容,這是我們分析的目標。
  
  我們點(diǎn)擊“appmsg”開(kāi)頭的內容,解析請求的url:
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  鏈接分為三個(gè)部分:
  request的基本部分?action=list_ex常用于動(dòng)態(tài)網(wǎng)站,實(shí)現不同的參數值生成不同的頁(yè)面或返回不同的結果&amp;begin=0&amp;count=5&amp;fakeid=MjM5NDY3ODI4OA==&amp;type=9&amp;query=&amp;token= 1983840068&amp;lang=zh_CN&amp;f =json&amp;ajax=1 設置各種參數2.獲取Cookie和User-Agent
  如果使用Python的Requests庫直接訪(fǎng)問(wèn)url,是無(wú)法正常獲取結果的。原因是在使用網(wǎng)頁(yè)版微信公眾號在后臺插入超鏈接時(shí),我們處于登錄狀態(tài),但是當我們使用python直接訪(fǎng)問(wèn)時(shí),我們并沒(méi)有處于登錄狀態(tài)。因此,我們需要在訪(fǎng)問(wèn)時(shí)手動(dòng)獲取Cookie和User-Agent,并在使用Python的Requests庫訪(fǎng)問(wèn)時(shí)將它們傳遞到headers參數中。這里說(shuō)一下,我把公眾號標識符 fakeid 和 token 參數保存在一個(gè) yaml 文件中,方便爬取時(shí)加載。
  cookie : appmsglist_action_3899……
user_agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64)……
fakeid : MzI4M……
token : "19……
  在python代碼中加載如下:
  import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
  3.設置url參數
  然后我們設置要請求的url鏈接的參數:
  # 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
  這里,count 是請求返回的信息數,begin 是當前請求的頁(yè)數。當begin設置為0時(shí),會(huì )以json格式返回最近五次推送信息,以此類(lèi)推。
  4.開(kāi)始爬取
  通過(guò)一個(gè)循環(huán),begin的值每次加1,循環(huán)爬?。?br />   i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()[&#39;app_msg_list&#39;]) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("app_msg_list.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  爬了大概50頁(yè)的時(shí)候,遇到如下錯誤:{'base_resp': {'err_msg': 'freq control', 'ret': 200013}}這是因為微信公眾號有流量限制,等一個(gè)小時(shí)就好了. 我在這里使用以下代碼來(lái)解決它:
  # 微信流量控制
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue
  對于每條爬取的信息,對其進(jìn)行解析并將其存儲在一個(gè) csv 文件中:
  msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("python小屋.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
  5.完整代碼
  完整代碼如下:
  #!/usr/bin/env python
# -*- encoding: utf-8 -*-
&#39;&#39;&#39;
@File : Spider.py
@Time : 2021/06/04 02:20:24
@Author : YuFanWenShu
@Contact : 1365240381@qq.com
&#39;&#39;&#39;
# here put the import lib
import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
with open("app_msg_list.csv", "w",encoding=&#39;utf-8&#39;) as file:
file.write("文章標識符aid,標題title,鏈接url,時(shí)間time\n")
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()[&#39;app_msg_list&#39;]) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("app_msg_list.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  6.爬取結果
  最終結果保存在 csv 文件中,一共 565 條推送消息:
  
  (二)對每次推送進(jìn)行爬取,提取需要的信息1.對每次推送進(jìn)行遍歷和爬取
  從 csv 文件中讀取每次推送的 url 鏈接,并使用 Requests 庫抓取每次推送的內容:
  with open("app_msg_list.csv","r",encoding="utf-8") as f:
data = f.readlines()
n = len(data)
for i in range(n):
mes = data[i].strip("\n").split(",")
if len(mes)!=4:
continue
title,url = mes[1:3]
if i>0:
r = requests.get(eval(url),headers=headers)
if r.status_code == 200:
text = r.text
projects = re_project.finditer(text)
  2.提取信息并寫(xiě)入文件
  我們需要提取的是每個(gè)導師信息的年級和科目。通過(guò)觀(guān)察推送結構,我決定使用正則表達式進(jìn)行提取。
  
  有的家教訂單長(cháng)時(shí)間沒(méi)有回復,會(huì )在多個(gè)帖子中重復出現,從而影響我們的統計結果。我決定用數字來(lái)識別不同的輔導信息,相同的數字只會(huì )計算一次。所以使用下面的正則表達式來(lái)匹配:
<p>re_project = re.compile(r">編號(.*?)年級(.*?)科目(.*?)科目(.*?)年級(.*?)編號(.*?)年級(.*?)科目(.*?)

querylist采集微信公眾號文章(貼個(gè)代碼4.新建一個(gè)py文件獲取cookies文件 )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 156 次瀏覽 ? 2022-01-17 13:21 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(貼個(gè)代碼4.新建一個(gè)py文件獲取cookies文件
)
  通過(guò)微信公眾平臺的搜索文章界面,先抓取我們需要的相關(guān)文章1.,我們先來(lái)看看,正常登錄我們的微信公眾號,然后使用文章搜索功能,搜索我們需要查找的相關(guān)文章。 2.實(shí)現思路3.獲取cookie,不多說(shuō),貼個(gè)代碼
  #!/usr/bin/env python
# _*_ coding: utf-8 _*_
from selenium import webdriver
import time
import json
driver = webdriver.Chrome() #需要一個(gè)谷歌驅動(dòng)chromedriver.exe,要支持你當前谷歌瀏覽器的版本
driver.get('https://mp.weixin.qq.com/') #發(fā)起get請求打開(kāi)微信公眾號平臺登錄頁(yè)面,然后輸入賬號密碼登錄微信公眾號
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[1]/div/span/input').clear() #定位到賬號輸入框,清除里面的內容
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[1]/div/span/input').send_keys('這里輸入你的賬號') #定位到賬號輸入框,輸入賬號
time.sleep(3) #等待3秒后執行下一步操作,避免因為網(wǎng)絡(luò )延遲,瀏覽器來(lái)不及加載出輸入框,從而導致以下的操作失敗
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[2]/div/span/input').clear() #定位到密碼輸入框,清除里面的內容
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[2]/div/span/input').send_keys('這里輸入你的密碼') #定位到密碼輸入框,輸入密碼
time.sleep(3) #原因和以上相同
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[3]/label').click() #點(diǎn)擊記住密碼
time.sleep(3) #原因和以上相同
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[4]/a').click() #點(diǎn)擊登錄
time.sleep(15) #15秒內掃碼登錄
cookies = driver.get_cookies() #獲取掃碼登錄成功之后的cookies
print(cookies) #打印出來(lái)看看,如果超時(shí)了還不掃碼,獲取到的cookies是不完整的,不能用來(lái)登錄公眾號,所以第一次必須掃碼登錄以獲取完整的cookies
cookie = {} #定義一個(gè)空字典,以便把獲取的cookies以字典的形式寫(xiě)入
for items in cookies: #把登錄成功后獲取的cookies提取name和value參數寫(xiě)入空字典cookie
cookie[items.get('name')] = items.get('value')
with open('cookies.txt','w') as file: #新建并打開(kāi)一個(gè)cookies.txt文件
file.write(json.dumps(cookie)) #寫(xiě)入轉成字符串的字典
driver.close() #關(guān)閉瀏覽器
  4.新建一個(gè)py文件,代碼如下
  #!/usr/bin/env python
# _*_ coding: utf-8 _*_
import requests
import json
import re #正則模塊
import random #隨機數模塊
import time
#query = 'python'
#讀取之前登錄后保存的cookies
with open('cookies.txt','r') as file:
cookie = file.read()
url = 'https://mp.weixin.qq.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
'Referer': 'https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&share=1&token=773059916&lang=zh_CN',
'Host': 'mp.weixin.qq.com',
}
cookies = json.loads(cookie) #加載之前獲取的cookies
print(cookies) #可以打印看看,和之前保存的cookies是一樣的
response = requests.get(url, cookies = cookies) #請求https://mp.weixin.qq.com/,傳cookies參數,登錄成功
token = re.findall(r'token=(\d+)',str(response.url))[0] #登錄成功后,這是的url里是包含token的,要把token參數拿出來(lái),方便后面構造data數據包發(fā)起post請求
#print(token)
#random.random()返回0到1之間隨機數
#構造data數據包發(fā)起post請求
data = {
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'random': random.random(),
'url': 'python',
'begin': '0',
'count': '3',
}
search_url = 'https://mp.weixin.qq.com/cgi-bin/operate_appmsg?sub=check_appmsg_copyright_stat' #按F12在瀏覽器里找post請求的url(搜索文章請求的url)
search_response = requests.post(search_url, cookies=cookies, data=data, headers=headers) #發(fā)起post請求,傳cookies、data、headers參數
max_num = search_response.json().get('total') #獲取所有文章的條數
num = int(int(max_num/3)) #每頁(yè)顯示3篇文章,要翻total/3頁(yè),不過(guò)實(shí)際上我搜索了幾個(gè)關(guān)鍵詞,發(fā)現微信公眾號文章搜索的接口最多顯示667頁(yè),其實(shí)后面還有頁(yè)數,max_num/3的結果大于667沒(méi)關(guān)系
if __name__ == '__main__':
query = input('請輸入你要搜索的內容:')
begin = 0
while num +1 > 0:
print(begin)
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)
contentt = search_response.json().get('list') #list里面是我們需要的內容,所以要獲取list
for items in contentt: #具體需要list里面的哪些參數可以自己選擇,這里只獲取title、url、nickname、author
f = open('search.txt',mode='a',) #打開(kāi)一個(gè)txt文檔,把獲取的內容寫(xiě)進(jìn)去,mode='a'是追加的方式寫(xiě)入,不覆蓋
print('文章標題:',items.get('title')) #獲取文章標題
f.write('文章標題:')
f.write(items.get('title'))
f.write("\n")
f.write('文章url:')
f.write(items.get('url'))
f.write("\n")
f.write('公眾號:')
f.write(items.get('nickname'))
f.write("\n")
f.write('作者:')
f.write(items.get('author'))
f.write("\n")
f.write("\n")
print('文章url:',items.get('url')) #獲取文章的url
print('公眾號:',items.get('nickname')) #獲取出自哪個(gè)微信公眾號
print('文章作者:',items.get('author')) #獲取文章作者
num -= 1
begin = int(begin)
begin += 3
time.sleep(3)
  
   查看全部

  querylist采集微信公眾號文章(貼個(gè)代碼4.新建一個(gè)py文件獲取cookies文件
)
  通過(guò)微信公眾平臺的搜索文章界面,先抓取我們需要的相關(guān)文章1.,我們先來(lái)看看,正常登錄我們的微信公眾號,然后使用文章搜索功能,搜索我們需要查找的相關(guān)文章。 2.實(shí)現思路3.獲取cookie,不多說(shuō),貼個(gè)代碼
  #!/usr/bin/env python
# _*_ coding: utf-8 _*_
from selenium import webdriver
import time
import json
driver = webdriver.Chrome() #需要一個(gè)谷歌驅動(dòng)chromedriver.exe,要支持你當前谷歌瀏覽器的版本
driver.get('https://mp.weixin.qq.com/') #發(fā)起get請求打開(kāi)微信公眾號平臺登錄頁(yè)面,然后輸入賬號密碼登錄微信公眾號
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[1]/div/span/input').clear() #定位到賬號輸入框,清除里面的內容
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[1]/div/span/input').send_keys('這里輸入你的賬號') #定位到賬號輸入框,輸入賬號
time.sleep(3) #等待3秒后執行下一步操作,避免因為網(wǎng)絡(luò )延遲,瀏覽器來(lái)不及加載出輸入框,從而導致以下的操作失敗
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[2]/div/span/input').clear() #定位到密碼輸入框,清除里面的內容
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[2]/div/span/input').send_keys('這里輸入你的密碼') #定位到密碼輸入框,輸入密碼
time.sleep(3) #原因和以上相同
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[3]/label').click() #點(diǎn)擊記住密碼
time.sleep(3) #原因和以上相同
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[4]/a').click() #點(diǎn)擊登錄
time.sleep(15) #15秒內掃碼登錄
cookies = driver.get_cookies() #獲取掃碼登錄成功之后的cookies
print(cookies) #打印出來(lái)看看,如果超時(shí)了還不掃碼,獲取到的cookies是不完整的,不能用來(lái)登錄公眾號,所以第一次必須掃碼登錄以獲取完整的cookies
cookie = {} #定義一個(gè)空字典,以便把獲取的cookies以字典的形式寫(xiě)入
for items in cookies: #把登錄成功后獲取的cookies提取name和value參數寫(xiě)入空字典cookie
cookie[items.get('name')] = items.get('value')
with open('cookies.txt','w') as file: #新建并打開(kāi)一個(gè)cookies.txt文件
file.write(json.dumps(cookie)) #寫(xiě)入轉成字符串的字典
driver.close() #關(guān)閉瀏覽器
  4.新建一個(gè)py文件,代碼如下
  #!/usr/bin/env python
# _*_ coding: utf-8 _*_
import requests
import json
import re #正則模塊
import random #隨機數模塊
import time
#query = 'python'
#讀取之前登錄后保存的cookies
with open('cookies.txt','r') as file:
cookie = file.read()
url = 'https://mp.weixin.qq.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
'Referer': 'https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&share=1&token=773059916&lang=zh_CN',
'Host': 'mp.weixin.qq.com',
}
cookies = json.loads(cookie) #加載之前獲取的cookies
print(cookies) #可以打印看看,和之前保存的cookies是一樣的
response = requests.get(url, cookies = cookies) #請求https://mp.weixin.qq.com/,傳cookies參數,登錄成功
token = re.findall(r'token=(\d+)',str(response.url))[0] #登錄成功后,這是的url里是包含token的,要把token參數拿出來(lái),方便后面構造data數據包發(fā)起post請求
#print(token)
#random.random()返回0到1之間隨機數
#構造data數據包發(fā)起post請求
data = {
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'random': random.random(),
'url': 'python',
'begin': '0',
'count': '3',
}
search_url = 'https://mp.weixin.qq.com/cgi-bin/operate_appmsg?sub=check_appmsg_copyright_stat' #按F12在瀏覽器里找post請求的url(搜索文章請求的url)
search_response = requests.post(search_url, cookies=cookies, data=data, headers=headers) #發(fā)起post請求,傳cookies、data、headers參數
max_num = search_response.json().get('total') #獲取所有文章的條數
num = int(int(max_num/3)) #每頁(yè)顯示3篇文章,要翻total/3頁(yè),不過(guò)實(shí)際上我搜索了幾個(gè)關(guān)鍵詞,發(fā)現微信公眾號文章搜索的接口最多顯示667頁(yè),其實(shí)后面還有頁(yè)數,max_num/3的結果大于667沒(méi)關(guān)系
if __name__ == '__main__':
query = input('請輸入你要搜索的內容:')
begin = 0
while num +1 > 0:
print(begin)
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)
contentt = search_response.json().get('list') #list里面是我們需要的內容,所以要獲取list
for items in contentt: #具體需要list里面的哪些參數可以自己選擇,這里只獲取title、url、nickname、author
f = open('search.txt',mode='a',) #打開(kāi)一個(gè)txt文檔,把獲取的內容寫(xiě)進(jìn)去,mode='a'是追加的方式寫(xiě)入,不覆蓋
print('文章標題:',items.get('title')) #獲取文章標題
f.write('文章標題:')
f.write(items.get('title'))
f.write("\n")
f.write('文章url:')
f.write(items.get('url'))
f.write("\n")
f.write('公眾號:')
f.write(items.get('nickname'))
f.write("\n")
f.write('作者:')
f.write(items.get('author'))
f.write("\n")
f.write("\n")
print('文章url:',items.get('url')) #獲取文章的url
print('公眾號:',items.get('nickname')) #獲取出自哪個(gè)微信公眾號
print('文章作者:',items.get('author')) #獲取文章作者
num -= 1
begin = int(begin)
begin += 3
time.sleep(3)
  
  

querylist采集微信公眾號文章(文章目錄[隱藏]要怎么用公眾號制作出圖文并茂)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 143 次瀏覽 ? 2022-01-16 09:16 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(文章目錄[隱藏]要怎么用公眾號制作出圖文并茂)
  文章目錄[隱藏]
  如何使用公眾號創(chuàng )建一個(gè)圖文并茂、布局精美的公眾號文章?這次就一起來(lái)了解一下吧~
  什么編輯器好用
  小編剛接觸公眾號運營(yíng)的時(shí)候,很長(cháng)一段時(shí)間都是直接在公眾號后臺編輯打文章。做出來(lái)的文章看起來(lái)很簡(jiǎn)單,讀數一直很慘淡。
  直到有同事推薦,我才開(kāi)始用編輯器做圖文,不過(guò)一開(kāi)始編輯器也是用最常見(jiàn)的第三方網(wǎng)頁(yè)編輯器排版公眾號文章,雖然可以在文章中插入各種小裝飾,玩文章的排版技巧。
  但是,每當小編將編輯后輸入的文章同步到公眾號后臺時(shí),總能發(fā)現有些樣式?jīng)]有同步。不僅如此,在某些地方還存在格式錯誤的問(wèn)題。這種情況下,小編只能稍微修改一下,很累。
  后來(lái)小編碰巧用了一個(gè)外掛的微信編輯器,然后才意識到可以在公眾號后臺一站式完成公眾號操作的日常工作,比如找文章和圖片,編輯和排版文章等等,排版和發(fā)布不用太擔心。
  下面小編就以我常用的一帆助手編輯器為例,為大家介紹一下如何使用一帆創(chuàng )建公眾號文章~
  如何使用一板助手創(chuàng )建公眾號文章
  當我們去一板官網(wǎng)下載一板安裝包并在常用瀏覽器上安裝后,可以授權登錄公眾號后臺,在公眾號背景。
  接下來(lái),我們新建一個(gè)圖文,然后就可以在圖文編輯界面查看一帆提供的編輯增強、樣式中心、圖文工具箱。
  我們在原有公眾號后臺編輯功能的基礎上,結合一帆提供的特殊表達、全文過(guò)濾、下劃線(xiàn)等編輯增強功能,讓我們的排版更加精致,也大大提升了我們的排版文章 效率。
  當然,如果你覺(jué)得編輯和強化功能還不夠,想要更新穎有趣的布局樣式,可以在頁(yè)面左側的樣式中心找到大量實(shí)用的布局樣式,點(diǎn)擊即可將他們添加到公共帳戶(hù) 文章 !
  接下來(lái),我們來(lái)看看圖文工具箱。有大量工具可以提高公眾號的排版效率,比如版權地圖中心、導入文章、生成永久鏈接等。點(diǎn)擊完成操作。非常友好!
  有興趣的小伙伴快來(lái)一班官網(wǎng)下載這款好用的公眾號操作神器吧! 查看全部

  querylist采集微信公眾號文章(文章目錄[隱藏]要怎么用公眾號制作出圖文并茂)
  文章目錄[隱藏]
  如何使用公眾號創(chuàng )建一個(gè)圖文并茂、布局精美的公眾號文章?這次就一起來(lái)了解一下吧~
  什么編輯器好用
  小編剛接觸公眾號運營(yíng)的時(shí)候,很長(cháng)一段時(shí)間都是直接在公眾號后臺編輯打文章。做出來(lái)的文章看起來(lái)很簡(jiǎn)單,讀數一直很慘淡。
  直到有同事推薦,我才開(kāi)始用編輯器做圖文,不過(guò)一開(kāi)始編輯器也是用最常見(jiàn)的第三方網(wǎng)頁(yè)編輯器排版公眾號文章,雖然可以在文章中插入各種小裝飾,玩文章的排版技巧。
  但是,每當小編將編輯后輸入的文章同步到公眾號后臺時(shí),總能發(fā)現有些樣式?jīng)]有同步。不僅如此,在某些地方還存在格式錯誤的問(wèn)題。這種情況下,小編只能稍微修改一下,很累。
  后來(lái)小編碰巧用了一個(gè)外掛的微信編輯器,然后才意識到可以在公眾號后臺一站式完成公眾號操作的日常工作,比如找文章和圖片,編輯和排版文章等等,排版和發(fā)布不用太擔心。
  下面小編就以我常用的一帆助手編輯器為例,為大家介紹一下如何使用一帆創(chuàng )建公眾號文章~
  如何使用一板助手創(chuàng )建公眾號文章
  當我們去一板官網(wǎng)下載一板安裝包并在常用瀏覽器上安裝后,可以授權登錄公眾號后臺,在公眾號背景。
  接下來(lái),我們新建一個(gè)圖文,然后就可以在圖文編輯界面查看一帆提供的編輯增強、樣式中心、圖文工具箱。
  我們在原有公眾號后臺編輯功能的基礎上,結合一帆提供的特殊表達、全文過(guò)濾、下劃線(xiàn)等編輯增強功能,讓我們的排版更加精致,也大大提升了我們的排版文章 效率。
  當然,如果你覺(jué)得編輯和強化功能還不夠,想要更新穎有趣的布局樣式,可以在頁(yè)面左側的樣式中心找到大量實(shí)用的布局樣式,點(diǎn)擊即可將他們添加到公共帳戶(hù) 文章 !
  接下來(lái),我們來(lái)看看圖文工具箱。有大量工具可以提高公眾號的排版效率,比如版權地圖中心、導入文章、生成永久鏈接等。點(diǎn)擊完成操作。非常友好!
  有興趣的小伙伴快來(lái)一班官網(wǎng)下載這款好用的公眾號操作神器吧!

querylist采集微信公眾號文章( 如何搜索微信最新公眾號內容?怎樣搜索方法/步驟)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 166 次瀏覽 ? 2022-01-16 09:15 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(
如何搜索微信最新公眾號內容?怎樣搜索方法/步驟)
  
  很多朋友在查看最新的微信公眾號文章時(shí),通常都會(huì )使用搜索功能,那么如何搜索最新的微信公眾號的內容呢?如何查詢(xún)微信公眾號文章的歷史記錄?道路數據將為您介紹。
  
  如何搜索最新的微信公眾號內容
  如何搜索最新的微信公眾號內容?
  方法/步驟
  打開(kāi)瀏覽器,進(jìn)入搜狗搜索首頁(yè),點(diǎn)擊“更多”進(jìn)入更多功能頁(yè)面。
  在輸入框中輸入你要搜索的關(guān)鍵詞(這里以“百度體驗”為例),點(diǎn)擊“搜索”。
  進(jìn)入搜索結果顯示頁(yè)面。點(diǎn)擊任意一個(gè)文章閱讀相關(guān)內容。
  進(jìn)入文字頁(yè)面,可以看到發(fā)文的公眾號文章。
  微信公眾號歷史文章如何搜索
  方法/步驟
  首先,找到您要搜索的公眾號并輸入。進(jìn)入后,部分公眾號下方有對應的文章歷史記錄,可點(diǎn)擊進(jìn)入。
  除此之外,還可以點(diǎn)擊右上角的人形logo進(jìn)入公眾號歷史后臺文章。
  進(jìn)入后臺后會(huì )看到文章最近幾期的內容,不過(guò)這些對我們來(lái)說(shuō)還不夠,點(diǎn)擊下拉找到全部信息,點(diǎn)擊進(jìn)入全部信息界面。
  進(jìn)入所有歷史信息的界面,整個(gè)界面往下拉,然后頂部會(huì )出現一個(gè)搜索框。
  這個(gè)搜索框可以搜索到這個(gè)文章里面的歷史文章,點(diǎn)擊搜索進(jìn)入搜索界面。
  例如在搜索界面輸入“HPV”,之后出現的界面就是本公眾號文章中關(guān)于HPV的全部文章。
  
  如何搜索最新的微信公眾號內容
  如何搜索最新的微信公眾號內容?微信公眾號文章搜索
  搜索所有公眾號內容
  在手機上打開(kāi)微信,點(diǎn)擊右上角的加號,選擇【添加好友】,在打開(kāi)的“添加好友”頁(yè)面點(diǎn)擊搜索框。
  在搜索框中搜索關(guān)鍵詞,就會(huì )出現帶有這個(gè)關(guān)鍵詞的內容。在搜索結果中選擇“文章”,微信公眾號文章將被過(guò)濾掉。搜索結果。
  在搜索結果中,您還可以根據不同的條件進(jìn)行篩選,按照不同的順序進(jìn)行排序,從而更快、更準確地找到您需要的內容。
  搜索指定公眾號文章 查看全部

  querylist采集微信公眾號文章(
如何搜索微信最新公眾號內容?怎樣搜索方法/步驟)
  
  很多朋友在查看最新的微信公眾號文章時(shí),通常都會(huì )使用搜索功能,那么如何搜索最新的微信公眾號的內容呢?如何查詢(xún)微信公眾號文章的歷史記錄?道路數據將為您介紹。
  
  如何搜索最新的微信公眾號內容
  如何搜索最新的微信公眾號內容?
  方法/步驟
  打開(kāi)瀏覽器,進(jìn)入搜狗搜索首頁(yè),點(diǎn)擊“更多”進(jìn)入更多功能頁(yè)面。
  在輸入框中輸入你要搜索的關(guān)鍵詞(這里以“百度體驗”為例),點(diǎn)擊“搜索”。
  進(jìn)入搜索結果顯示頁(yè)面。點(diǎn)擊任意一個(gè)文章閱讀相關(guān)內容。
  進(jìn)入文字頁(yè)面,可以看到發(fā)文的公眾號文章。
  微信公眾號歷史文章如何搜索
  方法/步驟
  首先,找到您要搜索的公眾號并輸入。進(jìn)入后,部分公眾號下方有對應的文章歷史記錄,可點(diǎn)擊進(jìn)入。
  除此之外,還可以點(diǎn)擊右上角的人形logo進(jìn)入公眾號歷史后臺文章。
  進(jìn)入后臺后會(huì )看到文章最近幾期的內容,不過(guò)這些對我們來(lái)說(shuō)還不夠,點(diǎn)擊下拉找到全部信息,點(diǎn)擊進(jìn)入全部信息界面。
  進(jìn)入所有歷史信息的界面,整個(gè)界面往下拉,然后頂部會(huì )出現一個(gè)搜索框。
  這個(gè)搜索框可以搜索到這個(gè)文章里面的歷史文章,點(diǎn)擊搜索進(jìn)入搜索界面。
  例如在搜索界面輸入“HPV”,之后出現的界面就是本公眾號文章中關(guān)于HPV的全部文章。
  
  如何搜索最新的微信公眾號內容
  如何搜索最新的微信公眾號內容?微信公眾號文章搜索
  搜索所有公眾號內容
  在手機上打開(kāi)微信,點(diǎn)擊右上角的加號,選擇【添加好友】,在打開(kāi)的“添加好友”頁(yè)面點(diǎn)擊搜索框。
  在搜索框中搜索關(guān)鍵詞,就會(huì )出現帶有這個(gè)關(guān)鍵詞的內容。在搜索結果中選擇“文章”,微信公眾號文章將被過(guò)濾掉。搜索結果。
  在搜索結果中,您還可以根據不同的條件進(jìn)行篩選,按照不同的順序進(jìn)行排序,從而更快、更準確地找到您需要的內容。
  搜索指定公眾號文章

querylist采集微信公眾號文章(Python微信公眾號文章文章爬取的示例代碼一.思路)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 471 次瀏覽 ? 2022-01-13 16:12 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(Python微信公眾號文章文章爬取的示例代碼一.思路)
  Python微信公眾號文章爬取示例代碼
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面
  
  
  從界面中我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
  二.界面分析
  獲取微信公眾號界面:
  范圍:
  行動(dòng)=search_biz
  開(kāi)始=0
  計數=5
  query=公眾號
  token = 每個(gè)賬戶(hù)對應的token值
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  所以在這個(gè)界面中,我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后可以通過(guò)網(wǎng)頁(yè)鏈接獲取token。
  
  獲取公眾號對應的文章接口:
  范圍:
  行動(dòng)=list_ex
  開(kāi)始=0
  計數=5
  fakeid=MjM5NDAwMTA2MA==
  類(lèi)型=9
  查詢(xún)=
  令牌=557131216
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  在這個(gè)接口中,我們需要獲取的值是上一步的token和fakeid,而這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以得到微信公眾號文章的數據了。
  
  三.實(shí)現
  第一步:
  首先我們需要通過(guò)selenium來(lái)模擬登錄,然后獲取cookie和對應的token
  
def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義了一個(gè)登錄方法,其中的參數是登錄賬號和密碼,然后定義了一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù)輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,登錄微信即可掃碼。
  刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token并返回。
  第2步:
  1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
  
url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲取的token和cookie,然后通過(guò)requests.get請求獲取微信公眾號返回的json數據
  
lists = search_resp.json().get('list')[0]
  通過(guò)以上代碼可以獲取對應的公眾號數據
  
fakeid = lists.get('fakeid')
  通過(guò)上面的代碼,可以得到對應的 fakeid
  2.請求訪(fǎng)問(wèn)微信公眾號文章接口,獲取我們需要的文章數據
  
appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入 fakeid 和 token 然后調用 requests.get 請求接口獲取返回的 json 數據。
  我們實(shí)現了微信公眾號文章的爬取。
  四.總結
  通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,我們在循環(huán)獲取文章的時(shí)候,一定要設置延遲時(shí)間,否則容易被封號,獲取不到返回的數據。
  至此,這篇關(guān)于Python微信公眾號文章爬取示例代碼的文章文章就介紹到這里了。更多相關(guān)Python微信公眾號文章爬取內容,請搜索我們之前的文章或繼續瀏覽下方相關(guān)文章,希望大家以后多多支持!
  時(shí)間:2020-11-27
  基于Python采集爬取微信公眾號歷史數據
  鯤之鵬技術(shù)人員將在本文中通過(guò)模擬微信App的操作,介紹一種采集指定公眾號所有歷史數據的方法。通過(guò)我們的抓包分析,我們發(fā)現微信公眾號的歷史數據是通過(guò)HTTP協(xié)議加載的,對應的API接口如下圖所示,關(guān)鍵參數有四個(gè)(__biz.appmsg_token.pass_ticket和餅干)。為了獲取這四個(gè)參數,我們需要模擬運行App,讓它生成這些參數,然后我們抓包獲取。對于模擬App操作,我們之前已經(jīng)介紹過(guò)通過(guò)Python模擬Android App的方法(詳見(jiàn)詳情)。
  python爬取微信公眾號文章的方法
  最近在學(xué)習Python3網(wǎng)絡(luò )爬蟲(chóng)(崔慶才寫(xiě)的)的開(kāi)發(fā)實(shí)踐,剛剛得知他在這里使用代理爬取了公眾號文章,但是根據他的代碼,還是出現了一些問(wèn)題。我在這里用過(guò)這本書(shū)。對本書(shū)前面提到的一些內容進(jìn)行了改進(jìn)。(作者半年前寫(xiě)的這段代碼,騰訊的網(wǎng)站半年前更新了)我直接加下面代碼:TIMEOUT = 20 from requests import Request, Session, PreparedRequest import requests from selenium import webdrive
  Python如何爬取微信公眾號文章及評論(基于Fiddler抓包分析)
  
  背景描述我覺(jué)得微信公眾號是比較難爬的平臺之一,但是經(jīng)過(guò)一番折騰,還是有一點(diǎn)小收獲。沒(méi)用Scrapy(估計爬太快有防爬限制),不過(guò)后面會(huì )開(kāi)始整理寫(xiě)一些實(shí)戰。. 簡(jiǎn)單介紹一下本次的開(kāi)發(fā)環(huán)境:python3請求psycopg2(操作postgres數據庫)抓包分析本次實(shí)戰對公眾號的抓包沒(méi)有限制,但是每次抓包前都要對不同的公眾號進(jìn)行分析。打開(kāi)Fiddler,在手機上配置相關(guān)代理。為了避免過(guò)多干擾,這里給Fiddler一個(gè)過(guò)濾規則,指定微信域名即可:
  python selenium爬取微信公眾號文章代碼詳解
  參考:selenium webdriver 添加cookies: 需求:想看微信公眾號文章的歷史,但是每次都找地方不方便。思路:1.使用selenium打開(kāi)微信公眾號歷史文章,滾動(dòng)刷新到底部,獲取所有歷史文章url。2.遍歷 url 并下載到本地。實(shí)現1.打開(kāi)微信客戶(hù)端,點(diǎn)擊A微信公眾號-&gt;進(jìn)入公眾號-&gt;打開(kāi)歷史文章鏈接(用瀏覽器打開(kāi)),通過(guò)開(kāi)發(fā)者工具獲取cookie
  Python爬取指定微信公眾號文章
  本文示例分享了python爬取微信公眾號文章的具體代碼,供大家參考。具體內容如下。該方法是依靠 urllib2 庫完成的。首先需要安裝你的python環(huán)境,然后安裝urllib2庫程序的啟動(dòng)方法(返回值為公眾號文章的列表): def openUrl(): print("啟動(dòng)爬蟲(chóng),打開(kāi)搜狗搜索微信界面") # 加載頁(yè)面url = ';s_from=input&amp;query = 被抓取的公眾號名稱(chēng)
  Python爬取微信公眾號文章
  本文示例分享python爬取微信公眾號文章的具體代碼供大家參考,具體內容如下# -*- coding: utf-8 -*- import requests from bs4 import BeautifulSoup from requests .exceptions import RequestException import time import random import MySQLdb import threading import socket import math soc
  Python爬蟲(chóng)_微信公眾號推送信息爬取示例
  
  問(wèn)題描述 使用搜狗微信搜索抓取指定公眾號的最新推送,并將對應網(wǎng)頁(yè)保存到本地。注意,搜狗微信獲取的地址是臨時(shí)鏈接,具有時(shí)效性。公眾號為動(dòng)態(tài)網(wǎng)頁(yè)(JavaScript渲染),使用requests.get()獲取的內容不收錄推送消息。這里使用 selenium+PhantomJS 處理代碼#!/usr/bin/env python3 from selenium import webdriver from datetime import datetime import bs4, requ
  Python使用webdriver爬取微信公眾號
  本文示例分享了python使用webdriver爬取微信公眾號的具體代碼,供大家參考。具體內容如下# -*- 編碼:utf-8 -*- from selenium import webdriver import time import json import requests import re import random #微信公眾號user="" #公眾號密碼password="" #設置需要爬取的公眾號列表 gzlist=['香河微服務(wù)
  Python抓取微信公眾號賬號信息的方法
  搜狗微信搜索提供了兩種關(guān)鍵詞搜索,一種是搜索公眾號文章的內容,另一種是直接搜索微信公眾號。公眾號基本信息可通過(guò)微信公眾號搜索獲取。還有最近發(fā)布的10個(gè)文章,今天就來(lái)?yè)屛⑿殴娞柕馁~號信息爬蟲(chóng)吧。首先通過(guò)首頁(yè)進(jìn)入,可以按類(lèi)別抓取,通過(guò)“查看更多”可以找到頁(yè)面鏈接規則: import requests as req import re reTypes = r'id="pc_\d*" uigs=" (pc_\d*)"&gt;([\s\S]*?)&amp;
  一種使用python itchat包爬取微信好友頭像形成矩形頭像集的方法
  初學(xué)者學(xué)python,一定要干點(diǎn)有趣的事!讓我們從微信開(kāi)始吧!頭像采集示例如下: 可以發(fā)朋友圈開(kāi)始鑒定大賽哈哈~ 廢話(huà)不多說(shuō),直接上代碼,我寫(xiě)了很多評論,大家應該都能看懂 import itchat import os import PIL .Image as Image from os import listdir import math import sys print("請進(jìn)入查詢(xún)模式:0-顯示所有好友頭像,但最終矩形頭像集的最后一行可能不完整:1-頭像集是一個(gè)完整的矩形,但朋友可能不完整,即在0模式下被丟棄
  微信公眾號Java批量獲取方法詳解
  
  最近需要爬取微信公眾號的文章信息。網(wǎng)上搜了一下,發(fā)現微信公眾號爬取的難點(diǎn)在于公眾號文章的鏈接在PC端打不開(kāi),所以用微信自帶的瀏覽器(只能在PC端打開(kāi))得到微信客戶(hù)端補充的參數后的其他平臺),給爬蟲(chóng)帶來(lái)了很大的麻煩。后來(lái)看到一個(gè)大牛在知乎上用php寫(xiě)的微信公眾號爬取程序按照大佬的思路整理成java。改造過(guò)程中有很多細節問(wèn)題,我就分享一下。系統的基本思路是在安卓模擬器上運行微信,模擬器設置代理,通過(guò)代理服務(wù)器截取微信數據,并將獲取的數據發(fā)送給自己的程序進(jìn)行處理。準備環(huán)境:node 查看全部

  querylist采集微信公眾號文章(Python微信公眾號文章文章爬取的示例代碼一.思路)
  Python微信公眾號文章爬取示例代碼
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面
  
  
  從界面中我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
  二.界面分析
  獲取微信公眾號界面:
  范圍:
  行動(dòng)=search_biz
  開(kāi)始=0
  計數=5
  query=公眾號
  token = 每個(gè)賬戶(hù)對應的token值
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  所以在這個(gè)界面中,我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后可以通過(guò)網(wǎng)頁(yè)鏈接獲取token。
  
  獲取公眾號對應的文章接口:
  范圍:
  行動(dòng)=list_ex
  開(kāi)始=0
  計數=5
  fakeid=MjM5NDAwMTA2MA==
  類(lèi)型=9
  查詢(xún)=
  令牌=557131216
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  在這個(gè)接口中,我們需要獲取的值是上一步的token和fakeid,而這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以得到微信公眾號文章的數據了。
  
  三.實(shí)現
  第一步:
  首先我們需要通過(guò)selenium來(lái)模擬登錄,然后獲取cookie和對應的token
  
def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義了一個(gè)登錄方法,其中的參數是登錄賬號和密碼,然后定義了一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù)輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,登錄微信即可掃碼。
  刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token并返回。
  第2步:
  1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
  
url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲取的token和cookie,然后通過(guò)requests.get請求獲取微信公眾號返回的json數據
  
lists = search_resp.json().get('list')[0]
  通過(guò)以上代碼可以獲取對應的公眾號數據
  
fakeid = lists.get('fakeid')
  通過(guò)上面的代碼,可以得到對應的 fakeid
  2.請求訪(fǎng)問(wèn)微信公眾號文章接口,獲取我們需要的文章數據
  
appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入 fakeid 和 token 然后調用 requests.get 請求接口獲取返回的 json 數據。
  我們實(shí)現了微信公眾號文章的爬取。
  四.總結
  通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,我們在循環(huán)獲取文章的時(shí)候,一定要設置延遲時(shí)間,否則容易被封號,獲取不到返回的數據。
  至此,這篇關(guān)于Python微信公眾號文章爬取示例代碼的文章文章就介紹到這里了。更多相關(guān)Python微信公眾號文章爬取內容,請搜索我們之前的文章或繼續瀏覽下方相關(guān)文章,希望大家以后多多支持!
  時(shí)間:2020-11-27
  基于Python采集爬取微信公眾號歷史數據
  鯤之鵬技術(shù)人員將在本文中通過(guò)模擬微信App的操作,介紹一種采集指定公眾號所有歷史數據的方法。通過(guò)我們的抓包分析,我們發(fā)現微信公眾號的歷史數據是通過(guò)HTTP協(xié)議加載的,對應的API接口如下圖所示,關(guān)鍵參數有四個(gè)(__biz.appmsg_token.pass_ticket和餅干)。為了獲取這四個(gè)參數,我們需要模擬運行App,讓它生成這些參數,然后我們抓包獲取。對于模擬App操作,我們之前已經(jīng)介紹過(guò)通過(guò)Python模擬Android App的方法(詳見(jiàn)詳情)。
  python爬取微信公眾號文章的方法
  最近在學(xué)習Python3網(wǎng)絡(luò )爬蟲(chóng)(崔慶才寫(xiě)的)的開(kāi)發(fā)實(shí)踐,剛剛得知他在這里使用代理爬取了公眾號文章,但是根據他的代碼,還是出現了一些問(wèn)題。我在這里用過(guò)這本書(shū)。對本書(shū)前面提到的一些內容進(jìn)行了改進(jìn)。(作者半年前寫(xiě)的這段代碼,騰訊的網(wǎng)站半年前更新了)我直接加下面代碼:TIMEOUT = 20 from requests import Request, Session, PreparedRequest import requests from selenium import webdrive
  Python如何爬取微信公眾號文章及評論(基于Fiddler抓包分析)
  
  背景描述我覺(jué)得微信公眾號是比較難爬的平臺之一,但是經(jīng)過(guò)一番折騰,還是有一點(diǎn)小收獲。沒(méi)用Scrapy(估計爬太快有防爬限制),不過(guò)后面會(huì )開(kāi)始整理寫(xiě)一些實(shí)戰。. 簡(jiǎn)單介紹一下本次的開(kāi)發(fā)環(huán)境:python3請求psycopg2(操作postgres數據庫)抓包分析本次實(shí)戰對公眾號的抓包沒(méi)有限制,但是每次抓包前都要對不同的公眾號進(jìn)行分析。打開(kāi)Fiddler,在手機上配置相關(guān)代理。為了避免過(guò)多干擾,這里給Fiddler一個(gè)過(guò)濾規則,指定微信域名即可:
  python selenium爬取微信公眾號文章代碼詳解
  參考:selenium webdriver 添加cookies: 需求:想看微信公眾號文章的歷史,但是每次都找地方不方便。思路:1.使用selenium打開(kāi)微信公眾號歷史文章,滾動(dòng)刷新到底部,獲取所有歷史文章url。2.遍歷 url 并下載到本地。實(shí)現1.打開(kāi)微信客戶(hù)端,點(diǎn)擊A微信公眾號-&gt;進(jìn)入公眾號-&gt;打開(kāi)歷史文章鏈接(用瀏覽器打開(kāi)),通過(guò)開(kāi)發(fā)者工具獲取cookie
  Python爬取指定微信公眾號文章
  本文示例分享了python爬取微信公眾號文章的具體代碼,供大家參考。具體內容如下。該方法是依靠 urllib2 庫完成的。首先需要安裝你的python環(huán)境,然后安裝urllib2庫程序的啟動(dòng)方法(返回值為公眾號文章的列表): def openUrl(): print("啟動(dòng)爬蟲(chóng),打開(kāi)搜狗搜索微信界面") # 加載頁(yè)面url = ';s_from=input&amp;query = 被抓取的公眾號名稱(chēng)
  Python爬取微信公眾號文章
  本文示例分享python爬取微信公眾號文章的具體代碼供大家參考,具體內容如下# -*- coding: utf-8 -*- import requests from bs4 import BeautifulSoup from requests .exceptions import RequestException import time import random import MySQLdb import threading import socket import math soc
  Python爬蟲(chóng)_微信公眾號推送信息爬取示例
  
  問(wèn)題描述 使用搜狗微信搜索抓取指定公眾號的最新推送,并將對應網(wǎng)頁(yè)保存到本地。注意,搜狗微信獲取的地址是臨時(shí)鏈接,具有時(shí)效性。公眾號為動(dòng)態(tài)網(wǎng)頁(yè)(JavaScript渲染),使用requests.get()獲取的內容不收錄推送消息。這里使用 selenium+PhantomJS 處理代碼#!/usr/bin/env python3 from selenium import webdriver from datetime import datetime import bs4, requ
  Python使用webdriver爬取微信公眾號
  本文示例分享了python使用webdriver爬取微信公眾號的具體代碼,供大家參考。具體內容如下# -*- 編碼:utf-8 -*- from selenium import webdriver import time import json import requests import re import random #微信公眾號user="" #公眾號密碼password="" #設置需要爬取的公眾號列表 gzlist=['香河微服務(wù)
  Python抓取微信公眾號賬號信息的方法
  搜狗微信搜索提供了兩種關(guān)鍵詞搜索,一種是搜索公眾號文章的內容,另一種是直接搜索微信公眾號。公眾號基本信息可通過(guò)微信公眾號搜索獲取。還有最近發(fā)布的10個(gè)文章,今天就來(lái)?yè)屛⑿殴娞柕馁~號信息爬蟲(chóng)吧。首先通過(guò)首頁(yè)進(jìn)入,可以按類(lèi)別抓取,通過(guò)“查看更多”可以找到頁(yè)面鏈接規則: import requests as req import re reTypes = r'id="pc_\d*" uigs=" (pc_\d*)"&gt;([\s\S]*?)&amp;
  一種使用python itchat包爬取微信好友頭像形成矩形頭像集的方法
  初學(xué)者學(xué)python,一定要干點(diǎn)有趣的事!讓我們從微信開(kāi)始吧!頭像采集示例如下: 可以發(fā)朋友圈開(kāi)始鑒定大賽哈哈~ 廢話(huà)不多說(shuō),直接上代碼,我寫(xiě)了很多評論,大家應該都能看懂 import itchat import os import PIL .Image as Image from os import listdir import math import sys print("請進(jìn)入查詢(xún)模式:0-顯示所有好友頭像,但最終矩形頭像集的最后一行可能不完整:1-頭像集是一個(gè)完整的矩形,但朋友可能不完整,即在0模式下被丟棄
  微信公眾號Java批量獲取方法詳解
  
  最近需要爬取微信公眾號的文章信息。網(wǎng)上搜了一下,發(fā)現微信公眾號爬取的難點(diǎn)在于公眾號文章的鏈接在PC端打不開(kāi),所以用微信自帶的瀏覽器(只能在PC端打開(kāi))得到微信客戶(hù)端補充的參數后的其他平臺),給爬蟲(chóng)帶來(lái)了很大的麻煩。后來(lái)看到一個(gè)大牛在知乎上用php寫(xiě)的微信公眾號爬取程序按照大佬的思路整理成java。改造過(guò)程中有很多細節問(wèn)題,我就分享一下。系統的基本思路是在安卓模擬器上運行微信,模擬器設置代理,通過(guò)代理服務(wù)器截取微信數據,并將獲取的數據發(fā)送給自己的程序進(jìn)行處理。準備環(huán)境:node

querylist采集微信公眾號文章(微信公眾號采集二級目錄生成工具是一款第三版巧妙偽原創(chuàng )來(lái)襲 )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 138 次瀏覽 ? 2022-01-12 08:05 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(微信公眾號采集二級目錄生成工具是一款第三版巧妙偽原創(chuàng )來(lái)襲
)
  微信公眾號采集二級目錄生成工具第三版聰明偽原創(chuàng )來(lái)了】微信公眾號采集+聰明偽原創(chuàng )+多cms版,這個(gè)軟件可以批量偽原創(chuàng ),然后批量偽原創(chuàng )檢查,非常值得注意,請先在本地環(huán)境測試,本軟件不能自動(dòng)編碼。
  軟件說(shuō)明
  1.本軟件的功能:
  適合優(yōu)采云站長(cháng),也適合支持站內做站群的人
  2.運行過(guò)程:
  采集微信文章,然后偽原創(chuàng )點(diǎn)擊這些文章,然后更新到網(wǎng)站。整個(gè)過(guò)程是全自動(dòng)的。無(wú)需打開(kāi)后臺,通過(guò)數據庫發(fā)送。因此,需要生成靜態(tài)頁(yè)面。
  3.與上一版本對比:和之前一樣,微信公眾號在文章采集和采集之后使用了偽原創(chuàng )。不知道這算不算偽原創(chuàng ),但確實(shí)達到了偽原創(chuàng )的效果,
  這個(gè)新版本偽原創(chuàng )的玩法很巧妙,就是翻譯,先中文轉英文,再英文轉中文??上б惶旆g量有限,可以自己換IP解決。(其實(shí)不適合更新太多,一天發(fā)幾篇就OK了,一般如果是老網(wǎng)站的話(huà)。關(guān)鍵詞可以很快排名)
  如何使用
  不建議新手站長(cháng)使用,因為這個(gè)軟件是用來(lái)偷懶的,新手最好不要偷懶。而且,重點(diǎn)是怕新手不懂概念,遇到問(wèn)題也解決不了。然后來(lái)找我。我也很無(wú)能為力,我也是雞。簡(jiǎn)單的問(wèn)題我不想回答。我不會(huì )復雜的。
  我不希望大家停止問(wèn)我,但我希望大家從百度開(kāi)始,不要再問(wèn)了。有時(shí)候同一個(gè)問(wèn)題可能被問(wèn)了很多遍,我就會(huì )發(fā)脾氣。我就是這樣的人,請不要冒犯。還是希望能和大家一起進(jìn)步。
   查看全部

  querylist采集微信公眾號文章(微信公眾號采集二級目錄生成工具是一款第三版巧妙偽原創(chuàng )來(lái)襲
)
  微信公眾號采集二級目錄生成工具第三版聰明偽原創(chuàng )來(lái)了】微信公眾號采集+聰明偽原創(chuàng )+多cms版,這個(gè)軟件可以批量偽原創(chuàng ),然后批量偽原創(chuàng )檢查,非常值得注意,請先在本地環(huán)境測試,本軟件不能自動(dòng)編碼。
  軟件說(shuō)明
  1.本軟件的功能:
  適合優(yōu)采云站長(cháng),也適合支持站內做站群的人
  2.運行過(guò)程:
  采集微信文章,然后偽原創(chuàng )點(diǎn)擊這些文章,然后更新到網(wǎng)站。整個(gè)過(guò)程是全自動(dòng)的。無(wú)需打開(kāi)后臺,通過(guò)數據庫發(fā)送。因此,需要生成靜態(tài)頁(yè)面。
  3.與上一版本對比:和之前一樣,微信公眾號在文章采集和采集之后使用了偽原創(chuàng )。不知道這算不算偽原創(chuàng ),但確實(shí)達到了偽原創(chuàng )的效果,
  這個(gè)新版本偽原創(chuàng )的玩法很巧妙,就是翻譯,先中文轉英文,再英文轉中文??上б惶旆g量有限,可以自己換IP解決。(其實(shí)不適合更新太多,一天發(fā)幾篇就OK了,一般如果是老網(wǎng)站的話(huà)。關(guān)鍵詞可以很快排名)
  如何使用
  不建議新手站長(cháng)使用,因為這個(gè)軟件是用來(lái)偷懶的,新手最好不要偷懶。而且,重點(diǎn)是怕新手不懂概念,遇到問(wèn)題也解決不了。然后來(lái)找我。我也很無(wú)能為力,我也是雞。簡(jiǎn)單的問(wèn)題我不想回答。我不會(huì )復雜的。
  我不希望大家停止問(wèn)我,但我希望大家從百度開(kāi)始,不要再問(wèn)了。有時(shí)候同一個(gè)問(wèn)題可能被問(wèn)了很多遍,我就會(huì )發(fā)脾氣。我就是這樣的人,請不要冒犯。還是希望能和大家一起進(jìn)步。
  

querylist采集微信公眾號文章(糗事百科的幾種方法,你都知道嗎?!)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 109 次瀏覽 ? 2022-01-12 06:05 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(糗事百科的幾種方法,你都知道嗎?!)
  querylist采集微信公眾號文章等信息,也有支持api形式的querylist,比如,糗事百科之前引入了通訊錄的關(guān)注查詢(xún)功能,是基于querylist和api進(jìn)行定制開(kāi)發(fā)的。缺點(diǎn)是,需要使用js實(shí)現url分析、分詞及文章列表返回。另外,糗事百科的支持發(fā)送鏈接時(shí),文章列表不會(huì )變化。(反正糗事百科的querylist的名字就是他們自己起的)[糗事百科querylist](),目前糗事百科還沒(méi)有引入正則表達式,這個(gè)空白是否用正則表達式實(shí)現都是未知數。
  目前糗事百科支持個(gè)人的關(guān)注消息以及對應的項目和網(wǎng)站進(jìn)行分析,對于其他平臺的信息還是需要通過(guò)爬蟲(chóng)工具爬取,而后對應querylist。
  糗事百科的信息分為發(fā)布平臺、各種類(lèi)型的公眾號文章,還有微信公眾號的文章列表信息。
  以糗事百科為例,糗事百科是目前國內最大的發(fā)布平臺,并且存在大量的原創(chuàng )內容,此外還支持api接口,你可以看一下,個(gè)人建議api應該更加靠譜一些,更加方便。
  糗事都倒閉了,人家做querylist的干嘛去了,然后被查了!目前我了解到的糗事百科做的還不錯的除了糗事歷史記錄還有打開(kāi)設備,刪帖時(shí)間等等。
  我也是對糗事百科的其他欄目感興趣,比如糗事玩樂(lè ),糗事笑話(huà),還有種子搜索的信息。我是從糗事百科的公眾號里看到的,其他沒(méi)有詳細看。
  1、糗事密室經(jīng)常有新怪人互懟的,這是我喜歡的一個(gè)玩法,
  2、糗事運轉博覽每日都會(huì )發(fā)圖文消息,
  3、糗事集合經(jīng)常有公司營(yíng)銷(xiāo)信息,
  4、糗事校園糗事百科還有糗事校園有自己的校園班級、單位、公司等集中展示區的聚合頁(yè)
  5、關(guān)注和贊賞其實(shí)來(lái)說(shuō)糗事百科也是一個(gè)輕博客式的網(wǎng)站,可以讓讀者對公司產(chǎn)品等進(jìn)行贊賞。關(guān)注和贊賞的方式也有好幾種,比如用戶(hù)發(fā)送消息,你的朋友或者發(fā)一條評論,其他用戶(hù)點(diǎn)贊就行了。不過(guò)看了一下并不是所有的用戶(hù)都有贊賞的權限,官方說(shuō)是鼓勵用戶(hù)發(fā)錢(qián)來(lái)感謝商家的文章。但是目前看到并沒(méi)有好玩的活動(dòng)和送錢(qián)這種方式,社區應該有更好的活動(dòng)形式來(lái)進(jìn)行內容建設和信息交流,比如通過(guò)用戶(hù)進(jìn)行互動(dòng)活動(dòng)之類(lèi)的??吹叫掳孢€加入了時(shí)事的功能,如果大家都關(guān)注時(shí)事的話(huà)這個(gè)網(wǎng)站還有存在價(jià)值嗎?。
  6、游戲行情這個(gè)功能個(gè)人還在挖掘中??戳艘幌马?yè)面比較簡(jiǎn)單,
  7、招聘聊天這個(gè)功能和招聘行業(yè)有關(guān),
  8、營(yíng)銷(xiāo)軟件行業(yè)這個(gè)欄目應該不會(huì )放很多二維碼吧! 查看全部

  querylist采集微信公眾號文章(糗事百科的幾種方法,你都知道嗎?!)
  querylist采集微信公眾號文章等信息,也有支持api形式的querylist,比如,糗事百科之前引入了通訊錄的關(guān)注查詢(xún)功能,是基于querylist和api進(jìn)行定制開(kāi)發(fā)的。缺點(diǎn)是,需要使用js實(shí)現url分析、分詞及文章列表返回。另外,糗事百科的支持發(fā)送鏈接時(shí),文章列表不會(huì )變化。(反正糗事百科的querylist的名字就是他們自己起的)[糗事百科querylist](),目前糗事百科還沒(méi)有引入正則表達式,這個(gè)空白是否用正則表達式實(shí)現都是未知數。
  目前糗事百科支持個(gè)人的關(guān)注消息以及對應的項目和網(wǎng)站進(jìn)行分析,對于其他平臺的信息還是需要通過(guò)爬蟲(chóng)工具爬取,而后對應querylist。
  糗事百科的信息分為發(fā)布平臺、各種類(lèi)型的公眾號文章,還有微信公眾號的文章列表信息。
  以糗事百科為例,糗事百科是目前國內最大的發(fā)布平臺,并且存在大量的原創(chuàng )內容,此外還支持api接口,你可以看一下,個(gè)人建議api應該更加靠譜一些,更加方便。
  糗事都倒閉了,人家做querylist的干嘛去了,然后被查了!目前我了解到的糗事百科做的還不錯的除了糗事歷史記錄還有打開(kāi)設備,刪帖時(shí)間等等。
  我也是對糗事百科的其他欄目感興趣,比如糗事玩樂(lè ),糗事笑話(huà),還有種子搜索的信息。我是從糗事百科的公眾號里看到的,其他沒(méi)有詳細看。
  1、糗事密室經(jīng)常有新怪人互懟的,這是我喜歡的一個(gè)玩法,
  2、糗事運轉博覽每日都會(huì )發(fā)圖文消息,
  3、糗事集合經(jīng)常有公司營(yíng)銷(xiāo)信息,
  4、糗事校園糗事百科還有糗事校園有自己的校園班級、單位、公司等集中展示區的聚合頁(yè)
  5、關(guān)注和贊賞其實(shí)來(lái)說(shuō)糗事百科也是一個(gè)輕博客式的網(wǎng)站,可以讓讀者對公司產(chǎn)品等進(jìn)行贊賞。關(guān)注和贊賞的方式也有好幾種,比如用戶(hù)發(fā)送消息,你的朋友或者發(fā)一條評論,其他用戶(hù)點(diǎn)贊就行了。不過(guò)看了一下并不是所有的用戶(hù)都有贊賞的權限,官方說(shuō)是鼓勵用戶(hù)發(fā)錢(qián)來(lái)感謝商家的文章。但是目前看到并沒(méi)有好玩的活動(dòng)和送錢(qián)這種方式,社區應該有更好的活動(dòng)形式來(lái)進(jìn)行內容建設和信息交流,比如通過(guò)用戶(hù)進(jìn)行互動(dòng)活動(dòng)之類(lèi)的??吹叫掳孢€加入了時(shí)事的功能,如果大家都關(guān)注時(shí)事的話(huà)這個(gè)網(wǎng)站還有存在價(jià)值嗎?。
  6、游戲行情這個(gè)功能個(gè)人還在挖掘中??戳艘幌马?yè)面比較簡(jiǎn)單,
  7、招聘聊天這個(gè)功能和招聘行業(yè)有關(guān),
  8、營(yíng)銷(xiāo)軟件行業(yè)這個(gè)欄目應該不會(huì )放很多二維碼吧!

querylist采集微信公眾號文章(本文來(lái)自:前端開(kāi)發(fā)者《》鏈接(圖))

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 172 次瀏覽 ? 2022-01-10 11:16 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(本文來(lái)自:前端開(kāi)發(fā)者《》鏈接(圖))
  之前自己維護了一個(gè)公眾號,但是因為個(gè)人關(guān)系,很久沒(méi)有更新了。今天來(lái)緬懷一下,偶然發(fā)現了一個(gè)獲取微信公眾號文章的方法。
  之前的獲取方式有很多??梢酝ㄟ^(guò)搜狗、青博、網(wǎng)頁(yè)、客戶(hù)端等方式使用,這個(gè)可能不如其他的好,但是操作簡(jiǎn)單易懂。
  所以,首先你需要有一個(gè)微信公眾平臺的賬號
  微信公眾平臺:
  
  登錄后進(jìn)入首頁(yè),點(diǎn)擊新建群發(fā)。
  
  選擇自創(chuàng )圖形:
  
  好像是公眾號運營(yíng)教學(xué)
  進(jìn)入編輯頁(yè)面后,單擊超鏈接
  
  彈出選擇框,我們在框中輸入對應的公眾號名稱(chēng),就會(huì )出現對應的文章列表。
  
  可以打開(kāi)控制臺查看請求的界面,這不奇怪嗎
  
  打開(kāi)響應,也就是我們需要的 文章 鏈接
  
  確定數據后,我們需要對接口進(jìn)行分析。
  感覺(jué)很簡(jiǎn)單,一個(gè)GET請求,攜帶一些參數。
  
  fakeid 是公眾號的唯一 ID,所以如果要直接通過(guò)名稱(chēng)獲取 文章 的列表,則需要先獲取 fakeid。
  當我們輸入公眾號名稱(chēng)時(shí),點(diǎn)擊搜索??梢钥吹接|發(fā)了搜索界面,返回了fakeid。
  
  這個(gè)接口不需要很多參數。
  
  接下來(lái),我們可以使用代碼來(lái)模擬上述操作。
  但是,也有必要使用現有的 cookie 來(lái)避免登錄。
  
  當前的cookie過(guò)期日期,我沒(méi)有測試過(guò)??赡苄枰粫r(shí)更新 cookie。
  測試代碼:
  
import requests
import json
Cookie = '請換上自己的Cookie,獲取方法:直接復制下來(lái)'
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
headers = {
"Cookie": Cookie,
"User-Agent": 'Mozilla/5.0 (Linux; Android 10; YAL-AL00 Build/HUAWEIYAL-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.64 HuaweiBrowser/10.0.1.335 Mobile Safari/537.36'
}
keyword = 'pythonlx' # 公眾號名字:可自定義
token = '你的token' # 獲取方法:如上述 直接復制下來(lái)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?action=search_biz&begin=0&count=5&query={}&token={}&lang=zh_CN&f=json&ajax=1'.format(keyword,token)
doc = requests.get(search_url,headers=headers).text
jstext = json.loads(doc)
fakeid = jstext['list'][0]['fakeid']
data = {
"token": token,
"lang": "zh_CN",
"f": "json",
"ajax": "1",
"action": "list_ex",
"begin": 0,
"count": "5",
"query": "",
"fakeid": fakeid,
"type": "9",
}
json_test = requests.get(url, headers=headers, params=data).text
json_test = json.loads(json_test)
print(json_test)
  這樣可以獲取最新的10篇文章文章,如果想獲取更多歷史文章,可以修改data中的“begin”參數,0為第一頁(yè),5為第一頁(yè)第二頁(yè),10 是第三頁(yè)(依此類(lèi)推)
  但如果你想大規模刮:
  請為自己安排一個(gè)穩定的代理,降低爬蟲(chóng)速度,并準備好多個(gè)賬號,以減少被封號的可能性。
  以上就是本文的全部?jì)热?。希望對大家的學(xué)習有所幫助,也希望大家多多支持前端開(kāi)發(fā)者。
  ? 本文來(lái)自:前端開(kāi)發(fā)者 ? 《通過(guò)微信公眾平臺獲取公眾號文章的方法示例_跑到_前端開(kāi)發(fā)者》
  ? 本文鏈接: 查看全部

  querylist采集微信公眾號文章(本文來(lái)自:前端開(kāi)發(fā)者《》鏈接(圖))
  之前自己維護了一個(gè)公眾號,但是因為個(gè)人關(guān)系,很久沒(méi)有更新了。今天來(lái)緬懷一下,偶然發(fā)現了一個(gè)獲取微信公眾號文章的方法。
  之前的獲取方式有很多??梢酝ㄟ^(guò)搜狗、青博、網(wǎng)頁(yè)、客戶(hù)端等方式使用,這個(gè)可能不如其他的好,但是操作簡(jiǎn)單易懂。
  所以,首先你需要有一個(gè)微信公眾平臺的賬號
  微信公眾平臺:
  
  登錄后進(jìn)入首頁(yè),點(diǎn)擊新建群發(fā)。
  
  選擇自創(chuàng )圖形:
  
  好像是公眾號運營(yíng)教學(xué)
  進(jìn)入編輯頁(yè)面后,單擊超鏈接
  
  彈出選擇框,我們在框中輸入對應的公眾號名稱(chēng),就會(huì )出現對應的文章列表。
  
  可以打開(kāi)控制臺查看請求的界面,這不奇怪嗎
  
  打開(kāi)響應,也就是我們需要的 文章 鏈接
  
  確定數據后,我們需要對接口進(jìn)行分析。
  感覺(jué)很簡(jiǎn)單,一個(gè)GET請求,攜帶一些參數。
  
  fakeid 是公眾號的唯一 ID,所以如果要直接通過(guò)名稱(chēng)獲取 文章 的列表,則需要先獲取 fakeid。
  當我們輸入公眾號名稱(chēng)時(shí),點(diǎn)擊搜索??梢钥吹接|發(fā)了搜索界面,返回了fakeid。
  
  這個(gè)接口不需要很多參數。
  
  接下來(lái),我們可以使用代碼來(lái)模擬上述操作。
  但是,也有必要使用現有的 cookie 來(lái)避免登錄。
  
  當前的cookie過(guò)期日期,我沒(méi)有測試過(guò)??赡苄枰粫r(shí)更新 cookie。
  測試代碼:
  
import requests
import json
Cookie = '請換上自己的Cookie,獲取方法:直接復制下來(lái)'
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
headers = {
"Cookie": Cookie,
"User-Agent": 'Mozilla/5.0 (Linux; Android 10; YAL-AL00 Build/HUAWEIYAL-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.64 HuaweiBrowser/10.0.1.335 Mobile Safari/537.36'
}
keyword = 'pythonlx' # 公眾號名字:可自定義
token = '你的token' # 獲取方法:如上述 直接復制下來(lái)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?action=search_biz&begin=0&count=5&query={}&token={}&lang=zh_CN&f=json&ajax=1'.format(keyword,token)
doc = requests.get(search_url,headers=headers).text
jstext = json.loads(doc)
fakeid = jstext['list'][0]['fakeid']
data = {
"token": token,
"lang": "zh_CN",
"f": "json",
"ajax": "1",
"action": "list_ex",
"begin": 0,
"count": "5",
"query": "",
"fakeid": fakeid,
"type": "9",
}
json_test = requests.get(url, headers=headers, params=data).text
json_test = json.loads(json_test)
print(json_test)
  這樣可以獲取最新的10篇文章文章,如果想獲取更多歷史文章,可以修改data中的“begin”參數,0為第一頁(yè),5為第一頁(yè)第二頁(yè),10 是第三頁(yè)(依此類(lèi)推)
  但如果你想大規模刮:
  請為自己安排一個(gè)穩定的代理,降低爬蟲(chóng)速度,并準備好多個(gè)賬號,以減少被封號的可能性。
  以上就是本文的全部?jì)热?。希望對大家的學(xué)習有所幫助,也希望大家多多支持前端開(kāi)發(fā)者。
  ? 本文來(lái)自:前端開(kāi)發(fā)者 ? 《通過(guò)微信公眾平臺獲取公眾號文章的方法示例_跑到_前端開(kāi)發(fā)者》
  ? 本文鏈接:

querylist采集微信公眾號文章(2018年7月20日更新:1.即刻APP(該方法已失效))

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 157 次瀏覽 ? 2022-01-10 11:16 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(2018年7月20日更新:1.即刻APP(該方法已失效))
  2018 年 7 月 20 日更新
  因為微廣場(chǎng)是封閉的,我又寫(xiě)了一篇文章文章,看看這些方法能不能滿(mǎn)足你的需求,文章的內容如下:
  本文將為您介紹幾種訂閱微信公眾號的絕佳方式。相信總有一款適合你(強烈推薦最后一種方法)。為了衡量這些方法的優(yōu)缺點(diǎn),我將使用以下三個(gè)公眾號進(jìn)行測試:
  1. Instant APP(此方法已過(guò)期)
<p>在聚合應用程序中,我認為立即執行是最好的。我從2015年就開(kāi)始用這個(gè)APP了,應該是第一批用戶(hù)。從一開(kāi)始只有一些手動(dòng)篩選的主題,到現在用戶(hù)可以自定義主題,功能越來(lái)越強大。在我之前的 查看全部

  querylist采集微信公眾號文章(2018年7月20日更新:1.即刻APP(該方法已失效))
  2018 年 7 月 20 日更新
  因為微廣場(chǎng)是封閉的,我又寫(xiě)了一篇文章文章,看看這些方法能不能滿(mǎn)足你的需求,文章的內容如下:
  本文將為您介紹幾種訂閱微信公眾號的絕佳方式。相信總有一款適合你(強烈推薦最后一種方法)。為了衡量這些方法的優(yōu)缺點(diǎn),我將使用以下三個(gè)公眾號進(jìn)行測試:
  1. Instant APP(此方法已過(guò)期)
<p>在聚合應用程序中,我認為立即執行是最好的。我從2015年就開(kāi)始用這個(gè)APP了,應該是第一批用戶(hù)。從一開(kāi)始只有一些手動(dòng)篩選的主題,到現在用戶(hù)可以自定義主題,功能越來(lái)越強大。在我之前的

querylist采集微信公眾號文章(微信公眾號文章的圖片無(wú)法直接復制到WordPress中的應用)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 155 次瀏覽 ? 2022-01-09 10:09 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(微信公眾號文章的圖片無(wú)法直接復制到WordPress中的應用)
  相信很多微信公眾號作者(個(gè)人、組織、公司)不僅在微信公眾平臺上發(fā)文,通常文章會(huì )在多個(gè)平臺上推送,比如今日頭條、知乎欄目、簡(jiǎn)書(shū)等等,甚至還有自己的網(wǎng)站(官網(wǎng)),但是在多個(gè)平臺上發(fā)布文章是一件非常耗時(shí)的工作。
  大多數 網(wǎng)站 構建都基于 WordPress,因為該平臺非常簡(jiǎn)單實(shí)用,并且有大量插件。因此,我也不例外。當我選擇建站系統時(shí),首先選擇的是 WordPress。不過(guò)我經(jīng)常寫(xiě)文章發(fā)現一個(gè)問(wèn)題,就是每次在公眾號寫(xiě)文章,我把文章@文章手動(dòng)復制到WordPress上,復制文字沒(méi)什么,但是復制圖片會(huì )害死我,微信公眾號文章的圖片不能直接復制到WordPress,會(huì )顯示為“無(wú)法顯示。這張圖片”,因為微信已對圖片實(shí)施防盜鏈措施。
  這時(shí)候我嘗試搜索了這樣一個(gè)插件,可以通過(guò)粘貼公眾號文章的鏈接直接將內容導入WordPress,并將圖片下載到本地(媒體庫),我搜索到找到了一個(gè)叫Little Bee的插件。試了之后,感覺(jué)見(jiàn)面晚了。書(shū)籍,知乎欄目中的文章,還有多種豐富的可選功能,果斷聯(lián)系作者索要授權碼。
  使用起來(lái)也很簡(jiǎn)單,只要粘貼鏈接,就可以同時(shí)導入多個(gè)文章,也就是批量導入功能。
  如果下載了,可以直接在安裝插件頁(yè)面搜索小蜜蜂就可以看到了。 查看全部

  querylist采集微信公眾號文章(微信公眾號文章的圖片無(wú)法直接復制到WordPress中的應用)
  相信很多微信公眾號作者(個(gè)人、組織、公司)不僅在微信公眾平臺上發(fā)文,通常文章會(huì )在多個(gè)平臺上推送,比如今日頭條、知乎欄目、簡(jiǎn)書(shū)等等,甚至還有自己的網(wǎng)站(官網(wǎng)),但是在多個(gè)平臺上發(fā)布文章是一件非常耗時(shí)的工作。
  大多數 網(wǎng)站 構建都基于 WordPress,因為該平臺非常簡(jiǎn)單實(shí)用,并且有大量插件。因此,我也不例外。當我選擇建站系統時(shí),首先選擇的是 WordPress。不過(guò)我經(jīng)常寫(xiě)文章發(fā)現一個(gè)問(wèn)題,就是每次在公眾號寫(xiě)文章,我把文章@文章手動(dòng)復制到WordPress上,復制文字沒(méi)什么,但是復制圖片會(huì )害死我,微信公眾號文章的圖片不能直接復制到WordPress,會(huì )顯示為“無(wú)法顯示。這張圖片”,因為微信已對圖片實(shí)施防盜鏈措施。
  這時(shí)候我嘗試搜索了這樣一個(gè)插件,可以通過(guò)粘貼公眾號文章的鏈接直接將內容導入WordPress,并將圖片下載到本地(媒體庫),我搜索到找到了一個(gè)叫Little Bee的插件。試了之后,感覺(jué)見(jiàn)面晚了。書(shū)籍,知乎欄目中的文章,還有多種豐富的可選功能,果斷聯(lián)系作者索要授權碼。
  使用起來(lái)也很簡(jiǎn)單,只要粘貼鏈接,就可以同時(shí)導入多個(gè)文章,也就是批量導入功能。
  如果下載了,可以直接在安裝插件頁(yè)面搜索小蜜蜂就可以看到了。

querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 154 次瀏覽 ? 2022-01-08 14:08 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。我在網(wǎng)上搜索,發(fā)現爬取微信公眾號的難點(diǎn)在于公眾號文章的鏈接在PC端打不開(kāi),所以需要使用微信自帶的瀏覽器(獲取參數微信客戶(hù)端補充)可以在其他平臺打開(kāi)),給爬蟲(chóng)帶來(lái)了很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,直接按照大佬的思路做成了java。改造過(guò)程中遇到了很多細節和問(wèn)題,就分享給大家。
  附上大牛的鏈接文章:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè)。這些想法寫(xiě)得很詳細。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------------
  系統的基本思路是在A(yíng)ndroid模擬器上運行微信,在模擬器上設置代理,通過(guò)代理服務(wù)器截取微信數據,將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、安卓模擬器
  Nodejs下載地址:我下載的是windows版本的,直接安裝就好了。安裝后直接運行 C:\Program Files\nodejs\npm.cmd 會(huì )自動(dòng)配置環(huán)境。
  anyproxy安裝:按照上一步安裝nodejs后,直接在cmd中運行npm install -g anyproxy即可安裝
  網(wǎng)上的安卓模擬器就好了,有很多。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------------------------
  首先安裝代理服務(wù)器的證書(shū)。Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后,就可以解析了。在cmd中執行anyproxy --root安裝證書(shū),然后在模擬器中下載證書(shū)。
  然后輸入anyproxy -i 命令打開(kāi)代理服務(wù)。(記得添加參數?。?br />   
  記住這個(gè)ip和端口,那么安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用來(lái)顯示http傳輸的數據。
  
  點(diǎn)擊上方紅框中的菜單,會(huì )出現一個(gè)二維碼。用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
  現在準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
  
  準備工作到這里基本完成。在模擬器上打開(kāi)微信,打開(kāi)一個(gè)公眾號的文章,就可以從剛剛打開(kāi)的web界面看到anyproxy抓取的數據:
  
  上圖紅框是微信文章的鏈接,點(diǎn)擊查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果頂部清晰,您可以向下。
  這里我們依靠代理服務(wù)來(lái)抓取微信數據,但是我們不能抓取一條數據自己操作微信,所以還是手動(dòng)復制比較好。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)可以使用anyproxy攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下的文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫做replaceServerResDataAsync: function(req,res,serverResData,callback)。該方法負責對anyproxy獲取的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚。順著(zhù)邏輯去理解就好,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require(&#39;http&#39;);
11 http.get(&#39;http://xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on(&#39;data&#39;, function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \&#39;(.*?)\&#39;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require(&#39;http&#39;);
36 http.get(&#39;xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on(&#39;data&#39;, function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require(&#39;http&#39;);
65 http.get(&#39;http://xxx/getWxPost&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on(&#39;data&#39;, function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這是一個(gè)簡(jiǎn)短的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以向下滾動(dòng)。向下滾動(dòng)會(huì )觸發(fā)js事件發(fā)送請求獲取json數據(下一頁(yè)的內容)。還有公眾號文章的鏈接,以及文章的閱讀和點(diǎn)贊鏈接(返回json數據)。這些環(huán)節的形式是固定的,可以通過(guò)邏輯判斷加以區分。這里有個(gè)問(wèn)題,如果歷史頁(yè)面需要一路爬取怎么辦。我的想法是通過(guò)js模擬鼠標向下滑動(dòng),從而觸發(fā)請求提交下一部分列表的加載?;蛘咧苯邮褂胊nyproxy分析下載請求,直接向微信服務(wù)器發(fā)出這個(gè)請求。但是有一個(gè)問(wèn)題是如何判斷沒(méi)有剩余數據。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)要求,但以后可能需要。如果需要,您可以嘗試一下。 查看全部

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。我在網(wǎng)上搜索,發(fā)現爬取微信公眾號的難點(diǎn)在于公眾號文章的鏈接在PC端打不開(kāi),所以需要使用微信自帶的瀏覽器(獲取參數微信客戶(hù)端補充)可以在其他平臺打開(kāi)),給爬蟲(chóng)帶來(lái)了很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,直接按照大佬的思路做成了java。改造過(guò)程中遇到了很多細節和問(wèn)題,就分享給大家。
  附上大牛的鏈接文章:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè)。這些想法寫(xiě)得很詳細。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------------
  系統的基本思路是在A(yíng)ndroid模擬器上運行微信,在模擬器上設置代理,通過(guò)代理服務(wù)器截取微信數據,將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、安卓模擬器
  Nodejs下載地址:我下載的是windows版本的,直接安裝就好了。安裝后直接運行 C:\Program Files\nodejs\npm.cmd 會(huì )自動(dòng)配置環(huán)境。
  anyproxy安裝:按照上一步安裝nodejs后,直接在cmd中運行npm install -g anyproxy即可安裝
  網(wǎng)上的安卓模擬器就好了,有很多。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------------------------
  首先安裝代理服務(wù)器的證書(shū)。Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后,就可以解析了。在cmd中執行anyproxy --root安裝證書(shū),然后在模擬器中下載證書(shū)。
  然后輸入anyproxy -i 命令打開(kāi)代理服務(wù)。(記得添加參數?。?br />   
  記住這個(gè)ip和端口,那么安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用來(lái)顯示http傳輸的數據。
  
  點(diǎn)擊上方紅框中的菜單,會(huì )出現一個(gè)二維碼。用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
  現在準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
  
  準備工作到這里基本完成。在模擬器上打開(kāi)微信,打開(kāi)一個(gè)公眾號的文章,就可以從剛剛打開(kāi)的web界面看到anyproxy抓取的數據:
  
  上圖紅框是微信文章的鏈接,點(diǎn)擊查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果頂部清晰,您可以向下。
  這里我們依靠代理服務(wù)來(lái)抓取微信數據,但是我們不能抓取一條數據自己操作微信,所以還是手動(dòng)復制比較好。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)可以使用anyproxy攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下的文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫做replaceServerResDataAsync: function(req,res,serverResData,callback)。該方法負責對anyproxy獲取的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚。順著(zhù)邏輯去理解就好,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require(&#39;http&#39;);
11 http.get(&#39;http://xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on(&#39;data&#39;, function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \&#39;(.*?)\&#39;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require(&#39;http&#39;);
36 http.get(&#39;xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on(&#39;data&#39;, function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require(&#39;http&#39;);
65 http.get(&#39;http://xxx/getWxPost&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on(&#39;data&#39;, function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這是一個(gè)簡(jiǎn)短的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以向下滾動(dòng)。向下滾動(dòng)會(huì )觸發(fā)js事件發(fā)送請求獲取json數據(下一頁(yè)的內容)。還有公眾號文章的鏈接,以及文章的閱讀和點(diǎn)贊鏈接(返回json數據)。這些環(huán)節的形式是固定的,可以通過(guò)邏輯判斷加以區分。這里有個(gè)問(wèn)題,如果歷史頁(yè)面需要一路爬取怎么辦。我的想法是通過(guò)js模擬鼠標向下滑動(dòng),從而觸發(fā)請求提交下一部分列表的加載?;蛘咧苯邮褂胊nyproxy分析下載請求,直接向微信服務(wù)器發(fā)出這個(gè)請求。但是有一個(gè)問(wèn)題是如何判斷沒(méi)有剩余數據。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)要求,但以后可能需要。如果需要,您可以嘗試一下。

querylist采集微信公眾號文章(querylist中實(shí)現自動(dòng)化采集2采集微信公眾號文章的實(shí)現流程)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 136 次瀏覽 ? 2022-01-08 01:02 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(querylist中實(shí)現自動(dòng)化采集2采集微信公眾號文章的實(shí)現流程)
  querylist采集微信公眾號文章,在python中實(shí)現自動(dòng)化采集2采集微信公眾號文章的實(shí)現流程1。獲取微信公眾號文章列表(list_pass_folds)、文章標題和文章描述采用fullurl函數2采集的數據格式3數據封裝加載,檢查數據規模4數據清洗分析python的相關(guān)工具包的使用:注意,在使用python自己的工具包以前,需要先安裝pympi,pipinstallpympiimportpandasaspdimportcollectionsfromsklearn。metricsimportroc_auc_scoreasroc_auc_score#。 查看全部

  querylist采集微信公眾號文章(querylist中實(shí)現自動(dòng)化采集2采集微信公眾號文章的實(shí)現流程)
  querylist采集微信公眾號文章,在python中實(shí)現自動(dòng)化采集2采集微信公眾號文章的實(shí)現流程1。獲取微信公眾號文章列表(list_pass_folds)、文章標題和文章描述采用fullurl函數2采集的數據格式3數據封裝加載,檢查數據規模4數據清洗分析python的相關(guān)工具包的使用:注意,在使用python自己的工具包以前,需要先安裝pympi,pipinstallpympiimportpandasaspdimportcollectionsfromsklearn。metricsimportroc_auc_scoreasroc_auc_score#。

querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 175 次瀏覽 ? 2022-01-06 17:06 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。上網(wǎng)查了一下,發(fā)現微信公眾號的難點(diǎn)是公眾號文章的鏈接在PC端打不開(kāi)。必須使用微信自帶的瀏覽器(獲取微信客戶(hù)端的補充參數,才能在其他平臺打開(kāi)),給爬蟲(chóng)程序帶來(lái)很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,直接按照大牛的思路做了成java。改造過(guò)程中遇到了很多細節問(wèn)題,分享給大家。
  附上大牛文章的鏈接:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè),思路很詳細。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -----------------------
  該系統的基本思想是在A(yíng)ndroid模擬器上運行微信,模擬器設置一個(gè)代理,通過(guò)代理服務(wù)器攔截微信數據,并將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
  nodejs下載地址:我下載的是windows版本的,直接安裝就可以了。安裝完成后,直接運行C:\Program Files\nodejs\npm.cmd 自動(dòng)配置環(huán)境。
  Anyproxy安裝:上一步安裝好nodejs后,在cmd中直接運行npm install -g anyproxy即可安裝
  網(wǎng)上隨便跟著(zhù)安卓模擬器就行了,很多。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------------
  首先安裝代理服務(wù)器的證書(shū)。Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后即可解決。在 cmd 中執行 anyproxy --root 將安裝證書(shū)。之后,您必須在模擬器上下載證書(shū)。
  然后輸入anyproxy -i 命令開(kāi)啟代理服務(wù)。(記得加參數?。?br />   
  記住這個(gè)ip和端口,然后安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用于顯示http傳輸數據。
  
  點(diǎn)擊上方紅框中的菜單,會(huì )顯示一個(gè)二維碼。使用安卓模擬器掃碼識別。模擬器(手機)將下載證書(shū)并安裝它。
  現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
  
  至此,準備工作基本完成,在模擬器上打開(kāi)微信,開(kāi)通公眾號文章,從剛剛打開(kāi)的web界面就可以看到anyproxy抓取到的數據了:
  
  上面紅框里是微信文章的鏈接,點(diǎn)進(jìn)去查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果一切順利,你就可以下去了。
  這里我們依靠代理服務(wù)來(lái)抓取微信數據,但不能隨便抓取一條數據,自己操作微信。最好手動(dòng)復制。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)候可以使用anyproxy來(lái)攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫做 replaceServerResDataAsync: function(req,res,serverResData,callback)。該方法負責對anyproxy獲得的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚,按照邏輯來(lái)理解就好了,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require(&#39;http&#39;);
11 http.get(&#39;http://xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on(&#39;data&#39;, function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \&#39;(.*?)\&#39;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require(&#39;http&#39;);
36 http.get(&#39;xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on(&#39;data&#39;, function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require(&#39;http&#39;);
65 http.get(&#39;http://xxx/getWxPost&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on(&#39;data&#39;, function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這里是一個(gè)簡(jiǎn)短的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以關(guān)閉。如果被拒絕,則會(huì )觸發(fā)一個(gè)js事件,發(fā)送獲取json數據(下一頁(yè)內容)的??請求。還有公眾號文章的鏈接,以及文章的閱讀量和喜歡的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷來(lái)區分。這里的問(wèn)題是,如果所有的歷史頁(yè)面都需要爬取,怎么做。我的想法是模擬鼠標滑過(guò)js觸發(fā)提交加載列表下一部分的請求?;蛘咧苯邮褂胊nyproxy來(lái)分析滑動(dòng)加載的請求,并將請求直接發(fā)送到微信服務(wù)器。但是如何判斷沒(méi)有剩余數據一直存在問(wèn)題。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)需求,以后可能需要。有需要的可以試試。 查看全部

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。上網(wǎng)查了一下,發(fā)現微信公眾號的難點(diǎn)是公眾號文章的鏈接在PC端打不開(kāi)。必須使用微信自帶的瀏覽器(獲取微信客戶(hù)端的補充參數,才能在其他平臺打開(kāi)),給爬蟲(chóng)程序帶來(lái)很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,直接按照大牛的思路做了成java。改造過(guò)程中遇到了很多細節問(wèn)題,分享給大家。
  附上大牛文章的鏈接:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè),思路很詳細。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -----------------------
  該系統的基本思想是在A(yíng)ndroid模擬器上運行微信,模擬器設置一個(gè)代理,通過(guò)代理服務(wù)器攔截微信數據,并將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
  nodejs下載地址:我下載的是windows版本的,直接安裝就可以了。安裝完成后,直接運行C:\Program Files\nodejs\npm.cmd 自動(dòng)配置環(huán)境。
  Anyproxy安裝:上一步安裝好nodejs后,在cmd中直接運行npm install -g anyproxy即可安裝
  網(wǎng)上隨便跟著(zhù)安卓模擬器就行了,很多。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------------
  首先安裝代理服務(wù)器的證書(shū)。Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后即可解決。在 cmd 中執行 anyproxy --root 將安裝證書(shū)。之后,您必須在模擬器上下載證書(shū)。
  然后輸入anyproxy -i 命令開(kāi)啟代理服務(wù)。(記得加參數?。?br />   
  記住這個(gè)ip和端口,然后安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用于顯示http傳輸數據。
  
  點(diǎn)擊上方紅框中的菜單,會(huì )顯示一個(gè)二維碼。使用安卓模擬器掃碼識別。模擬器(手機)將下載證書(shū)并安裝它。
  現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
  
  至此,準備工作基本完成,在模擬器上打開(kāi)微信,開(kāi)通公眾號文章,從剛剛打開(kāi)的web界面就可以看到anyproxy抓取到的數據了:
  
  上面紅框里是微信文章的鏈接,點(diǎn)進(jìn)去查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果一切順利,你就可以下去了。
  這里我們依靠代理服務(wù)來(lái)抓取微信數據,但不能隨便抓取一條數據,自己操作微信。最好手動(dòng)復制。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)候可以使用anyproxy來(lái)攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫做 replaceServerResDataAsync: function(req,res,serverResData,callback)。該方法負責對anyproxy獲得的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚,按照邏輯來(lái)理解就好了,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require(&#39;http&#39;);
11 http.get(&#39;http://xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on(&#39;data&#39;, function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \&#39;(.*?)\&#39;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require(&#39;http&#39;);
36 http.get(&#39;xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on(&#39;data&#39;, function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require(&#39;http&#39;);
65 http.get(&#39;http://xxx/getWxPost&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on(&#39;data&#39;, function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這里是一個(gè)簡(jiǎn)短的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以關(guān)閉。如果被拒絕,則會(huì )觸發(fā)一個(gè)js事件,發(fā)送獲取json數據(下一頁(yè)內容)的??請求。還有公眾號文章的鏈接,以及文章的閱讀量和喜歡的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷來(lái)區分。這里的問(wèn)題是,如果所有的歷史頁(yè)面都需要爬取,怎么做。我的想法是模擬鼠標滑過(guò)js觸發(fā)提交加載列表下一部分的請求?;蛘咧苯邮褂胊nyproxy來(lái)分析滑動(dòng)加載的請求,并將請求直接發(fā)送到微信服務(wù)器。但是如何判斷沒(méi)有剩余數據一直存在問(wèn)題。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)需求,以后可能需要。有需要的可以試試。

querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 148 次瀏覽 ? 2022-01-04 06:16 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。上網(wǎng)查了一下,發(fā)現微信公眾號的難點(diǎn)是公眾號文章的鏈接在PC端打不開(kāi)。必須使用微信自帶的瀏覽器(獲取微信客戶(hù)端的補充參數,才能在其他平臺打開(kāi)),給爬蟲(chóng)程序帶來(lái)很大的麻煩。后來(lái)在知乎上看到了一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,他按照大佬的思路直接做了java。改造過(guò)程中遇到了很多細節問(wèn)題,分享給大家。
  附上大牛的鏈接文章:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè)。這些想法寫(xiě)得很詳細。
  ----------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------
  系統的基本思想是在安卓模擬器上運行微信。模擬器設置代理,通過(guò)代理服務(wù)器攔截微信數據,并將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
  nodejs下載地址:我下載的是windows版本的,直接下載安裝就可以了。安裝完成后直接運行C:\Program Files\nodejs\npm.cmd自動(dòng)配置環(huán)境。
  anyproxy安裝:上一步安裝好nodejs后,在cmd中直接運行npm install -g anyproxy就會(huì )安裝
  互聯(lián)網(wǎng)上只有一個(gè) Android 模擬器,很多。
  ----------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------------------------------
  首先安裝代理服務(wù)器的證書(shū)。 Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后即可解決。在 cmd 中執行 anyproxy --root 將安裝證書(shū)。之后,您必須在模擬器上下載證書(shū)。
  然后輸入anyproxy -i命令開(kāi)啟代理服務(wù)。 (記得加參數?。?br />   
  記住這個(gè)ip和端口,然后安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用于展示http傳輸數據。
  
  點(diǎn)擊上方紅框中的菜單,會(huì )顯示一個(gè)二維碼。使用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
  現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器ip,端口為8001
  
  準備工作到此基本完成。在模擬器上打開(kāi)微信,開(kāi)通公眾號文章。您可以從剛打開(kāi)的網(wǎng)頁(yè)界面看到 anyproxy 捕獲的數據:
  
  上面紅框里是微信文章的鏈接,點(diǎn)進(jìn)去查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果一切順利,你就可以下去了。
  這里我們依靠代理服務(wù)來(lái)抓取微信數據,但是我們不能抓取一條數據,只能自己操作微信。最好手動(dòng)復制。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)候可以使用anyproxy來(lái)攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫replaceServerResDataAsync:function(req,res,serverResData,callback)。該方法負責對anyproxy獲得的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚,按照邏輯來(lái)理解就好了,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require(&#39;http&#39;);
11 http.get(&#39;http://xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on(&#39;data&#39;, function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \&#39;(.*?)\&#39;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require(&#39;http&#39;);
36 http.get(&#39;xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on(&#39;data&#39;, function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require(&#39;http&#39;);
65 http.get(&#39;http://xxx/getWxPost&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on(&#39;data&#39;, function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這里是一個(gè)簡(jiǎn)單的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以關(guān)閉。如果被拒絕,則會(huì )觸發(fā)一個(gè)js事件,發(fā)送獲取json數據(下一頁(yè)內容)的??請求。還有公眾號文章的鏈接,以及文章的閱讀量和喜歡的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷來(lái)區分。這里的問(wèn)題是,如果所有的歷史頁(yè)面都需要爬取,怎么做。我的想法是模擬鼠標滑過(guò)js觸發(fā)提交加載列表下一部分的請求?;蛘咧苯邮褂胊nyproxy分析滑動(dòng)加載請求,直接將請求發(fā)送到微信服務(wù)器。但是如何判斷沒(méi)有剩余數據一直存在問(wèn)題。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)需求,以后可能需要。有需要的可以試試。 查看全部

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。上網(wǎng)查了一下,發(fā)現微信公眾號的難點(diǎn)是公眾號文章的鏈接在PC端打不開(kāi)。必須使用微信自帶的瀏覽器(獲取微信客戶(hù)端的補充參數,才能在其他平臺打開(kāi)),給爬蟲(chóng)程序帶來(lái)很大的麻煩。后來(lái)在知乎上看到了一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,他按照大佬的思路直接做了java。改造過(guò)程中遇到了很多細節問(wèn)題,分享給大家。
  附上大牛的鏈接文章:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè)。這些想法寫(xiě)得很詳細。
  ----------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------
  系統的基本思想是在安卓模擬器上運行微信。模擬器設置代理,通過(guò)代理服務(wù)器攔截微信數據,并將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
  nodejs下載地址:我下載的是windows版本的,直接下載安裝就可以了。安裝完成后直接運行C:\Program Files\nodejs\npm.cmd自動(dòng)配置環(huán)境。
  anyproxy安裝:上一步安裝好nodejs后,在cmd中直接運行npm install -g anyproxy就會(huì )安裝
  互聯(lián)網(wǎng)上只有一個(gè) Android 模擬器,很多。
  ----------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------------------------------
  首先安裝代理服務(wù)器的證書(shū)。 Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后即可解決。在 cmd 中執行 anyproxy --root 將安裝證書(shū)。之后,您必須在模擬器上下載證書(shū)。
  然后輸入anyproxy -i命令開(kāi)啟代理服務(wù)。 (記得加參數?。?br />   
  記住這個(gè)ip和端口,然后安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用于展示http傳輸數據。
  
  點(diǎn)擊上方紅框中的菜單,會(huì )顯示一個(gè)二維碼。使用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
  現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器ip,端口為8001
  
  準備工作到此基本完成。在模擬器上打開(kāi)微信,開(kāi)通公眾號文章。您可以從剛打開(kāi)的網(wǎng)頁(yè)界面看到 anyproxy 捕獲的數據:
  
  上面紅框里是微信文章的鏈接,點(diǎn)進(jìn)去查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果一切順利,你就可以下去了。
  這里我們依靠代理服務(wù)來(lái)抓取微信數據,但是我們不能抓取一條數據,只能自己操作微信。最好手動(dòng)復制。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)候可以使用anyproxy來(lái)攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫replaceServerResDataAsync:function(req,res,serverResData,callback)。該方法負責對anyproxy獲得的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚,按照邏輯來(lái)理解就好了,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require(&#39;http&#39;);
11 http.get(&#39;http://xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on(&#39;data&#39;, function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \&#39;(.*?)\&#39;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require(&#39;http&#39;);
36 http.get(&#39;xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on(&#39;data&#39;, function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require(&#39;http&#39;);
65 http.get(&#39;http://xxx/getWxPost&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on(&#39;data&#39;, function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這里是一個(gè)簡(jiǎn)單的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以關(guān)閉。如果被拒絕,則會(huì )觸發(fā)一個(gè)js事件,發(fā)送獲取json數據(下一頁(yè)內容)的??請求。還有公眾號文章的鏈接,以及文章的閱讀量和喜歡的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷來(lái)區分。這里的問(wèn)題是,如果所有的歷史頁(yè)面都需要爬取,怎么做。我的想法是模擬鼠標滑過(guò)js觸發(fā)提交加載列表下一部分的請求?;蛘咧苯邮褂胊nyproxy分析滑動(dòng)加載請求,直接將請求發(fā)送到微信服務(wù)器。但是如何判斷沒(méi)有剩余數據一直存在問(wèn)題。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)需求,以后可能需要。有需要的可以試試。

querylist采集微信公眾號文章(rjava采集微信公眾號文章的有效性)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 202 次瀏覽 ? 2022-01-03 04:01 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(rjava采集微信公眾號文章的有效性)
  querylist采集微信公眾號文章,大文本、小文本都可以,按詞抓取,點(diǎn)擊率高,方便。
  樓上的沒(méi)有提及全面!有人提到wordtab:
  目前幾個(gè)平臺中,微博爬蟲(chóng)你可以用scrapy,
  既然你那么肯定有效,不妨把數據轉接一下,非對稱(chēng)加密,或者使用hashify、密碼管理。
  推薦你看看rjava博客提到的nodejs微信爬蟲(chóng)
  wordtab,爬取微信公眾號的文章,不限文本類(lèi)型,
  可以使用公眾號熱文爬蟲(chóng)的spider.py,請看博文,自己改動(dòng)注釋和模板功能,
  沒(méi)有人說(shuō)wordtab嗎?-python
  lxml+xpath
  大部分都是需要導入數據庫查詢(xún)的,
  最適合中文的爬蟲(chóng)網(wǎng)站lxml+xpath
  wordtab不錯
  有人說(shuō)wordtab?
  最大的還是lxml+xpath,htmlfield,關(guān)鍵詞,tag,openpyxl如果后端功能都有比較全了,可以考慮beautifulsoup。
  wordtab可以抓取javascript各種網(wǎng)頁(yè)
  wordtab最合適了,beautifulsoup框架,然后直接轉word,
  數據庫操作必須有book_field_tag_meta字段,否則爬到的基本都是有機體。 查看全部

  querylist采集微信公眾號文章(rjava采集微信公眾號文章的有效性)
  querylist采集微信公眾號文章,大文本、小文本都可以,按詞抓取,點(diǎn)擊率高,方便。
  樓上的沒(méi)有提及全面!有人提到wordtab:
  目前幾個(gè)平臺中,微博爬蟲(chóng)你可以用scrapy,
  既然你那么肯定有效,不妨把數據轉接一下,非對稱(chēng)加密,或者使用hashify、密碼管理。
  推薦你看看rjava博客提到的nodejs微信爬蟲(chóng)
  wordtab,爬取微信公眾號的文章,不限文本類(lèi)型,
  可以使用公眾號熱文爬蟲(chóng)的spider.py,請看博文,自己改動(dòng)注釋和模板功能,
  沒(méi)有人說(shuō)wordtab嗎?-python
  lxml+xpath
  大部分都是需要導入數據庫查詢(xún)的,
  最適合中文的爬蟲(chóng)網(wǎng)站lxml+xpath
  wordtab不錯
  有人說(shuō)wordtab?
  最大的還是lxml+xpath,htmlfield,關(guān)鍵詞,tag,openpyxl如果后端功能都有比較全了,可以考慮beautifulsoup。
  wordtab可以抓取javascript各種網(wǎng)頁(yè)
  wordtab最合適了,beautifulsoup框架,然后直接轉word,
  數據庫操作必須有book_field_tag_meta字段,否則爬到的基本都是有機體。

querylist采集微信公眾號文章( 搜狗微信公眾號實(shí)操訓練 )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 140 次瀏覽 ? 2022-01-02 04:12 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(
搜狗微信公眾號實(shí)操訓練
)
  爬取公眾號文章
  項目介紹
  公眾號是我最喜歡的學(xué)習方式之一。我經(jīng)常關(guān)注一些技巧文章進(jìn)行實(shí)踐訓練。所以打算做一段時(shí)間的公眾號爬取文章。
  這里我們使用selenium庫通過(guò)搜狗微信網(wǎng)址獲取相關(guān)文章內容:
  搜狗微信網(wǎng)址
  頁(yè)面詳情
  我們發(fā)現有一個(gè)登錄按鈕可以進(jìn)入頁(yè)面。如果我們不登錄,我們只能查看10頁(yè)的內容。如果內容很多,10頁(yè)是不夠的。
  
  這里我設置睡眠時(shí)間為20秒,微信掃碼登錄;然后我會(huì )進(jìn)行后續的操作。
  driver.find_element_by_id("loginBtn").click()
time.sleep(20) #休眠20秒進(jìn)行微信掃碼登錄操作
  
  接下來(lái)就是輸入我們要搜索的相關(guān)內容文章
  我使用顯示等待。如果超過(guò)10秒沒(méi)有找到對應的內容,則表示不存在。
  input = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.NAME,&#39;query&#39;)))
input.send_keys("python") #模擬輸入
driver.find_element_by_xpath("//input[@class=&#39;swz&#39;]").click()#模擬點(diǎn)擊
  
  最后一步是爬取對應的文章。我們在爬行的時(shí)候,需要專(zhuān)門(mén)去爬行。這里我選擇了官方賬號名中收錄Python這個(gè)詞的賬號。如果找到,就會(huì )被抓取并保存。
  #爬取頁(yè)面所有文章
new_list = driver.find_elements_by_xpath("//li[contains(@id,&#39;sogou_vr_11002601_box&#39;)]")
# print(new_list)
for new in new_list:
#獲取文章賬號
sourse = new.find_elements_by_class_name("account")[0].text
if "python" in sourse:

#獲取文章標題
title = new.find_elements_by_xpath("div[2]/h3/a")[0].text

  完整代碼
<p>from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
import datetime
from selenium.common.exceptions import TimeoutException
import xlwt
class official_accounts:
# #實(shí)例化參數,直接傳入參數
# def __init__(self,name,deep_num):
# self.name = name
# self.deep_num = deep_num

#登錄頁(yè)面
def login_btn(self,name):
global driver
driver = webdriver.Firefox()
driver.get(&#39;https://weixin.sogou.com/&#39;)
driver.find_element_by_id("loginBtn").click()
time.sleep(20) #休眠20秒進(jìn)行微信掃碼登錄操作
input = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.NAME,&#39;query&#39;)))
input.send_keys(name)
driver.find_element_by_xpath("//input[@class=&#39;swz&#39;]").click()
#爬取內容
def get_news(self,name):
global data_total
data = []
time.sleep(1)
new_list = driver.find_elements_by_xpath("//li[contains(@id,&#39;sogou_vr_11002601_box&#39;)]")
# print(new_list)
for new in new_list:
#獲取文章賬號
sourse = new.find_elements_by_class_name("account")[0].text
if name in sourse:
#獲取文章標題
title = new.find_elements_by_xpath("div[2]/h3/a")[0].text

#獲取文章發(fā)表日期
date = new.find_elements_by_xpath("div[2]/div/span")[0].text
# 文章發(fā)表的日期如果較近可能會(huì )顯示“1天前” “12小時(shí)前” “30分鐘前”
# 這里可以用`datetime`模塊根據時(shí)間差求出具體時(shí)間
# 然后解析為`YYYY-MM-DD`格式
if &#39;前&#39; in date:
today = datetime.datetime.today()
if &#39;天&#39; in date:
delta = datetime.timedelta(days=int(date[0]))
elif &#39;小時(shí)&#39; in date:
delta = datetime.timedelta(hours=int(date.replace(&#39;小時(shí)前&#39;, &#39; &#39;)))
else:
delta = datetime.timedelta(minutes=int(date.replace(&#39;分鐘前&#39;, &#39; &#39;)))
date = str((today - delta).strftime(&#39;%Y-%m-%d&#39;))
date = datetime.datetime.strptime(date, &#39;%Y-%m-%d&#39;).strftime(&#39;%Y-%m-%d&#39;)

#獲取文章簡(jiǎn)介
content = new.find_elements_by_xpath("div[2]/p")[0].text

#獲取鏈接
url = new.find_elements_by_xpath("div[2]/h3/a")[0].get_attribute(&#39;href&#39;)

data.append(title)
data.append(date)
data.append(content)
data.append(url)

if data not in data_total:
data_total.append(data)
print(sourse,title,date,content)
print(url)
print(&#39;------&#39;*10)
else:
continue
#寫(xiě)入Excel中
def save(self,data_total,name): #將爬取的信息寫(xiě)入Excel文件
# xlwt.Workbook用來(lái)創(chuàng )建一個(gè)工作表,style_compression=0表示是否被壓縮
con = xlwt.Workbook(encoding=&#39;utf-8&#39;,style_compression=0)
# 添加sheet表格,并允許重復修改
sheet = con.add_sheet("公眾號文字爬取信息",cell_overwrite_ok=True)
colunm = ("title","date","content","url") #定義列名
for i in range(0,4):
sheet.write(0,i,colunm[i])
for i in range(0,len(data_total)-1):
d = data_total[i]
for j in range(0,4):
sheet.write(i+1,j,d[j])
con.save( name +".xls")
print("數據保存成功!")
#定義爬取深度,要爬取多少個(gè)頁(yè)面后就停止
def depth(self,name,deep_num):

self.login_btn(name)

global data_total
data_total = []
self.get_news(name)
d = 1 #定義一個(gè)爬取深度,爬取多少個(gè)頁(yè)面
while d 查看全部

  querylist采集微信公眾號文章(
搜狗微信公眾號實(shí)操訓練
)
  爬取公眾號文章
  項目介紹
  公眾號是我最喜歡的學(xué)習方式之一。我經(jīng)常關(guān)注一些技巧文章進(jìn)行實(shí)踐訓練。所以打算做一段時(shí)間的公眾號爬取文章。
  這里我們使用selenium庫通過(guò)搜狗微信網(wǎng)址獲取相關(guān)文章內容:
  搜狗微信網(wǎng)址
  頁(yè)面詳情
  我們發(fā)現有一個(gè)登錄按鈕可以進(jìn)入頁(yè)面。如果我們不登錄,我們只能查看10頁(yè)的內容。如果內容很多,10頁(yè)是不夠的。
  
  這里我設置睡眠時(shí)間為20秒,微信掃碼登錄;然后我會(huì )進(jìn)行后續的操作。
  driver.find_element_by_id("loginBtn").click()
time.sleep(20) #休眠20秒進(jìn)行微信掃碼登錄操作
  
  接下來(lái)就是輸入我們要搜索的相關(guān)內容文章
  我使用顯示等待。如果超過(guò)10秒沒(méi)有找到對應的內容,則表示不存在。
  input = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.NAME,&#39;query&#39;)))
input.send_keys("python") #模擬輸入
driver.find_element_by_xpath("//input[@class=&#39;swz&#39;]").click()#模擬點(diǎn)擊
  
  最后一步是爬取對應的文章。我們在爬行的時(shí)候,需要專(zhuān)門(mén)去爬行。這里我選擇了官方賬號名中收錄Python這個(gè)詞的賬號。如果找到,就會(huì )被抓取并保存。
  #爬取頁(yè)面所有文章
new_list = driver.find_elements_by_xpath("//li[contains(@id,&#39;sogou_vr_11002601_box&#39;)]")
# print(new_list)
for new in new_list:
#獲取文章賬號
sourse = new.find_elements_by_class_name("account")[0].text
if "python" in sourse:

#獲取文章標題
title = new.find_elements_by_xpath("div[2]/h3/a")[0].text

  完整代碼
<p>from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
import datetime
from selenium.common.exceptions import TimeoutException
import xlwt
class official_accounts:
# #實(shí)例化參數,直接傳入參數
# def __init__(self,name,deep_num):
# self.name = name
# self.deep_num = deep_num

#登錄頁(yè)面
def login_btn(self,name):
global driver
driver = webdriver.Firefox()
driver.get(&#39;https://weixin.sogou.com/&#39;)
driver.find_element_by_id("loginBtn").click()
time.sleep(20) #休眠20秒進(jìn)行微信掃碼登錄操作
input = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.NAME,&#39;query&#39;)))
input.send_keys(name)
driver.find_element_by_xpath("//input[@class=&#39;swz&#39;]").click()
#爬取內容
def get_news(self,name):
global data_total
data = []
time.sleep(1)
new_list = driver.find_elements_by_xpath("//li[contains(@id,&#39;sogou_vr_11002601_box&#39;)]")
# print(new_list)
for new in new_list:
#獲取文章賬號
sourse = new.find_elements_by_class_name("account")[0].text
if name in sourse:
#獲取文章標題
title = new.find_elements_by_xpath("div[2]/h3/a")[0].text

#獲取文章發(fā)表日期
date = new.find_elements_by_xpath("div[2]/div/span")[0].text
# 文章發(fā)表的日期如果較近可能會(huì )顯示“1天前” “12小時(shí)前” “30分鐘前”
# 這里可以用`datetime`模塊根據時(shí)間差求出具體時(shí)間
# 然后解析為`YYYY-MM-DD`格式
if &#39;前&#39; in date:
today = datetime.datetime.today()
if &#39;天&#39; in date:
delta = datetime.timedelta(days=int(date[0]))
elif &#39;小時(shí)&#39; in date:
delta = datetime.timedelta(hours=int(date.replace(&#39;小時(shí)前&#39;, &#39; &#39;)))
else:
delta = datetime.timedelta(minutes=int(date.replace(&#39;分鐘前&#39;, &#39; &#39;)))
date = str((today - delta).strftime(&#39;%Y-%m-%d&#39;))
date = datetime.datetime.strptime(date, &#39;%Y-%m-%d&#39;).strftime(&#39;%Y-%m-%d&#39;)

#獲取文章簡(jiǎn)介
content = new.find_elements_by_xpath("div[2]/p")[0].text

#獲取鏈接
url = new.find_elements_by_xpath("div[2]/h3/a")[0].get_attribute(&#39;href&#39;)

data.append(title)
data.append(date)
data.append(content)
data.append(url)

if data not in data_total:
data_total.append(data)
print(sourse,title,date,content)
print(url)
print(&#39;------&#39;*10)
else:
continue
#寫(xiě)入Excel中
def save(self,data_total,name): #將爬取的信息寫(xiě)入Excel文件
# xlwt.Workbook用來(lái)創(chuàng )建一個(gè)工作表,style_compression=0表示是否被壓縮
con = xlwt.Workbook(encoding=&#39;utf-8&#39;,style_compression=0)
# 添加sheet表格,并允許重復修改
sheet = con.add_sheet("公眾號文字爬取信息",cell_overwrite_ok=True)
colunm = ("title","date","content","url") #定義列名
for i in range(0,4):
sheet.write(0,i,colunm[i])
for i in range(0,len(data_total)-1):
d = data_total[i]
for j in range(0,4):
sheet.write(i+1,j,d[j])
con.save( name +".xls")
print("數據保存成功!")
#定義爬取深度,要爬取多少個(gè)頁(yè)面后就停止
def depth(self,name,deep_num):

self.login_btn(name)

global data_total
data_total = []
self.get_news(name)
d = 1 #定義一個(gè)爬取深度,爬取多少個(gè)頁(yè)面
while d

querylist采集微信公眾號文章(,小編覺(jué)得挺不錯的主要介紹思路,代碼部分請自行解決獲取)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 151 次瀏覽 ? 2022-01-02 02:15 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(,小編覺(jué)得挺不錯的主要介紹思路,代碼部分請自行解決獲取)
  本文文章主要介紹python如何抓取搜狗微信公眾號文章永久鏈接思維分析,小編覺(jué)得還不錯,現分享給大家,給大家參考。跟著(zhù)小編一起來(lái)看看吧。
  本文主要講解思路,代碼部分請自行解決
  獲取搜狗微信當天信息排名
  指定輸入關(guān)鍵字,通過(guò)scrapy抓取公眾號
  登錄微信公眾號鏈接獲取cookie信息
  由于微信公眾平臺模擬登錄尚未解決,需要手動(dòng)登錄實(shí)時(shí)獲取cookie信息
  
  
  
  
  固定鏈接可以在這里轉換
  代碼部分
  def parse(self, response):
item = SougouItem()
item["title"] = response.xpath(&#39;//title/text()&#39;).extract_first()
print("**"*5, item["title"],"**"*5)
name = input("----------請輸入需要搜索的信息:")
print(name)
url = "http://weixin.sogou.com/weixin ... ot%3B
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name":name})
  搜狗微信訪(fǎng)問(wèn)頻率會(huì )過(guò)快,導致需要輸入驗證碼
   def parse_two(self, response):
print(response.url)
name = response.meta["name"]
resp = response.xpath(&#39;//ul[@class="news-list"]/li&#39;)
s = 1
# 判斷url 是否是需要輸入驗證碼
res = re.search("from", response.url) # 需要驗證碼驗證
if res:
print(response.url)
img = response.xpath(&#39;//img/@src&#39;).extract()
print(img)
url_img = "http://weixin.sogou.com/antispider/"+ img[1]
print(url_img)
url_img = requests.get(url_img).content with open("urli.jpg", "wb") as f:
f.write(url_img) # f.close()
img = input("請輸入驗證碼:")
print(img)
url = response.url
r = re.search(r"from=(.*)",url).group(1)
print(r)
postData = {"c":img,"r":r,"v":"5"}
url = "http://weixin.sogou.com/antispider/thank.php"
yield scrapy.FormRequest(url=url, formdata=postData, callback=self.parse_two,meta={"name":name})
# 不需要驗證碼驗證
else:
for res, i in zip(resp, range(1, 10)):
item = SougouItem()
item["url"] = res.xpath(&#39;.//p[1]/a/@href&#39;).extract_first()
item["name"] = name
print("第%d條" % i) # 轉化永久鏈接
headers = {"Host": "mp.weixin.qq.com",
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cookie": "noticeLoginFlag=1; pgv_pvi=5269297152; pt2gguin=o1349184918; RK=ph4smy/QWu; ptcz=f3eb6ede5db921d0ada7f1713e6d1ca516d200fec57d602e677245490fcb7f1e; pgv_pvid=1033302674; o_cookie=1349184918; pac_uid=1_1349184918; ua_id=4nooSvHNkTOjpIpgAAAAAFX9OSNcLApfsluzwfClLW8=; mm_lang=zh_CN; noticeLoginFlag=1; remember_acct=Liangkai318; rewardsn=; wxtokenkey=777; pgv_si=s1944231936; uuid=700c40c965347f0925a8e8fdcc1e003e; ticket=023fc8861356b01527983c2c4765ef80903bf3d7; ticket_id=gh_6923d82780e4; cert=L_cE4aRdaZeDnzao3xEbMkcP3Kwuejoi; data_bizuin=3075391054; bizuin=3208078327; data_ticket=XrzOnrV9Odc80hJLtk8vFjTLI1vd7kfKJ9u+DzvaeeHxZkMXbv9kcWk/Pmqx/9g7; slave_sid=SWRKNmFyZ1NkM002Rk9NR0RRVGY5VFdMd1lXSkExWGtPcWJaREkzQ1BESEcyQkNLVlQ3YnB4OFNoNmtRZzdFdGpnVGlHak9LMjJ5eXBNVEgxZDlZb1BZMnlfN1hKdnJsV0NKallsQW91Zjk5Y3prVjlQRDNGYUdGUWNFNEd6eTRYT1FSOEQxT0MwR01Ja0Vo; slave_user=gh_6923d82780e4; xid=7b2245140217dbb3c5c0a552d46b9664; openid2ticket_oTr5Ot_B4nrDSj14zUxlXg8yrzws=D/B6//xK73BoO+mKE2EAjdcgIXNPw/b5PEDTDWM6t+4="}
respon = requests.get(url=item["url"]).content
gongzhongh = etree.HTML(respon).xpath(&#39;//a[@id="post-user"]/text()&#39;)[0]
# times = etree.HTML(respon).xpath(&#39;//*[@id="post-date"]/text()&#39;)[0]
title_one = etree.HTML(respon).xpath(&#39;//*[@id="activity-name"]/text()&#39;)[0].split()[0]
print(gongzhongh, title_one)
item["tit"] = title_one
item["gongzhongh"] = gongzhongh
# item["times"] = times
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + gongzhongh + "&begin=0&count=5"
# wenzhang_url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
resp = requests.get(url=url, headers=headers).content
print(resp)
faskeids = json.loads(resp.decode("utf-8"))
try:
list_fask = faskeids["list"] except Exception as f:
print("**********[INFO]:請求失敗,登陸失敗, 請重新登陸*************")
return
for fask in list_fask:
fakeid = fask["fakeid"]
nickname = fask["nickname"] if nickname == item["gongzhongh"]:
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + fakeid + "&type=9"
# url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] +"&fakeid=" + fakeid +"&type=9"
resp = requests.get(url=url, headers=headers).content
app = json.loads(resp.decode("utf-8"))["app_msg_list"]
item["aid"] = app["aid"]
item["appmsgid"] = app["appmsgid"]
item["cover"] = app["cover"]
item["digest"] = app["digest"]
item["url_link"] = app["link"]
item["tit"] = app["title"]
print(item)
time.sleep(10) # time.sleep(5)
# dict_wengzhang = json.loads(resp.decode("utf-8"))
# app_msg_list = dict_wengzhang["app_msg_list"]
# print(len(app_msg_list))
# for app in app_msg_list:
# print(app)
# title = app["title"]
# if title == item["tit"]:
# item["url_link"] = app["link"]
# updata_time = app["update_time"]
# item["times"] = time.strftime("%Y-%m-%d %H:%M:%S", updata_time)
# print("最終鏈接為:", item["url_link"])
# yield item
# else:
# print(app["title"], item["tit"])
# print("與所選文章不同放棄")
# # item["tit"] = app["title"]
# # item["url_link"] = app["link"]
# # yield item
# else:
# print(nickname, item["gongzhongh"])
# print("與所選公眾號不一致放棄")
# time.sleep(100)
# yield item
if response.xpath(&#39;//a[@class="np"]&#39;):
s += 1
url = "http://weixin.sogou.com/weixin ... 2Bstr(s) # time.sleep(3)
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name": name})
  以上是python如何抓取搜狗微信公眾號文章永久鏈接思路解析的詳細內容。更多詳情請關(guān)注其他相關(guān)php中文網(wǎng)站文章!
  
  免責聲明:本文由原創(chuàng )發(fā)表于php中文網(wǎng)。轉載請注明出處。感謝您的尊重!如果您有任何問(wèn)題,請聯(lián)系我們 查看全部

  querylist采集微信公眾號文章(,小編覺(jué)得挺不錯的主要介紹思路,代碼部分請自行解決獲取)
  本文文章主要介紹python如何抓取搜狗微信公眾號文章永久鏈接思維分析,小編覺(jué)得還不錯,現分享給大家,給大家參考。跟著(zhù)小編一起來(lái)看看吧。
  本文主要講解思路,代碼部分請自行解決
  獲取搜狗微信當天信息排名
  指定輸入關(guān)鍵字,通過(guò)scrapy抓取公眾號
  登錄微信公眾號鏈接獲取cookie信息
  由于微信公眾平臺模擬登錄尚未解決,需要手動(dòng)登錄實(shí)時(shí)獲取cookie信息
  
  
  
  
  固定鏈接可以在這里轉換
  代碼部分
  def parse(self, response):
item = SougouItem()
item["title"] = response.xpath(&#39;//title/text()&#39;).extract_first()
print("**"*5, item["title"],"**"*5)
name = input("----------請輸入需要搜索的信息:")
print(name)
url = "http://weixin.sogou.com/weixin ... ot%3B
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name":name})
  搜狗微信訪(fǎng)問(wèn)頻率會(huì )過(guò)快,導致需要輸入驗證碼
   def parse_two(self, response):
print(response.url)
name = response.meta["name"]
resp = response.xpath(&#39;//ul[@class="news-list"]/li&#39;)
s = 1
# 判斷url 是否是需要輸入驗證碼
res = re.search("from", response.url) # 需要驗證碼驗證
if res:
print(response.url)
img = response.xpath(&#39;//img/@src&#39;).extract()
print(img)
url_img = "http://weixin.sogou.com/antispider/"+ img[1]
print(url_img)
url_img = requests.get(url_img).content with open("urli.jpg", "wb") as f:
f.write(url_img) # f.close()
img = input("請輸入驗證碼:")
print(img)
url = response.url
r = re.search(r"from=(.*)",url).group(1)
print(r)
postData = {"c":img,"r":r,"v":"5"}
url = "http://weixin.sogou.com/antispider/thank.php"
yield scrapy.FormRequest(url=url, formdata=postData, callback=self.parse_two,meta={"name":name})
# 不需要驗證碼驗證
else:
for res, i in zip(resp, range(1, 10)):
item = SougouItem()
item["url"] = res.xpath(&#39;.//p[1]/a/@href&#39;).extract_first()
item["name"] = name
print("第%d條" % i) # 轉化永久鏈接
headers = {"Host": "mp.weixin.qq.com",
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cookie": "noticeLoginFlag=1; pgv_pvi=5269297152; pt2gguin=o1349184918; RK=ph4smy/QWu; ptcz=f3eb6ede5db921d0ada7f1713e6d1ca516d200fec57d602e677245490fcb7f1e; pgv_pvid=1033302674; o_cookie=1349184918; pac_uid=1_1349184918; ua_id=4nooSvHNkTOjpIpgAAAAAFX9OSNcLApfsluzwfClLW8=; mm_lang=zh_CN; noticeLoginFlag=1; remember_acct=Liangkai318; rewardsn=; wxtokenkey=777; pgv_si=s1944231936; uuid=700c40c965347f0925a8e8fdcc1e003e; ticket=023fc8861356b01527983c2c4765ef80903bf3d7; ticket_id=gh_6923d82780e4; cert=L_cE4aRdaZeDnzao3xEbMkcP3Kwuejoi; data_bizuin=3075391054; bizuin=3208078327; data_ticket=XrzOnrV9Odc80hJLtk8vFjTLI1vd7kfKJ9u+DzvaeeHxZkMXbv9kcWk/Pmqx/9g7; slave_sid=SWRKNmFyZ1NkM002Rk9NR0RRVGY5VFdMd1lXSkExWGtPcWJaREkzQ1BESEcyQkNLVlQ3YnB4OFNoNmtRZzdFdGpnVGlHak9LMjJ5eXBNVEgxZDlZb1BZMnlfN1hKdnJsV0NKallsQW91Zjk5Y3prVjlQRDNGYUdGUWNFNEd6eTRYT1FSOEQxT0MwR01Ja0Vo; slave_user=gh_6923d82780e4; xid=7b2245140217dbb3c5c0a552d46b9664; openid2ticket_oTr5Ot_B4nrDSj14zUxlXg8yrzws=D/B6//xK73BoO+mKE2EAjdcgIXNPw/b5PEDTDWM6t+4="}
respon = requests.get(url=item["url"]).content
gongzhongh = etree.HTML(respon).xpath(&#39;//a[@id="post-user"]/text()&#39;)[0]
# times = etree.HTML(respon).xpath(&#39;//*[@id="post-date"]/text()&#39;)[0]
title_one = etree.HTML(respon).xpath(&#39;//*[@id="activity-name"]/text()&#39;)[0].split()[0]
print(gongzhongh, title_one)
item["tit"] = title_one
item["gongzhongh"] = gongzhongh
# item["times"] = times
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + gongzhongh + "&begin=0&count=5"
# wenzhang_url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
resp = requests.get(url=url, headers=headers).content
print(resp)
faskeids = json.loads(resp.decode("utf-8"))
try:
list_fask = faskeids["list"] except Exception as f:
print("**********[INFO]:請求失敗,登陸失敗, 請重新登陸*************")
return
for fask in list_fask:
fakeid = fask["fakeid"]
nickname = fask["nickname"] if nickname == item["gongzhongh"]:
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + fakeid + "&type=9"
# url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] +"&fakeid=" + fakeid +"&type=9"
resp = requests.get(url=url, headers=headers).content
app = json.loads(resp.decode("utf-8"))["app_msg_list"]
item["aid"] = app["aid"]
item["appmsgid"] = app["appmsgid"]
item["cover"] = app["cover"]
item["digest"] = app["digest"]
item["url_link"] = app["link"]
item["tit"] = app["title"]
print(item)
time.sleep(10) # time.sleep(5)
# dict_wengzhang = json.loads(resp.decode("utf-8"))
# app_msg_list = dict_wengzhang["app_msg_list"]
# print(len(app_msg_list))
# for app in app_msg_list:
# print(app)
# title = app["title"]
# if title == item["tit"]:
# item["url_link"] = app["link"]
# updata_time = app["update_time"]
# item["times"] = time.strftime("%Y-%m-%d %H:%M:%S", updata_time)
# print("最終鏈接為:", item["url_link"])
# yield item
# else:
# print(app["title"], item["tit"])
# print("與所選文章不同放棄")
# # item["tit"] = app["title"]
# # item["url_link"] = app["link"]
# # yield item
# else:
# print(nickname, item["gongzhongh"])
# print("與所選公眾號不一致放棄")
# time.sleep(100)
# yield item
if response.xpath(&#39;//a[@class="np"]&#39;):
s += 1
url = "http://weixin.sogou.com/weixin ... 2Bstr(s) # time.sleep(3)
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name": name})
  以上是python如何抓取搜狗微信公眾號文章永久鏈接思路解析的詳細內容。更多詳情請關(guān)注其他相關(guān)php中文網(wǎng)站文章!
  
  免責聲明:本文由原創(chuàng )發(fā)表于php中文網(wǎng)。轉載請注明出處。感謝您的尊重!如果您有任何問(wèn)題,請聯(lián)系我們

querylist采集微信公眾號文章( 微信公眾號爬蟲(chóng)關(guān)鍵是獲取請求地址,注意:請求是需要cookies參數 )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 167 次瀏覽 ? 2022-01-01 21:03 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(
微信公眾號爬蟲(chóng)關(guān)鍵是獲取請求地址,注意:請求是需要cookies參數
)
  
  微信公眾號爬蟲(chóng)的關(guān)鍵是獲取請求的地址。這個(gè)文章是方法之一。
  登錄自己的公眾號后臺,微信官方平臺,進(jìn)入圖文消息編輯界面,進(jìn)入超鏈接,選擇公眾號文章,
  搜索人民日報等公眾號,會(huì )彈出最新的文章列表。這時(shí)候就可以找到對應的請求了??梢酝ㄟ^(guò)公眾號文章翻頁(yè)找到請求的參數規則。
  注意:請求需要cookies參數,可以復制瀏覽器訪(fǎng)問(wèn)的cookies。代碼如下:(cookies中的關(guān)鍵參數已經(jīng)脫敏為“???”)
  &#39;&#39;&#39; the key is to use cookies&#39;&#39;&#39;
import requests
headers={&#39;User-Agent&#39;:&#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36&#39;,&#39;referer&#39;:&#39;https://mp.weixin.qq.com/cgi-b ... 39%3B}
cookies={&#39;appmsglist_action_3207019504&#39;: &#39;card&#39;, &#39; pgv_info&#39;: &#39;ssid&#39;, &#39; pgv_pvid&#39;: &#39;4778161886&#39;, &#39; RK&#39;: &#39;1KphnCSeRK&#39;, &#39; ptcz&#39;: &#39;4a3ad775ddc10f3d9f50479110d37c6f7d5c7e8b38ebdb1e90207808173ad942&#39;, &#39; rewardsn&#39;: &#39;&#39;, &#39; wxtokenkey&#39;: &#39;777&#39;, &#39; _ga&#39;: &#39;GA1.2.1040497363.1629278077&#39;, &#39; o_cookie&#39;: &#39;???????&#39;, &#39; pac_uid&#39;: &#39;1_???????&#39;, &#39; tvfe_boss_uuid&#39;: &#39;a1a981cb70609f6e&#39;, &#39; vversion_name&#39;: &#39;8.2.95&#39;, &#39; user_id&#39;: &#39;null&#39;, &#39; session_id&#39;: &#39;null&#39;,
&#39; ua_id&#39;: &#39;ZpH4w1C3ipVIqGlHAAAAANiI5kknP2NeaIGodK9Opus&#39;, &#39; wxuin&#39;: &#39;32385700599949&#39;, &#39; mm_lang&#39;: &#39;zh_CN&#39;, &#39; ptui_loginuin&#39;: &#39;???????&#39;, &#39; verifysession&#39;: &#39;h014382c87bb4d29015296cbadb898e8e19aed8e594f786d35bf732285d003ed4c300f3ad957b8e52bf&#39;, &#39; video_omgid&#39;: &#39;&#39;, &#39; uin&#39;: &#39;o0???????&#39;, &#39; iip&#39;: &#39;0&#39;, &#39; mmad_session&#39;: &#39;db8fbb73a2b0a4c41bc175f34a6ad7d79d7245bbd1ba1a04ed6f116b38c7c8b6c4a209839bd7378c4da98642d25827cce39f657a4b128eb2c6658eb64dad90d50adf1bdf73a0fae947e3047a489efcc4cd503f920e2c7f38ac8e4728189d5c2711de1c56c245721266e7088080fefde3&#39;, &#39; ts_uid&#39;: &#39;8844190317&#39;, &#39; sig&#39;: &#39;h01ac912472130166d03e296461b8fba0d24e1a2bbe362cbae1470395802352c863c771017587fdabdb&#39;, &#39; uuid&#39;: &#39;5d8752d7b10e69ca60b82d934f101a8c&#39;, &#39; rand_info&#39;: &#39;CAESIK4WkEF7objSg84LpN/56kispUPwx5XIFkZWGhEmjYpM&#39;, &#39; slave_bizuin&#39;: &#39;3207019504&#39;, &#39; data_bizuin&#39;: &#39;3226019316&#39;, &#39; bizuin&#39;: &#39;3207019504&#39;, &#39; data_ticket&#39;: &#39;DaBODpqknEMzImuPqc7tT2ZR07to0GCNXX9WR2+lfcCOvPl/ZUTGnX5wAkd2yzQn&#39;, &#39; slave_sid&#39;: &#39;eFkzZVJOeXg5aHRIdHFuMlcyaUplT2JBbXVQZk5jYzB1aXM0bENQdFZUMmlwQWFvODVvX0V0MEM4cTdjWGN1NmJsYzFaTXI2YnpQZWNQNHluNjV6N1BMT3B1MWNHYU1kUWVPQU5oYTJ1eTJvb2dpU09oNG5rYk5JMGgyRFV0TnlYUFFMTDRabllhc0RLTXlL&#39;, &#39; slave_user&#39;: &#39;gh_90314c99dc76&#39;, &#39; xid&#39;: &#39;cb00dd5d681ce20868e0ffd778c1863f&#39;}
url=&#39;https://mp.weixin.qq.com/cgi-bin/appmsg&#39;
for page in range(0,5):
page=page*5
#fakeid 為公眾號賬號,此處為人民日報賬號;page實(shí)現翻頁(yè)
data={&#39;action&#39;: &#39;list_ex&#39;, &#39;begin&#39;: page, &#39;count&#39;: &#39;5&#39;, &#39;fakeid&#39;: &#39;MjM5MjAxNDM4MA==&#39;, &#39;type&#39;: &#39;9&#39;, &#39;query&#39;: &#39;&#39;, &#39;token&#39;: &#39;2101561850&#39;, &#39;lang&#39;: &#39;zh_CN&#39;, &#39;f&#39;: &#39;json&#39;, &#39;ajax&#39;: &#39;1&#39;}
res=requests.get(url,headers=headers,params=data,cookies=cookies)
print(res.status_code)
app_msg_list=res.json()[&#39;app_msg_list&#39;]
# print(app_msg_list)
for message in app_msg_list:
link=message[&#39;link&#39;]
title=message[&#39;title&#39;]
print(title,link) 查看全部

  querylist采集微信公眾號文章(
微信公眾號爬蟲(chóng)關(guān)鍵是獲取請求地址,注意:請求是需要cookies參數
)
  
  微信公眾號爬蟲(chóng)的關(guān)鍵是獲取請求的地址。這個(gè)文章是方法之一。
  登錄自己的公眾號后臺,微信官方平臺,進(jìn)入圖文消息編輯界面,進(jìn)入超鏈接,選擇公眾號文章,
  搜索人民日報等公眾號,會(huì )彈出最新的文章列表。這時(shí)候就可以找到對應的請求了??梢酝ㄟ^(guò)公眾號文章翻頁(yè)找到請求的參數規則。
  注意:請求需要cookies參數,可以復制瀏覽器訪(fǎng)問(wèn)的cookies。代碼如下:(cookies中的關(guān)鍵參數已經(jīng)脫敏為“???”)
  &#39;&#39;&#39; the key is to use cookies&#39;&#39;&#39;
import requests
headers={&#39;User-Agent&#39;:&#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36&#39;,&#39;referer&#39;:&#39;https://mp.weixin.qq.com/cgi-b ... 39%3B}
cookies={&#39;appmsglist_action_3207019504&#39;: &#39;card&#39;, &#39; pgv_info&#39;: &#39;ssid&#39;, &#39; pgv_pvid&#39;: &#39;4778161886&#39;, &#39; RK&#39;: &#39;1KphnCSeRK&#39;, &#39; ptcz&#39;: &#39;4a3ad775ddc10f3d9f50479110d37c6f7d5c7e8b38ebdb1e90207808173ad942&#39;, &#39; rewardsn&#39;: &#39;&#39;, &#39; wxtokenkey&#39;: &#39;777&#39;, &#39; _ga&#39;: &#39;GA1.2.1040497363.1629278077&#39;, &#39; o_cookie&#39;: &#39;???????&#39;, &#39; pac_uid&#39;: &#39;1_???????&#39;, &#39; tvfe_boss_uuid&#39;: &#39;a1a981cb70609f6e&#39;, &#39; vversion_name&#39;: &#39;8.2.95&#39;, &#39; user_id&#39;: &#39;null&#39;, &#39; session_id&#39;: &#39;null&#39;,
&#39; ua_id&#39;: &#39;ZpH4w1C3ipVIqGlHAAAAANiI5kknP2NeaIGodK9Opus&#39;, &#39; wxuin&#39;: &#39;32385700599949&#39;, &#39; mm_lang&#39;: &#39;zh_CN&#39;, &#39; ptui_loginuin&#39;: &#39;???????&#39;, &#39; verifysession&#39;: &#39;h014382c87bb4d29015296cbadb898e8e19aed8e594f786d35bf732285d003ed4c300f3ad957b8e52bf&#39;, &#39; video_omgid&#39;: &#39;&#39;, &#39; uin&#39;: &#39;o0???????&#39;, &#39; iip&#39;: &#39;0&#39;, &#39; mmad_session&#39;: &#39;db8fbb73a2b0a4c41bc175f34a6ad7d79d7245bbd1ba1a04ed6f116b38c7c8b6c4a209839bd7378c4da98642d25827cce39f657a4b128eb2c6658eb64dad90d50adf1bdf73a0fae947e3047a489efcc4cd503f920e2c7f38ac8e4728189d5c2711de1c56c245721266e7088080fefde3&#39;, &#39; ts_uid&#39;: &#39;8844190317&#39;, &#39; sig&#39;: &#39;h01ac912472130166d03e296461b8fba0d24e1a2bbe362cbae1470395802352c863c771017587fdabdb&#39;, &#39; uuid&#39;: &#39;5d8752d7b10e69ca60b82d934f101a8c&#39;, &#39; rand_info&#39;: &#39;CAESIK4WkEF7objSg84LpN/56kispUPwx5XIFkZWGhEmjYpM&#39;, &#39; slave_bizuin&#39;: &#39;3207019504&#39;, &#39; data_bizuin&#39;: &#39;3226019316&#39;, &#39; bizuin&#39;: &#39;3207019504&#39;, &#39; data_ticket&#39;: &#39;DaBODpqknEMzImuPqc7tT2ZR07to0GCNXX9WR2+lfcCOvPl/ZUTGnX5wAkd2yzQn&#39;, &#39; slave_sid&#39;: &#39;eFkzZVJOeXg5aHRIdHFuMlcyaUplT2JBbXVQZk5jYzB1aXM0bENQdFZUMmlwQWFvODVvX0V0MEM4cTdjWGN1NmJsYzFaTXI2YnpQZWNQNHluNjV6N1BMT3B1MWNHYU1kUWVPQU5oYTJ1eTJvb2dpU09oNG5rYk5JMGgyRFV0TnlYUFFMTDRabllhc0RLTXlL&#39;, &#39; slave_user&#39;: &#39;gh_90314c99dc76&#39;, &#39; xid&#39;: &#39;cb00dd5d681ce20868e0ffd778c1863f&#39;}
url=&#39;https://mp.weixin.qq.com/cgi-bin/appmsg&#39;
for page in range(0,5):
page=page*5
#fakeid 為公眾號賬號,此處為人民日報賬號;page實(shí)現翻頁(yè)
data={&#39;action&#39;: &#39;list_ex&#39;, &#39;begin&#39;: page, &#39;count&#39;: &#39;5&#39;, &#39;fakeid&#39;: &#39;MjM5MjAxNDM4MA==&#39;, &#39;type&#39;: &#39;9&#39;, &#39;query&#39;: &#39;&#39;, &#39;token&#39;: &#39;2101561850&#39;, &#39;lang&#39;: &#39;zh_CN&#39;, &#39;f&#39;: &#39;json&#39;, &#39;ajax&#39;: &#39;1&#39;}
res=requests.get(url,headers=headers,params=data,cookies=cookies)
print(res.status_code)
app_msg_list=res.json()[&#39;app_msg_list&#39;]
# print(app_msg_list)
for message in app_msg_list:
link=message[&#39;link&#39;]
title=message[&#39;title&#39;]
print(title,link)

querylist采集微信公眾號文章(一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址和采集方法)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 182 次瀏覽 ? 2022-01-01 12:07 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址和采集方法)
  我從2014年開(kāi)始批量做微信公眾號內容采集,最初的目的是為了制造一個(gè)html5垃圾郵件網(wǎng)站。當時(shí),垃圾站采集到達的微信公眾號內容很容易在公眾號傳播。那個(gè)時(shí)候分批的采集特別好做,而采集的入口就是公眾號的歷史新聞頁(yè)面。這個(gè)入口現在還是一樣,只是越來(lái)越難采集。 采集的方法也更新了很多版本。后來(lái)到了2015年,html5垃圾站就不做了。取而代之的是,采集的目標是針對本地新聞資訊公眾號,將前端展示做成一個(gè)app。于是一個(gè)可以自動(dòng)采集公眾號內容的新聞APP就形成了。曾經(jīng)擔心微信技術(shù)升級一天后,采集的內容不可用,我的新聞應用會(huì )失敗。但是隨著(zhù)微信技術(shù)的不斷升級,采集的方法也得到了升級,這讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集查看內容。所以今天整理了一下,決定把采集這個(gè)方法寫(xiě)下來(lái)。我的方法來(lái)自于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。
  本文文章會(huì )持續更新,保證您看到的內容在您看到時(shí)可用。
  首先來(lái)看一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址:
  http://mp.weixin.qq.com/mp/get ... irect
  ========2017 年 1 月 11 日更新==========
  現在根據不同的微信個(gè)人賬號,會(huì )有兩個(gè)不同的歷史消息頁(yè)地址。以下是另一個(gè)歷史消息頁(yè)面的地址。第一種地址的鏈接在anyproxy中會(huì )顯示302跳轉:
  https://mp.weixin.qq.com/mp/pr ... irect
  第一個(gè)鏈接地址的頁(yè)面樣式:
  
  第二個(gè)鏈接地址的頁(yè)面樣式:
  
  根據目前的信息,這兩種頁(yè)面格式在不同的微信賬號中出現不規則。有的微信賬號永遠是第一頁(yè)格式,有的永遠是第二頁(yè)格式。
  上面的鏈接是微信公眾號歷史新聞頁(yè)面的真實(shí)鏈接,但是當我們在瀏覽器中輸入這個(gè)鏈接時(shí),會(huì )顯示:請從微信客戶(hù)端訪(fǎng)問(wèn)。這是因為鏈接地址實(shí)際上需要幾個(gè)參數才能正常顯示內容。我們來(lái)看看一個(gè)可以正常顯示內容的完整鏈接是什么樣子的:
  //第一種鏈接
http://mp.weixin.qq.com/mp/get ... r%3D1
//第二種
http://mp.weixin.qq.com/mp/pro ... r%3D1
  該地址是通過(guò)微信客戶(hù)端打開(kāi)歷史消息頁(yè)面后使用代理服務(wù)器軟件獲取的。這里有幾個(gè)參數:
  action=;__biz=;uin=;key=;devicetype=;version=;lang=;nettype=;scene=;pass_ticket=;wx_header=;
  重要的參數是:__biz;uin=;key=;pass_ticket=;這4個(gè)參數。
  __biz 是公眾號的類(lèi)似id的參數。每個(gè)公眾號都有一個(gè)微信。目前公眾號的biz變動(dòng)的可能性很??;
  剩下的3個(gè)參數與用戶(hù)的id和tokenticket相關(guān)。這3個(gè)參數的值在微信客戶(hù)端生成后會(huì )自動(dòng)添加到地址欄中。所以我們認為采集公眾號必須通過(guò)微信客戶(hù)端。在之前的微信版本中,這3個(gè)參數也可以一次性獲取,在有效期內可以使用多個(gè)公眾號。在當前版本中,每次訪(fǎng)問(wèn)公眾號都會(huì )更改參數值。
  我現在使用的方法只需要關(guān)注__biz參數即可。
  我的采集系統由以下部分組成:
  1、 微信客戶(hù)端:可以是安裝了微信應用的手機,也可以是電腦上的安卓模擬器。在batch采集上測試的ios微信客戶(hù)端崩潰率高于A(yíng)ndroid系統。為了降低成本,我使用了Android模擬器。
  
  2、一個(gè)微信個(gè)人賬號:為了采集內容,不僅需要一個(gè)微信客戶(hù)端,還需要一個(gè)專(zhuān)用于采集的微信個(gè)人賬號,因為這個(gè)微信賬號可以不要做任何其他事情。
  3、本地代理服務(wù)器系統:目前使用的方法是通過(guò)Anyproxy代理服務(wù)器將公眾賬號歷史消息頁(yè)面中文章的列表發(fā)送到自己的服務(wù)器上。具體安裝方法后面會(huì )詳細介紹。
  4、文章列表分析入庫系統:本人使用php語(yǔ)言編寫(xiě),下篇文章將詳細介紹如何分析文章列表并建立采集 queue 實(shí)現批量采集內容。
  步驟
  一、 安裝模擬器或使用手機安裝微信客戶(hù)端,申請微信個(gè)人賬號并登錄應用。這個(gè)就不多介紹了,大家自己做。
  二、代理服務(wù)器系統安裝
  目前我使用 Anyproxy、AnyProxy。這個(gè)軟件的特點(diǎn)是可以獲取https鏈接的內容。 2016年初,微信公眾號和微信文章開(kāi)始使用https鏈接。而Anyproxy可以通過(guò)修改規則配置,在公眾號頁(yè)面插入腳本代碼。下面將介紹安裝和配置過(guò)程。
  1、安裝 NodeJS
  2、在命令行或終端運行npm install -g anyproxy,mac系統需要添加sudo;
  3、生成RootCA,https需要這個(gè)證書(shū):運行命令sudo anyproxy --root(windows可能不需要sudo);
  4、啟動(dòng)anyproxy運行命令:sudo anyproxy -i;參數-i表示解析HTTPS;
  5、安裝證書(shū),在手機或者安卓模擬器安裝證書(shū):
  6、 設置代理:安卓模擬器的代理服務(wù)器地址為wifi鏈接的網(wǎng)關(guān)。通過(guò)dhcp設置為static后就可以看到網(wǎng)關(guān)地址了。閱讀后不要忘記將其設置為自動(dòng)。手機中的代理服務(wù)器地址是運行anyproxy的電腦的ip地址。代理服務(wù)器默認端口為8001;
  
  現在打開(kāi)微信,點(diǎn)擊任意一個(gè)公眾號歷史消息或者文章,就可以看到在終端滾動(dòng)的響應碼。如果沒(méi)有出現,請檢查手機的代理設置是否正確。
  
  現在打開(kāi)瀏覽器地址localhost:8002,可以看到anyproxy的web界面。微信點(diǎn)擊打開(kāi)歷史消息頁(yè)面,然后查看瀏覽器的網(wǎng)頁(yè)界面,歷史消息頁(yè)面的地址會(huì )滾動(dòng)。
  
  /mp/getmasssendmsg開(kāi)頭的網(wǎng)址是微信歷史消息頁(yè)面。左邊的小鎖表示這個(gè)頁(yè)面是 https 加密的?,F在我們點(diǎn)擊這一行;
  ========2017 年 1 月 11 日更新==========
  有些以/mp/getmasssendmsg開(kāi)頭的微信賬號會(huì )出現302跳轉到/mp/profile_ext?action=home開(kāi)頭的地址。所以點(diǎn)擊這個(gè)地址可以看到內容。
  
  如果右側出現html文件內容,則表示解密成功。如果沒(méi)有內容,請檢查anyproxy運行方式是否有參數i,是否生成了ca證書(shū),是否在手機上正確安裝了證書(shū)。
  現在我們手機里的所有內容都可以明文通過(guò)代理服務(wù)器了。接下來(lái)我們需要修改一下代理服務(wù)器的配置,才能獲取公眾號的內容。
  一、找到配置文件:
  配置文件在mac系統中的位置是/usr/local/lib/node_modules/anyproxy/lib/;對于windows系統,不知道還請見(jiàn)諒。應該可以根據類(lèi)似mac的文件夾地址找到這個(gè)目錄。
  二、修改文件rule_default.js
  找到 replaceServerResDataAsync: function(req,res,serverResData,callback) 函數
  修改函數內容(請注意詳細閱讀注釋?zhuān)@里只是介紹原理,理解后根據自己的情況修改內容):
  ========2017 年 1 月 11 日更新==========
  因為有兩種頁(yè)面格式,相同的頁(yè)面格式總是在不同的微信賬號中顯示,但是為了兼容兩種頁(yè)面格式,下面的代碼會(huì )保留兩種頁(yè)面格式的判斷。您也可以按照從您自己的頁(yè)面表單中刪除 li
  replaceServerResDataAsync: function(req,res,serverResData,callback){
if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
if(serverResData.toString() !== ""){
try {//防止報錯退出程序
var reg = /msgList = (.*?);\r\n/;//定義歷史消息正則匹配規則
var ret = reg.exec(serverResData.toString());//轉換變量為string
HttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
var http = require(&#39;http&#39;);
http.get(&#39;http://xxx.com/getWxHis.php&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
res.on(&#39;data&#39;, function(chunk){
callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
})
});
}catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
try {
var json = JSON.parse(serverResData.toString());
if (json.general_msg_list != []) {
HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
}
}catch(e){
console.log(e);//錯誤捕捉
}
callback(serverResData);//直接返回第二頁(yè)json內容
}
}
}else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
try {
var reg = /var msgList = \&#39;(.*?)\&#39;;\r\n/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
var ret = reg.exec(serverResData.toString());//轉換變量為string
HttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
var http = require(&#39;http&#39;);
http.get(&#39;http://xxx.com/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
res.on(&#39;data&#39;, function(chunk){
callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
})
});
}catch(e){
callback(serverResData);
}
}else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
try {
var json = JSON.parse(serverResData.toString());
if (json.general_msg_list != []) {
HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
}
}catch(e){
console.log(e);
}
callback(serverResData);
}else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
try {
HttpPost(serverResData,req.url,"getMsgExt.php");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
}catch(e){
}
callback(serverResData);
}else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
try {
var http = require(&#39;http&#39;);
http.get(&#39;http://xxx.com/getWxPost.php&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
res.on(&#39;data&#39;, function(chunk){
callback(chunk+serverResData);
})
});
}catch(e){
callback(serverResData);
}
}else{
callback(serverResData);
}
},
  以上代碼是使用anyproxy修改返回頁(yè)面內容、向頁(yè)面注入腳本、將頁(yè)面內容發(fā)送到服務(wù)器的功能。利用這個(gè)原理批量處理采集公眾號內容和閱讀量。該腳本中自定義了一個(gè)函數,詳細說(shuō)明如下:
  在 rule_default.js 文件末尾添加以下代碼:
  function HttpPost(str,url,path) {//將json發(fā)送到服務(wù)器,str為json內容,url為歷史消息頁(yè)面地址,path是接收程序的路徑和文件名
var http = require(&#39;http&#39;);
var data = {
str: encodeURIComponent(str),
url: encodeURIComponent(url)
};
content = require(&#39;querystring&#39;).stringify(data);
var options = {
method: "POST",
host: "www.xxx.com",//注意沒(méi)有http://,這是服務(wù)器的域名。
port: 80,
path: path,//接收程序的路徑和文件名
headers: {
&#39;Content-Type&#39;: &#39;application/x-www-form-urlencoded; charset=UTF-8&#39;,
"Content-Length": content.length
}
};
var req = http.request(options, function (res) {
res.setEncoding(&#39;utf8&#39;);
res.on(&#39;data&#39;, function (chunk) {
console.log(&#39;BODY: &#39; + chunk);
});
});
req.on(&#39;error&#39;, function (e) {
console.log(&#39;problem with request: &#39; + e.message);
});
req.write(content);
req.end();
}
  以上是規則修改的主要部分。您需要將json內容發(fā)送到您自己的服務(wù)器,并從服務(wù)器獲取到下一頁(yè)的跳轉地址。這涉及到四個(gè)php文件:getMsgJson.php、getMsgExt.php、getWxHis.php、getWxPost.php
  在詳細介紹這4個(gè)php文件之前,為了提高采集系統性能,降低崩潰率,我們還可以做一些修改:
  Android模擬器經(jīng)常訪(fǎng)問(wèn)一些地址,會(huì )導致anyproxy崩潰,找到函數replaceRequestOption:function(req,option),修改函數內容:
  replaceRequestOption : function(req,option){
var newOption = option;
if(/google/i.test(newOption.headers.host)){
newOption.hostname = "www.baidu.com";
newOption.port = "80";
}
return newOption;
},
  以上是anyproxy的規則文件的修改配置。配置修改完成后,重啟anyproxy。在mac系統下,按control+c中斷程序,然后輸入命令sudo anyproxy -i啟動(dòng);如果報錯,程序可能無(wú)法干凈退出,端口被占用。這時(shí)候輸入命令ps -a查看占用的pid,然后輸入命令“kill -9 pid”將pid替換為查詢(xún)到的pid號。殺掉進(jìn)程后,就可以啟動(dòng)anyproxy了。再次請原諒我不熟悉windows命令。
  接下來(lái)詳細介紹服務(wù)器端接收程序的設計原理:
 ?。ㄒ韵麓a不能直接使用,只介紹原理,部分需要根據自己的服務(wù)器數據庫框架編寫(xiě))
  1、getMsgJson.php:該程序負責接收歷史消息的json,解析并存入數據庫
<p> 查看全部

  querylist采集微信公眾號文章(一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址和采集方法)
  我從2014年開(kāi)始批量做微信公眾號內容采集,最初的目的是為了制造一個(gè)html5垃圾郵件網(wǎng)站。當時(shí),垃圾站采集到達的微信公眾號內容很容易在公眾號傳播。那個(gè)時(shí)候分批的采集特別好做,而采集的入口就是公眾號的歷史新聞頁(yè)面。這個(gè)入口現在還是一樣,只是越來(lái)越難采集。 采集的方法也更新了很多版本。后來(lái)到了2015年,html5垃圾站就不做了。取而代之的是,采集的目標是針對本地新聞資訊公眾號,將前端展示做成一個(gè)app。于是一個(gè)可以自動(dòng)采集公眾號內容的新聞APP就形成了。曾經(jīng)擔心微信技術(shù)升級一天后,采集的內容不可用,我的新聞應用會(huì )失敗。但是隨著(zhù)微信技術(shù)的不斷升級,采集的方法也得到了升級,這讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集查看內容。所以今天整理了一下,決定把采集這個(gè)方法寫(xiě)下來(lái)。我的方法來(lái)自于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。
  本文文章會(huì )持續更新,保證您看到的內容在您看到時(shí)可用。
  首先來(lái)看一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址:
  http://mp.weixin.qq.com/mp/get ... irect
  ========2017 年 1 月 11 日更新==========
  現在根據不同的微信個(gè)人賬號,會(huì )有兩個(gè)不同的歷史消息頁(yè)地址。以下是另一個(gè)歷史消息頁(yè)面的地址。第一種地址的鏈接在anyproxy中會(huì )顯示302跳轉:
  https://mp.weixin.qq.com/mp/pr ... irect
  第一個(gè)鏈接地址的頁(yè)面樣式:
  
  第二個(gè)鏈接地址的頁(yè)面樣式:
  
  根據目前的信息,這兩種頁(yè)面格式在不同的微信賬號中出現不規則。有的微信賬號永遠是第一頁(yè)格式,有的永遠是第二頁(yè)格式。
  上面的鏈接是微信公眾號歷史新聞頁(yè)面的真實(shí)鏈接,但是當我們在瀏覽器中輸入這個(gè)鏈接時(shí),會(huì )顯示:請從微信客戶(hù)端訪(fǎng)問(wèn)。這是因為鏈接地址實(shí)際上需要幾個(gè)參數才能正常顯示內容。我們來(lái)看看一個(gè)可以正常顯示內容的完整鏈接是什么樣子的:
  //第一種鏈接
http://mp.weixin.qq.com/mp/get ... r%3D1
//第二種
http://mp.weixin.qq.com/mp/pro ... r%3D1
  該地址是通過(guò)微信客戶(hù)端打開(kāi)歷史消息頁(yè)面后使用代理服務(wù)器軟件獲取的。這里有幾個(gè)參數:
  action=;__biz=;uin=;key=;devicetype=;version=;lang=;nettype=;scene=;pass_ticket=;wx_header=;
  重要的參數是:__biz;uin=;key=;pass_ticket=;這4個(gè)參數。
  __biz 是公眾號的類(lèi)似id的參數。每個(gè)公眾號都有一個(gè)微信。目前公眾號的biz變動(dòng)的可能性很??;
  剩下的3個(gè)參數與用戶(hù)的id和tokenticket相關(guān)。這3個(gè)參數的值在微信客戶(hù)端生成后會(huì )自動(dòng)添加到地址欄中。所以我們認為采集公眾號必須通過(guò)微信客戶(hù)端。在之前的微信版本中,這3個(gè)參數也可以一次性獲取,在有效期內可以使用多個(gè)公眾號。在當前版本中,每次訪(fǎng)問(wèn)公眾號都會(huì )更改參數值。
  我現在使用的方法只需要關(guān)注__biz參數即可。
  我的采集系統由以下部分組成:
  1、 微信客戶(hù)端:可以是安裝了微信應用的手機,也可以是電腦上的安卓模擬器。在batch采集上測試的ios微信客戶(hù)端崩潰率高于A(yíng)ndroid系統。為了降低成本,我使用了Android模擬器。
  
  2、一個(gè)微信個(gè)人賬號:為了采集內容,不僅需要一個(gè)微信客戶(hù)端,還需要一個(gè)專(zhuān)用于采集的微信個(gè)人賬號,因為這個(gè)微信賬號可以不要做任何其他事情。
  3、本地代理服務(wù)器系統:目前使用的方法是通過(guò)Anyproxy代理服務(wù)器將公眾賬號歷史消息頁(yè)面中文章的列表發(fā)送到自己的服務(wù)器上。具體安裝方法后面會(huì )詳細介紹。
  4、文章列表分析入庫系統:本人使用php語(yǔ)言編寫(xiě),下篇文章將詳細介紹如何分析文章列表并建立采集 queue 實(shí)現批量采集內容。
  步驟
  一、 安裝模擬器或使用手機安裝微信客戶(hù)端,申請微信個(gè)人賬號并登錄應用。這個(gè)就不多介紹了,大家自己做。
  二、代理服務(wù)器系統安裝
  目前我使用 Anyproxy、AnyProxy。這個(gè)軟件的特點(diǎn)是可以獲取https鏈接的內容。 2016年初,微信公眾號和微信文章開(kāi)始使用https鏈接。而Anyproxy可以通過(guò)修改規則配置,在公眾號頁(yè)面插入腳本代碼。下面將介紹安裝和配置過(guò)程。
  1、安裝 NodeJS
  2、在命令行或終端運行npm install -g anyproxy,mac系統需要添加sudo;
  3、生成RootCA,https需要這個(gè)證書(shū):運行命令sudo anyproxy --root(windows可能不需要sudo);
  4、啟動(dòng)anyproxy運行命令:sudo anyproxy -i;參數-i表示解析HTTPS;
  5、安裝證書(shū),在手機或者安卓模擬器安裝證書(shū):
  6、 設置代理:安卓模擬器的代理服務(wù)器地址為wifi鏈接的網(wǎng)關(guān)。通過(guò)dhcp設置為static后就可以看到網(wǎng)關(guān)地址了。閱讀后不要忘記將其設置為自動(dòng)。手機中的代理服務(wù)器地址是運行anyproxy的電腦的ip地址。代理服務(wù)器默認端口為8001;
  
  現在打開(kāi)微信,點(diǎn)擊任意一個(gè)公眾號歷史消息或者文章,就可以看到在終端滾動(dòng)的響應碼。如果沒(méi)有出現,請檢查手機的代理設置是否正確。
  
  現在打開(kāi)瀏覽器地址localhost:8002,可以看到anyproxy的web界面。微信點(diǎn)擊打開(kāi)歷史消息頁(yè)面,然后查看瀏覽器的網(wǎng)頁(yè)界面,歷史消息頁(yè)面的地址會(huì )滾動(dòng)。
  
  /mp/getmasssendmsg開(kāi)頭的網(wǎng)址是微信歷史消息頁(yè)面。左邊的小鎖表示這個(gè)頁(yè)面是 https 加密的?,F在我們點(diǎn)擊這一行;
  ========2017 年 1 月 11 日更新==========
  有些以/mp/getmasssendmsg開(kāi)頭的微信賬號會(huì )出現302跳轉到/mp/profile_ext?action=home開(kāi)頭的地址。所以點(diǎn)擊這個(gè)地址可以看到內容。
  
  如果右側出現html文件內容,則表示解密成功。如果沒(méi)有內容,請檢查anyproxy運行方式是否有參數i,是否生成了ca證書(shū),是否在手機上正確安裝了證書(shū)。
  現在我們手機里的所有內容都可以明文通過(guò)代理服務(wù)器了。接下來(lái)我們需要修改一下代理服務(wù)器的配置,才能獲取公眾號的內容。
  一、找到配置文件:
  配置文件在mac系統中的位置是/usr/local/lib/node_modules/anyproxy/lib/;對于windows系統,不知道還請見(jiàn)諒。應該可以根據類(lèi)似mac的文件夾地址找到這個(gè)目錄。
  二、修改文件rule_default.js
  找到 replaceServerResDataAsync: function(req,res,serverResData,callback) 函數
  修改函數內容(請注意詳細閱讀注釋?zhuān)@里只是介紹原理,理解后根據自己的情況修改內容):
  ========2017 年 1 月 11 日更新==========
  因為有兩種頁(yè)面格式,相同的頁(yè)面格式總是在不同的微信賬號中顯示,但是為了兼容兩種頁(yè)面格式,下面的代碼會(huì )保留兩種頁(yè)面格式的判斷。您也可以按照從您自己的頁(yè)面表單中刪除 li
  replaceServerResDataAsync: function(req,res,serverResData,callback){
if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
if(serverResData.toString() !== ""){
try {//防止報錯退出程序
var reg = /msgList = (.*?);\r\n/;//定義歷史消息正則匹配規則
var ret = reg.exec(serverResData.toString());//轉換變量為string
HttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
var http = require(&#39;http&#39;);
http.get(&#39;http://xxx.com/getWxHis.php&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
res.on(&#39;data&#39;, function(chunk){
callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
})
});
}catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
try {
var json = JSON.parse(serverResData.toString());
if (json.general_msg_list != []) {
HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
}
}catch(e){
console.log(e);//錯誤捕捉
}
callback(serverResData);//直接返回第二頁(yè)json內容
}
}
}else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
try {
var reg = /var msgList = \&#39;(.*?)\&#39;;\r\n/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
var ret = reg.exec(serverResData.toString());//轉換變量為string
HttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
var http = require(&#39;http&#39;);
http.get(&#39;http://xxx.com/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
res.on(&#39;data&#39;, function(chunk){
callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
})
});
}catch(e){
callback(serverResData);
}
}else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
try {
var json = JSON.parse(serverResData.toString());
if (json.general_msg_list != []) {
HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
}
}catch(e){
console.log(e);
}
callback(serverResData);
}else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
try {
HttpPost(serverResData,req.url,"getMsgExt.php");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
}catch(e){
}
callback(serverResData);
}else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
try {
var http = require(&#39;http&#39;);
http.get(&#39;http://xxx.com/getWxPost.php&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
res.on(&#39;data&#39;, function(chunk){
callback(chunk+serverResData);
})
});
}catch(e){
callback(serverResData);
}
}else{
callback(serverResData);
}
},
  以上代碼是使用anyproxy修改返回頁(yè)面內容、向頁(yè)面注入腳本、將頁(yè)面內容發(fā)送到服務(wù)器的功能。利用這個(gè)原理批量處理采集公眾號內容和閱讀量。該腳本中自定義了一個(gè)函數,詳細說(shuō)明如下:
  在 rule_default.js 文件末尾添加以下代碼:
  function HttpPost(str,url,path) {//將json發(fā)送到服務(wù)器,str為json內容,url為歷史消息頁(yè)面地址,path是接收程序的路徑和文件名
var http = require(&#39;http&#39;);
var data = {
str: encodeURIComponent(str),
url: encodeURIComponent(url)
};
content = require(&#39;querystring&#39;).stringify(data);
var options = {
method: "POST",
host: "www.xxx.com",//注意沒(méi)有http://,這是服務(wù)器的域名。
port: 80,
path: path,//接收程序的路徑和文件名
headers: {
&#39;Content-Type&#39;: &#39;application/x-www-form-urlencoded; charset=UTF-8&#39;,
"Content-Length": content.length
}
};
var req = http.request(options, function (res) {
res.setEncoding(&#39;utf8&#39;);
res.on(&#39;data&#39;, function (chunk) {
console.log(&#39;BODY: &#39; + chunk);
});
});
req.on(&#39;error&#39;, function (e) {
console.log(&#39;problem with request: &#39; + e.message);
});
req.write(content);
req.end();
}
  以上是規則修改的主要部分。您需要將json內容發(fā)送到您自己的服務(wù)器,并從服務(wù)器獲取到下一頁(yè)的跳轉地址。這涉及到四個(gè)php文件:getMsgJson.php、getMsgExt.php、getWxHis.php、getWxPost.php
  在詳細介紹這4個(gè)php文件之前,為了提高采集系統性能,降低崩潰率,我們還可以做一些修改:
  Android模擬器經(jīng)常訪(fǎng)問(wèn)一些地址,會(huì )導致anyproxy崩潰,找到函數replaceRequestOption:function(req,option),修改函數內容:
  replaceRequestOption : function(req,option){
var newOption = option;
if(/google/i.test(newOption.headers.host)){
newOption.hostname = "www.baidu.com";
newOption.port = "80";
}
return newOption;
},
  以上是anyproxy的規則文件的修改配置。配置修改完成后,重啟anyproxy。在mac系統下,按control+c中斷程序,然后輸入命令sudo anyproxy -i啟動(dòng);如果報錯,程序可能無(wú)法干凈退出,端口被占用。這時(shí)候輸入命令ps -a查看占用的pid,然后輸入命令“kill -9 pid”將pid替換為查詢(xún)到的pid號。殺掉進(jìn)程后,就可以啟動(dòng)anyproxy了。再次請原諒我不熟悉windows命令。
  接下來(lái)詳細介紹服務(wù)器端接收程序的設計原理:
 ?。ㄒ韵麓a不能直接使用,只介紹原理,部分需要根據自己的服務(wù)器數據庫框架編寫(xiě))
  1、getMsgJson.php:該程序負責接收歷史消息的json,解析并存入數據庫
<p>

querylist采集微信公眾號文章(爬取所有關(guān)于python的公眾號文章,你了解多少? )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 171 次瀏覽 ? 2021-12-31 17:22 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(爬取所有關(guān)于python的公眾號文章,你了解多少?
)
  前言
  本文中的文字圖片過(guò)濾網(wǎng)絡(luò )可用于學(xué)習、交流,不具有任何商業(yè)用途。如果您有任何問(wèn)題,請聯(lián)系我們進(jìn)行處理。
  文章為基礎開(kāi)發(fā)環(huán)境爬取兩個(gè)公眾號:
  1.抓取所有 文章
  2、爬取所有關(guān)于python的公眾號文章
  爬取 文章
  1、登錄公眾號后點(diǎn)擊圖片和文字
  
  2、打開(kāi)開(kāi)發(fā)者工具
  
  3、點(diǎn)擊超鏈接
  
  加載相關(guān)數據時(shí),有一個(gè)數據包,包括文章標題、鏈接、摘要、發(fā)布時(shí)間等,你也可以選擇其他公眾號進(jìn)行爬取,但這需要你有一個(gè)微信公眾號。
  添加cookie
  import pprint
import time
import requests
import csv
f = open(&#39;青燈公眾號文章.csv&#39;, mode=&#39;a&#39;, encoding=&#39;utf-8&#39;, newline=&#39;&#39;)
csv_writer = csv.DictWriter(f, fieldnames=[&#39;標題&#39;, &#39;文章發(fā)布時(shí)間&#39;, &#39;文章地址&#39;])
csv_writer.writeheader()
for page in range(0, 40, 5):
url = f&#39;https://mp.weixin.qq.com/cgi-b ... in%3D{page}&count=5&fakeid=&type=9&query=&token=1252678642&lang=zh_CN&f=json&ajax=1&#39;
headers = {
&#39;cookie&#39;: &#39;加cookie&#39;,
&#39;referer&#39;: &#39;https://mp.weixin.qq.com/cgi-b ... 39%3B,
&#39;user-agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36&#39;,
}
response = requests.get(url=url, headers=headers)
html_data = response.json()
pprint.pprint(response.json())
lis = html_data[&#39;app_msg_list&#39;]
for li in lis:
title = li[&#39;title&#39;]
link_url = li[&#39;link&#39;]
update_time = li[&#39;update_time&#39;]
timeArray = time.localtime(int(update_time))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
&#39;標題&#39;: title,
&#39;文章發(fā)布時(shí)間&#39;: otherStyleTime,
&#39;文章地址&#39;: link_url,
}
csv_writer.writerow(dit)
print(dit)
  爬取所有關(guān)于python的公眾號文章
  1、搜狗搜索python選擇微信
  
  注意:如果不登錄,只能抓取前十頁(yè)數據。登錄后可以抓取2W多篇文章文章。
  2.直接爬取靜態(tài)網(wǎng)頁(yè)的標題、公眾號、文章地址、發(fā)帖時(shí)間。
  import time
import requests
import parsel
import csv
f = open(&#39;公眾號文章.csv&#39;, mode=&#39;a&#39;, encoding=&#39;utf-8&#39;, newline=&#39;&#39;)
csv_writer = csv.DictWriter(f, fieldnames=[&#39;標題&#39;, &#39;公眾號&#39;, &#39;文章發(fā)布時(shí)間&#39;, &#39;文章地址&#39;])
csv_writer.writeheader()
for page in range(1, 2447):
url = f&#39;https://weixin.sogou.com/weixi ... ge%3D{page}&ie=utf8&#39;
headers = {
&#39;Cookie&#39;: &#39;自己的cookie&#39;,
&#39;Host&#39;: &#39;weixin.sogou.com&#39;,
&#39;Referer&#39;: &#39;https://www.sogou.com/web%3Fqu ... 39%3B,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36&#39;,
}
response = requests.get(url=url, headers=headers)
selector = parsel.Selector(response.text)
lis = selector.css(&#39;.news-list li&#39;)
for li in lis:
title_list = li.css(&#39;.txt-box h3 a::text&#39;).getall()
num = len(title_list)
if num == 1:
title_str = &#39;python&#39; + title_list[0]
else:
title_str = &#39;python&#39;.join(title_list)
href = li.css(&#39;.txt-box h3 a::attr(href)&#39;).get()
article_url = &#39;https://weixin.sogou.com&#39; + href
name = li.css(&#39;.s-p a::text&#39;).get()
date = li.css(&#39;.s-p::attr(t)&#39;).get()
timeArray = time.localtime(int(date))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
&#39;標題&#39;: title_str,
&#39;公眾號&#39;: name,
&#39;文章發(fā)布時(shí)間&#39;: otherStyleTime,
&#39;文章地址&#39;: article_url,
}
csv_writer.writerow(dit)
print(title_str, name, otherStyleTime, article_url)
   查看全部

  querylist采集微信公眾號文章(爬取所有關(guān)于python的公眾號文章,你了解多少?
)
  前言
  本文中的文字圖片過(guò)濾網(wǎng)絡(luò )可用于學(xué)習、交流,不具有任何商業(yè)用途。如果您有任何問(wèn)題,請聯(lián)系我們進(jìn)行處理。
  文章為基礎開(kāi)發(fā)環(huán)境爬取兩個(gè)公眾號:
  1.抓取所有 文章
  2、爬取所有關(guān)于python的公眾號文章
  爬取 文章
  1、登錄公眾號后點(diǎn)擊圖片和文字
  
  2、打開(kāi)開(kāi)發(fā)者工具
  
  3、點(diǎn)擊超鏈接
  
  加載相關(guān)數據時(shí),有一個(gè)數據包,包括文章標題、鏈接、摘要、發(fā)布時(shí)間等,你也可以選擇其他公眾號進(jìn)行爬取,但這需要你有一個(gè)微信公眾號。
  添加cookie
  import pprint
import time
import requests
import csv
f = open(&#39;青燈公眾號文章.csv&#39;, mode=&#39;a&#39;, encoding=&#39;utf-8&#39;, newline=&#39;&#39;)
csv_writer = csv.DictWriter(f, fieldnames=[&#39;標題&#39;, &#39;文章發(fā)布時(shí)間&#39;, &#39;文章地址&#39;])
csv_writer.writeheader()
for page in range(0, 40, 5):
url = f&#39;https://mp.weixin.qq.com/cgi-b ... in%3D{page}&count=5&fakeid=&type=9&query=&token=1252678642&lang=zh_CN&f=json&ajax=1&#39;
headers = {
&#39;cookie&#39;: &#39;加cookie&#39;,
&#39;referer&#39;: &#39;https://mp.weixin.qq.com/cgi-b ... 39%3B,
&#39;user-agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36&#39;,
}
response = requests.get(url=url, headers=headers)
html_data = response.json()
pprint.pprint(response.json())
lis = html_data[&#39;app_msg_list&#39;]
for li in lis:
title = li[&#39;title&#39;]
link_url = li[&#39;link&#39;]
update_time = li[&#39;update_time&#39;]
timeArray = time.localtime(int(update_time))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
&#39;標題&#39;: title,
&#39;文章發(fā)布時(shí)間&#39;: otherStyleTime,
&#39;文章地址&#39;: link_url,
}
csv_writer.writerow(dit)
print(dit)
  爬取所有關(guān)于python的公眾號文章
  1、搜狗搜索python選擇微信
  
  注意:如果不登錄,只能抓取前十頁(yè)數據。登錄后可以抓取2W多篇文章文章。
  2.直接爬取靜態(tài)網(wǎng)頁(yè)的標題、公眾號、文章地址、發(fā)帖時(shí)間。
  import time
import requests
import parsel
import csv
f = open(&#39;公眾號文章.csv&#39;, mode=&#39;a&#39;, encoding=&#39;utf-8&#39;, newline=&#39;&#39;)
csv_writer = csv.DictWriter(f, fieldnames=[&#39;標題&#39;, &#39;公眾號&#39;, &#39;文章發(fā)布時(shí)間&#39;, &#39;文章地址&#39;])
csv_writer.writeheader()
for page in range(1, 2447):
url = f&#39;https://weixin.sogou.com/weixi ... ge%3D{page}&ie=utf8&#39;
headers = {
&#39;Cookie&#39;: &#39;自己的cookie&#39;,
&#39;Host&#39;: &#39;weixin.sogou.com&#39;,
&#39;Referer&#39;: &#39;https://www.sogou.com/web%3Fqu ... 39%3B,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36&#39;,
}
response = requests.get(url=url, headers=headers)
selector = parsel.Selector(response.text)
lis = selector.css(&#39;.news-list li&#39;)
for li in lis:
title_list = li.css(&#39;.txt-box h3 a::text&#39;).getall()
num = len(title_list)
if num == 1:
title_str = &#39;python&#39; + title_list[0]
else:
title_str = &#39;python&#39;.join(title_list)
href = li.css(&#39;.txt-box h3 a::attr(href)&#39;).get()
article_url = &#39;https://weixin.sogou.com&#39; + href
name = li.css(&#39;.s-p a::text&#39;).get()
date = li.css(&#39;.s-p::attr(t)&#39;).get()
timeArray = time.localtime(int(date))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
&#39;標題&#39;: title_str,
&#39;公眾號&#39;: name,
&#39;文章發(fā)布時(shí)間&#39;: otherStyleTime,
&#39;文章地址&#39;: article_url,
}
csv_writer.writerow(dit)
print(title_str, name, otherStyleTime, article_url)
  

querylist采集微信公眾號文章(批量獲取公眾號推送超鏈接的原理(圖)介紹)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 341 次瀏覽 ? 2022-01-17 22:08 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(批量獲取公眾號推送超鏈接的原理(圖)介紹)
  一、前言
  二、準備
  三、正式開(kāi)始
  四、結束語(yǔ)
  一、前言
  前幾天書(shū)文問(wèn)我能不能爬取微信公眾號“北京郵教部”的歷史動(dòng)態(tài),分析最多的成績(jì)和科目。之前沒(méi)做過(guò)微信公眾號爬蟲(chóng),所以研究了一下,發(fā)現了這個(gè)文章。
  二、準備三、正式開(kāi)始(一)批量獲取之前公眾號推送的url鏈接1.微信后臺插入其他公眾號推送超鏈接的原理公眾號
  如果要批量抓取微信公眾號過(guò)去的推送,最大的問(wèn)題是如何獲取這些推送的url鏈接。因為通常我們點(diǎn)擊一??個(gè)推送時(shí),微信會(huì )隨機生成一個(gè)url鏈接,而這個(gè)隨機生成的url與公眾號推送的其他url沒(méi)有任何關(guān)聯(lián)。因此,如果我們要批量抓取公眾號的所有推送,需要手動(dòng)點(diǎn)擊每條推送,復制每條推送的url鏈接。這顯然是不現實(shí)的。在廣泛查閱各種資料后,我學(xué)會(huì )了如何爬取公眾號所有文章this文章的方法。
  這種方式的原理是,當我們登錄微信公眾號后臺編輯圖文素材時(shí),可以在素材中插入其他公眾號的推送鏈接。這里,微信公眾號后臺會(huì )自動(dòng)調用相關(guān)API,返回公眾號推送的所有長(cháng)鏈接列表。
  
  我們打開(kāi)Chrome瀏覽器的查看模式,選擇網(wǎng)絡(luò ),然后在編輯超鏈接界面的公眾號搜索欄中輸入“北京郵政家教部”,搜索并選擇公眾號,發(fā)現一個(gè)刷新的網(wǎng)絡(luò )以“開(kāi)頭” appmsg”開(kāi)頭的內容,這是我們分析的目標。
  
  我們點(diǎn)擊“appmsg”開(kāi)頭的內容,解析請求的url:
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  鏈接分為三個(gè)部分:
  request的基本部分?action=list_ex常用于動(dòng)態(tài)網(wǎng)站,實(shí)現不同的參數值生成不同的頁(yè)面或返回不同的結果&amp;begin=0&amp;count=5&amp;fakeid=MjM5NDY3ODI4OA==&amp;type=9&amp;query=&amp;token= 1983840068&amp;lang=zh_CN&amp;f =json&amp;ajax=1 設置各種參數2.獲取Cookie和User-Agent
  如果使用Python的Requests庫直接訪(fǎng)問(wèn)url,是無(wú)法正常獲取結果的。原因是在使用網(wǎng)頁(yè)版微信公眾號在后臺插入超鏈接時(shí),我們處于登錄狀態(tài),但是當我們使用python直接訪(fǎng)問(wèn)時(shí),我們并沒(méi)有處于登錄狀態(tài)。因此,我們需要在訪(fǎng)問(wèn)時(shí)手動(dòng)獲取Cookie和User-Agent,并在使用Python的Requests庫訪(fǎng)問(wèn)時(shí)將它們傳遞到headers參數中。這里說(shuō)一下,我把公眾號標識符 fakeid 和 token 參數保存在一個(gè) yaml 文件中,方便爬取時(shí)加載。
  cookie : appmsglist_action_3899……
user_agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64)……
fakeid : MzI4M……
token : "19……
  在python代碼中加載如下:
  import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
  3.設置url參數
  然后我們設置要請求的url鏈接的參數:
  # 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
  這里,count 是請求返回的信息數,begin 是當前請求的頁(yè)數。當begin設置為0時(shí),會(huì )以json格式返回最近五次推送信息,以此類(lèi)推。
  4.開(kāi)始爬取
  通過(guò)一個(gè)循環(huán),begin的值每次加1,循環(huán)爬?。?br />   i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()[&#39;app_msg_list&#39;]) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("app_msg_list.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  爬了大概50頁(yè)的時(shí)候,遇到如下錯誤:{'base_resp': {'err_msg': 'freq control', 'ret': 200013}}這是因為微信公眾號有流量限制,等一個(gè)小時(shí)就好了. 我在這里使用以下代碼來(lái)解決它:
  # 微信流量控制
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue
  對于每條爬取的信息,對其進(jìn)行解析并將其存儲在一個(gè) csv 文件中:
  msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("python小屋.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
  5.完整代碼
  完整代碼如下:
  #!/usr/bin/env python
# -*- encoding: utf-8 -*-
&#39;&#39;&#39;
@File : Spider.py
@Time : 2021/06/04 02:20:24
@Author : YuFanWenShu
@Contact : 1365240381@qq.com
&#39;&#39;&#39;
# here put the import lib
import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
with open("app_msg_list.csv", "w",encoding=&#39;utf-8&#39;) as file:
file.write("文章標識符aid,標題title,鏈接url,時(shí)間time\n")
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()[&#39;app_msg_list&#39;]) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("app_msg_list.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  6.爬取結果
  最終結果保存在 csv 文件中,一共 565 條推送消息:
  
  (二)對每次推送進(jìn)行爬取,提取需要的信息1.對每次推送進(jìn)行遍歷和爬取
  從 csv 文件中讀取每次推送的 url 鏈接,并使用 Requests 庫抓取每次推送的內容:
  with open("app_msg_list.csv","r",encoding="utf-8") as f:
data = f.readlines()
n = len(data)
for i in range(n):
mes = data[i].strip("\n").split(",")
if len(mes)!=4:
continue
title,url = mes[1:3]
if i>0:
r = requests.get(eval(url),headers=headers)
if r.status_code == 200:
text = r.text
projects = re_project.finditer(text)
  2.提取信息并寫(xiě)入文件
  我們需要提取的是每個(gè)導師信息的年級和科目。通過(guò)觀(guān)察推送結構,我決定使用正則表達式進(jìn)行提取。
  
  有的家教訂單長(cháng)時(shí)間沒(méi)有回復,會(huì )在多個(gè)帖子中重復出現,從而影響我們的統計結果。我決定用數字來(lái)識別不同的輔導信息,相同的數字只會(huì )計算一次。所以使用下面的正則表達式來(lái)匹配:
<p>re_project = re.compile(r">編號(.*?)年級(.*?)科目(.*?)科目(.*?)年級(.*?)編號(.*?)年級(.*?)科目(.*?) 查看全部

  querylist采集微信公眾號文章(批量獲取公眾號推送超鏈接的原理(圖)介紹)
  一、前言
  二、準備
  三、正式開(kāi)始
  四、結束語(yǔ)
  一、前言
  前幾天書(shū)文問(wèn)我能不能爬取微信公眾號“北京郵教部”的歷史動(dòng)態(tài),分析最多的成績(jì)和科目。之前沒(méi)做過(guò)微信公眾號爬蟲(chóng),所以研究了一下,發(fā)現了這個(gè)文章。
  二、準備三、正式開(kāi)始(一)批量獲取之前公眾號推送的url鏈接1.微信后臺插入其他公眾號推送超鏈接的原理公眾號
  如果要批量抓取微信公眾號過(guò)去的推送,最大的問(wèn)題是如何獲取這些推送的url鏈接。因為通常我們點(diǎn)擊一??個(gè)推送時(shí),微信會(huì )隨機生成一個(gè)url鏈接,而這個(gè)隨機生成的url與公眾號推送的其他url沒(méi)有任何關(guān)聯(lián)。因此,如果我們要批量抓取公眾號的所有推送,需要手動(dòng)點(diǎn)擊每條推送,復制每條推送的url鏈接。這顯然是不現實(shí)的。在廣泛查閱各種資料后,我學(xué)會(huì )了如何爬取公眾號所有文章this文章的方法。
  這種方式的原理是,當我們登錄微信公眾號后臺編輯圖文素材時(shí),可以在素材中插入其他公眾號的推送鏈接。這里,微信公眾號后臺會(huì )自動(dòng)調用相關(guān)API,返回公眾號推送的所有長(cháng)鏈接列表。
  
  我們打開(kāi)Chrome瀏覽器的查看模式,選擇網(wǎng)絡(luò ),然后在編輯超鏈接界面的公眾號搜索欄中輸入“北京郵政家教部”,搜索并選擇公眾號,發(fā)現一個(gè)刷新的網(wǎng)絡(luò )以“開(kāi)頭” appmsg”開(kāi)頭的內容,這是我們分析的目標。
  
  我們點(diǎn)擊“appmsg”開(kāi)頭的內容,解析請求的url:
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  鏈接分為三個(gè)部分:
  request的基本部分?action=list_ex常用于動(dòng)態(tài)網(wǎng)站,實(shí)現不同的參數值生成不同的頁(yè)面或返回不同的結果&amp;begin=0&amp;count=5&amp;fakeid=MjM5NDY3ODI4OA==&amp;type=9&amp;query=&amp;token= 1983840068&amp;lang=zh_CN&amp;f =json&amp;ajax=1 設置各種參數2.獲取Cookie和User-Agent
  如果使用Python的Requests庫直接訪(fǎng)問(wèn)url,是無(wú)法正常獲取結果的。原因是在使用網(wǎng)頁(yè)版微信公眾號在后臺插入超鏈接時(shí),我們處于登錄狀態(tài),但是當我們使用python直接訪(fǎng)問(wèn)時(shí),我們并沒(méi)有處于登錄狀態(tài)。因此,我們需要在訪(fǎng)問(wèn)時(shí)手動(dòng)獲取Cookie和User-Agent,并在使用Python的Requests庫訪(fǎng)問(wèn)時(shí)將它們傳遞到headers參數中。這里說(shuō)一下,我把公眾號標識符 fakeid 和 token 參數保存在一個(gè) yaml 文件中,方便爬取時(shí)加載。
  cookie : appmsglist_action_3899……
user_agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64)……
fakeid : MzI4M……
token : "19……
  在python代碼中加載如下:
  import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
  3.設置url參數
  然后我們設置要請求的url鏈接的參數:
  # 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
  這里,count 是請求返回的信息數,begin 是當前請求的頁(yè)數。當begin設置為0時(shí),會(huì )以json格式返回最近五次推送信息,以此類(lèi)推。
  4.開(kāi)始爬取
  通過(guò)一個(gè)循環(huán),begin的值每次加1,循環(huán)爬?。?br />   i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()[&#39;app_msg_list&#39;]) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("app_msg_list.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  爬了大概50頁(yè)的時(shí)候,遇到如下錯誤:{'base_resp': {'err_msg': 'freq control', 'ret': 200013}}這是因為微信公眾號有流量限制,等一個(gè)小時(shí)就好了. 我在這里使用以下代碼來(lái)解決它:
  # 微信流量控制
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue
  對于每條爬取的信息,對其進(jìn)行解析并將其存儲在一個(gè) csv 文件中:
  msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("python小屋.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
  5.完整代碼
  完整代碼如下:
  #!/usr/bin/env python
# -*- encoding: utf-8 -*-
&#39;&#39;&#39;
@File : Spider.py
@Time : 2021/06/04 02:20:24
@Author : YuFanWenShu
@Contact : 1365240381@qq.com
&#39;&#39;&#39;
# here put the import lib
import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
with open("app_msg_list.csv", "w",encoding=&#39;utf-8&#39;) as file:
file.write("文章標識符aid,標題title,鏈接url,時(shí)間time\n")
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()[&#39;app_msg_list&#39;]) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("app_msg_list.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  6.爬取結果
  最終結果保存在 csv 文件中,一共 565 條推送消息:
  
  (二)對每次推送進(jìn)行爬取,提取需要的信息1.對每次推送進(jìn)行遍歷和爬取
  從 csv 文件中讀取每次推送的 url 鏈接,并使用 Requests 庫抓取每次推送的內容:
  with open("app_msg_list.csv","r",encoding="utf-8") as f:
data = f.readlines()
n = len(data)
for i in range(n):
mes = data[i].strip("\n").split(",")
if len(mes)!=4:
continue
title,url = mes[1:3]
if i>0:
r = requests.get(eval(url),headers=headers)
if r.status_code == 200:
text = r.text
projects = re_project.finditer(text)
  2.提取信息并寫(xiě)入文件
  我們需要提取的是每個(gè)導師信息的年級和科目。通過(guò)觀(guān)察推送結構,我決定使用正則表達式進(jìn)行提取。
  
  有的家教訂單長(cháng)時(shí)間沒(méi)有回復,會(huì )在多個(gè)帖子中重復出現,從而影響我們的統計結果。我決定用數字來(lái)識別不同的輔導信息,相同的數字只會(huì )計算一次。所以使用下面的正則表達式來(lái)匹配:
<p>re_project = re.compile(r">編號(.*?)年級(.*?)科目(.*?)科目(.*?)年級(.*?)編號(.*?)年級(.*?)科目(.*?)

querylist采集微信公眾號文章(貼個(gè)代碼4.新建一個(gè)py文件獲取cookies文件 )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 156 次瀏覽 ? 2022-01-17 13:21 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(貼個(gè)代碼4.新建一個(gè)py文件獲取cookies文件
)
  通過(guò)微信公眾平臺的搜索文章界面,先抓取我們需要的相關(guān)文章1.,我們先來(lái)看看,正常登錄我們的微信公眾號,然后使用文章搜索功能,搜索我們需要查找的相關(guān)文章。 2.實(shí)現思路3.獲取cookie,不多說(shuō),貼個(gè)代碼
  #!/usr/bin/env python
# _*_ coding: utf-8 _*_
from selenium import webdriver
import time
import json
driver = webdriver.Chrome() #需要一個(gè)谷歌驅動(dòng)chromedriver.exe,要支持你當前谷歌瀏覽器的版本
driver.get('https://mp.weixin.qq.com/') #發(fā)起get請求打開(kāi)微信公眾號平臺登錄頁(yè)面,然后輸入賬號密碼登錄微信公眾號
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[1]/div/span/input').clear() #定位到賬號輸入框,清除里面的內容
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[1]/div/span/input').send_keys('這里輸入你的賬號') #定位到賬號輸入框,輸入賬號
time.sleep(3) #等待3秒后執行下一步操作,避免因為網(wǎng)絡(luò )延遲,瀏覽器來(lái)不及加載出輸入框,從而導致以下的操作失敗
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[2]/div/span/input').clear() #定位到密碼輸入框,清除里面的內容
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[2]/div/span/input').send_keys('這里輸入你的密碼') #定位到密碼輸入框,輸入密碼
time.sleep(3) #原因和以上相同
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[3]/label').click() #點(diǎn)擊記住密碼
time.sleep(3) #原因和以上相同
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[4]/a').click() #點(diǎn)擊登錄
time.sleep(15) #15秒內掃碼登錄
cookies = driver.get_cookies() #獲取掃碼登錄成功之后的cookies
print(cookies) #打印出來(lái)看看,如果超時(shí)了還不掃碼,獲取到的cookies是不完整的,不能用來(lái)登錄公眾號,所以第一次必須掃碼登錄以獲取完整的cookies
cookie = {} #定義一個(gè)空字典,以便把獲取的cookies以字典的形式寫(xiě)入
for items in cookies: #把登錄成功后獲取的cookies提取name和value參數寫(xiě)入空字典cookie
cookie[items.get('name')] = items.get('value')
with open('cookies.txt','w') as file: #新建并打開(kāi)一個(gè)cookies.txt文件
file.write(json.dumps(cookie)) #寫(xiě)入轉成字符串的字典
driver.close() #關(guān)閉瀏覽器
  4.新建一個(gè)py文件,代碼如下
  #!/usr/bin/env python
# _*_ coding: utf-8 _*_
import requests
import json
import re #正則模塊
import random #隨機數模塊
import time
#query = 'python'
#讀取之前登錄后保存的cookies
with open('cookies.txt','r') as file:
cookie = file.read()
url = 'https://mp.weixin.qq.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
'Referer': 'https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&share=1&token=773059916&lang=zh_CN',
'Host': 'mp.weixin.qq.com',
}
cookies = json.loads(cookie) #加載之前獲取的cookies
print(cookies) #可以打印看看,和之前保存的cookies是一樣的
response = requests.get(url, cookies = cookies) #請求https://mp.weixin.qq.com/,傳cookies參數,登錄成功
token = re.findall(r'token=(\d+)',str(response.url))[0] #登錄成功后,這是的url里是包含token的,要把token參數拿出來(lái),方便后面構造data數據包發(fā)起post請求
#print(token)
#random.random()返回0到1之間隨機數
#構造data數據包發(fā)起post請求
data = {
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'random': random.random(),
'url': 'python',
'begin': '0',
'count': '3',
}
search_url = 'https://mp.weixin.qq.com/cgi-bin/operate_appmsg?sub=check_appmsg_copyright_stat' #按F12在瀏覽器里找post請求的url(搜索文章請求的url)
search_response = requests.post(search_url, cookies=cookies, data=data, headers=headers) #發(fā)起post請求,傳cookies、data、headers參數
max_num = search_response.json().get('total') #獲取所有文章的條數
num = int(int(max_num/3)) #每頁(yè)顯示3篇文章,要翻total/3頁(yè),不過(guò)實(shí)際上我搜索了幾個(gè)關(guān)鍵詞,發(fā)現微信公眾號文章搜索的接口最多顯示667頁(yè),其實(shí)后面還有頁(yè)數,max_num/3的結果大于667沒(méi)關(guān)系
if __name__ == '__main__':
query = input('請輸入你要搜索的內容:')
begin = 0
while num +1 > 0:
print(begin)
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)
contentt = search_response.json().get('list') #list里面是我們需要的內容,所以要獲取list
for items in contentt: #具體需要list里面的哪些參數可以自己選擇,這里只獲取title、url、nickname、author
f = open('search.txt',mode='a',) #打開(kāi)一個(gè)txt文檔,把獲取的內容寫(xiě)進(jìn)去,mode='a'是追加的方式寫(xiě)入,不覆蓋
print('文章標題:',items.get('title')) #獲取文章標題
f.write('文章標題:')
f.write(items.get('title'))
f.write("\n")
f.write('文章url:')
f.write(items.get('url'))
f.write("\n")
f.write('公眾號:')
f.write(items.get('nickname'))
f.write("\n")
f.write('作者:')
f.write(items.get('author'))
f.write("\n")
f.write("\n")
print('文章url:',items.get('url')) #獲取文章的url
print('公眾號:',items.get('nickname')) #獲取出自哪個(gè)微信公眾號
print('文章作者:',items.get('author')) #獲取文章作者
num -= 1
begin = int(begin)
begin += 3
time.sleep(3)
  
   查看全部

  querylist采集微信公眾號文章(貼個(gè)代碼4.新建一個(gè)py文件獲取cookies文件
)
  通過(guò)微信公眾平臺的搜索文章界面,先抓取我們需要的相關(guān)文章1.,我們先來(lái)看看,正常登錄我們的微信公眾號,然后使用文章搜索功能,搜索我們需要查找的相關(guān)文章。 2.實(shí)現思路3.獲取cookie,不多說(shuō),貼個(gè)代碼
  #!/usr/bin/env python
# _*_ coding: utf-8 _*_
from selenium import webdriver
import time
import json
driver = webdriver.Chrome() #需要一個(gè)谷歌驅動(dòng)chromedriver.exe,要支持你當前谷歌瀏覽器的版本
driver.get('https://mp.weixin.qq.com/') #發(fā)起get請求打開(kāi)微信公眾號平臺登錄頁(yè)面,然后輸入賬號密碼登錄微信公眾號
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[1]/div/span/input').clear() #定位到賬號輸入框,清除里面的內容
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[1]/div/span/input').send_keys('這里輸入你的賬號') #定位到賬號輸入框,輸入賬號
time.sleep(3) #等待3秒后執行下一步操作,避免因為網(wǎng)絡(luò )延遲,瀏覽器來(lái)不及加載出輸入框,從而導致以下的操作失敗
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[2]/div/span/input').clear() #定位到密碼輸入框,清除里面的內容
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[1]/div[2]/div/span/input').send_keys('這里輸入你的密碼') #定位到密碼輸入框,輸入密碼
time.sleep(3) #原因和以上相同
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[3]/label').click() #點(diǎn)擊記住密碼
time.sleep(3) #原因和以上相同
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[4]/a').click() #點(diǎn)擊登錄
time.sleep(15) #15秒內掃碼登錄
cookies = driver.get_cookies() #獲取掃碼登錄成功之后的cookies
print(cookies) #打印出來(lái)看看,如果超時(shí)了還不掃碼,獲取到的cookies是不完整的,不能用來(lái)登錄公眾號,所以第一次必須掃碼登錄以獲取完整的cookies
cookie = {} #定義一個(gè)空字典,以便把獲取的cookies以字典的形式寫(xiě)入
for items in cookies: #把登錄成功后獲取的cookies提取name和value參數寫(xiě)入空字典cookie
cookie[items.get('name')] = items.get('value')
with open('cookies.txt','w') as file: #新建并打開(kāi)一個(gè)cookies.txt文件
file.write(json.dumps(cookie)) #寫(xiě)入轉成字符串的字典
driver.close() #關(guān)閉瀏覽器
  4.新建一個(gè)py文件,代碼如下
  #!/usr/bin/env python
# _*_ coding: utf-8 _*_
import requests
import json
import re #正則模塊
import random #隨機數模塊
import time
#query = 'python'
#讀取之前登錄后保存的cookies
with open('cookies.txt','r') as file:
cookie = file.read()
url = 'https://mp.weixin.qq.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
'Referer': 'https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&share=1&token=773059916&lang=zh_CN',
'Host': 'mp.weixin.qq.com',
}
cookies = json.loads(cookie) #加載之前獲取的cookies
print(cookies) #可以打印看看,和之前保存的cookies是一樣的
response = requests.get(url, cookies = cookies) #請求https://mp.weixin.qq.com/,傳cookies參數,登錄成功
token = re.findall(r'token=(\d+)',str(response.url))[0] #登錄成功后,這是的url里是包含token的,要把token參數拿出來(lái),方便后面構造data數據包發(fā)起post請求
#print(token)
#random.random()返回0到1之間隨機數
#構造data數據包發(fā)起post請求
data = {
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'random': random.random(),
'url': 'python',
'begin': '0',
'count': '3',
}
search_url = 'https://mp.weixin.qq.com/cgi-bin/operate_appmsg?sub=check_appmsg_copyright_stat' #按F12在瀏覽器里找post請求的url(搜索文章請求的url)
search_response = requests.post(search_url, cookies=cookies, data=data, headers=headers) #發(fā)起post請求,傳cookies、data、headers參數
max_num = search_response.json().get('total') #獲取所有文章的條數
num = int(int(max_num/3)) #每頁(yè)顯示3篇文章,要翻total/3頁(yè),不過(guò)實(shí)際上我搜索了幾個(gè)關(guān)鍵詞,發(fā)現微信公眾號文章搜索的接口最多顯示667頁(yè),其實(shí)后面還有頁(yè)數,max_num/3的結果大于667沒(méi)關(guān)系
if __name__ == '__main__':
query = input('請輸入你要搜索的內容:')
begin = 0
while num +1 > 0:
print(begin)
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)
contentt = search_response.json().get('list') #list里面是我們需要的內容,所以要獲取list
for items in contentt: #具體需要list里面的哪些參數可以自己選擇,這里只獲取title、url、nickname、author
f = open('search.txt',mode='a',) #打開(kāi)一個(gè)txt文檔,把獲取的內容寫(xiě)進(jìn)去,mode='a'是追加的方式寫(xiě)入,不覆蓋
print('文章標題:',items.get('title')) #獲取文章標題
f.write('文章標題:')
f.write(items.get('title'))
f.write("\n")
f.write('文章url:')
f.write(items.get('url'))
f.write("\n")
f.write('公眾號:')
f.write(items.get('nickname'))
f.write("\n")
f.write('作者:')
f.write(items.get('author'))
f.write("\n")
f.write("\n")
print('文章url:',items.get('url')) #獲取文章的url
print('公眾號:',items.get('nickname')) #獲取出自哪個(gè)微信公眾號
print('文章作者:',items.get('author')) #獲取文章作者
num -= 1
begin = int(begin)
begin += 3
time.sleep(3)
  
  

querylist采集微信公眾號文章(文章目錄[隱藏]要怎么用公眾號制作出圖文并茂)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 143 次瀏覽 ? 2022-01-16 09:16 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(文章目錄[隱藏]要怎么用公眾號制作出圖文并茂)
  文章目錄[隱藏]
  如何使用公眾號創(chuàng )建一個(gè)圖文并茂、布局精美的公眾號文章?這次就一起來(lái)了解一下吧~
  什么編輯器好用
  小編剛接觸公眾號運營(yíng)的時(shí)候,很長(cháng)一段時(shí)間都是直接在公眾號后臺編輯打文章。做出來(lái)的文章看起來(lái)很簡(jiǎn)單,讀數一直很慘淡。
  直到有同事推薦,我才開(kāi)始用編輯器做圖文,不過(guò)一開(kāi)始編輯器也是用最常見(jiàn)的第三方網(wǎng)頁(yè)編輯器排版公眾號文章,雖然可以在文章中插入各種小裝飾,玩文章的排版技巧。
  但是,每當小編將編輯后輸入的文章同步到公眾號后臺時(shí),總能發(fā)現有些樣式?jīng)]有同步。不僅如此,在某些地方還存在格式錯誤的問(wèn)題。這種情況下,小編只能稍微修改一下,很累。
  后來(lái)小編碰巧用了一個(gè)外掛的微信編輯器,然后才意識到可以在公眾號后臺一站式完成公眾號操作的日常工作,比如找文章和圖片,編輯和排版文章等等,排版和發(fā)布不用太擔心。
  下面小編就以我常用的一帆助手編輯器為例,為大家介紹一下如何使用一帆創(chuàng )建公眾號文章~
  如何使用一板助手創(chuàng )建公眾號文章
  當我們去一板官網(wǎng)下載一板安裝包并在常用瀏覽器上安裝后,可以授權登錄公眾號后臺,在公眾號背景。
  接下來(lái),我們新建一個(gè)圖文,然后就可以在圖文編輯界面查看一帆提供的編輯增強、樣式中心、圖文工具箱。
  我們在原有公眾號后臺編輯功能的基礎上,結合一帆提供的特殊表達、全文過(guò)濾、下劃線(xiàn)等編輯增強功能,讓我們的排版更加精致,也大大提升了我們的排版文章 效率。
  當然,如果你覺(jué)得編輯和強化功能還不夠,想要更新穎有趣的布局樣式,可以在頁(yè)面左側的樣式中心找到大量實(shí)用的布局樣式,點(diǎn)擊即可將他們添加到公共帳戶(hù) 文章 !
  接下來(lái),我們來(lái)看看圖文工具箱。有大量工具可以提高公眾號的排版效率,比如版權地圖中心、導入文章、生成永久鏈接等。點(diǎn)擊完成操作。非常友好!
  有興趣的小伙伴快來(lái)一班官網(wǎng)下載這款好用的公眾號操作神器吧! 查看全部

  querylist采集微信公眾號文章(文章目錄[隱藏]要怎么用公眾號制作出圖文并茂)
  文章目錄[隱藏]
  如何使用公眾號創(chuàng )建一個(gè)圖文并茂、布局精美的公眾號文章?這次就一起來(lái)了解一下吧~
  什么編輯器好用
  小編剛接觸公眾號運營(yíng)的時(shí)候,很長(cháng)一段時(shí)間都是直接在公眾號后臺編輯打文章。做出來(lái)的文章看起來(lái)很簡(jiǎn)單,讀數一直很慘淡。
  直到有同事推薦,我才開(kāi)始用編輯器做圖文,不過(guò)一開(kāi)始編輯器也是用最常見(jiàn)的第三方網(wǎng)頁(yè)編輯器排版公眾號文章,雖然可以在文章中插入各種小裝飾,玩文章的排版技巧。
  但是,每當小編將編輯后輸入的文章同步到公眾號后臺時(shí),總能發(fā)現有些樣式?jīng)]有同步。不僅如此,在某些地方還存在格式錯誤的問(wèn)題。這種情況下,小編只能稍微修改一下,很累。
  后來(lái)小編碰巧用了一個(gè)外掛的微信編輯器,然后才意識到可以在公眾號后臺一站式完成公眾號操作的日常工作,比如找文章和圖片,編輯和排版文章等等,排版和發(fā)布不用太擔心。
  下面小編就以我常用的一帆助手編輯器為例,為大家介紹一下如何使用一帆創(chuàng )建公眾號文章~
  如何使用一板助手創(chuàng )建公眾號文章
  當我們去一板官網(wǎng)下載一板安裝包并在常用瀏覽器上安裝后,可以授權登錄公眾號后臺,在公眾號背景。
  接下來(lái),我們新建一個(gè)圖文,然后就可以在圖文編輯界面查看一帆提供的編輯增強、樣式中心、圖文工具箱。
  我們在原有公眾號后臺編輯功能的基礎上,結合一帆提供的特殊表達、全文過(guò)濾、下劃線(xiàn)等編輯增強功能,讓我們的排版更加精致,也大大提升了我們的排版文章 效率。
  當然,如果你覺(jué)得編輯和強化功能還不夠,想要更新穎有趣的布局樣式,可以在頁(yè)面左側的樣式中心找到大量實(shí)用的布局樣式,點(diǎn)擊即可將他們添加到公共帳戶(hù) 文章 !
  接下來(lái),我們來(lái)看看圖文工具箱。有大量工具可以提高公眾號的排版效率,比如版權地圖中心、導入文章、生成永久鏈接等。點(diǎn)擊完成操作。非常友好!
  有興趣的小伙伴快來(lái)一班官網(wǎng)下載這款好用的公眾號操作神器吧!

querylist采集微信公眾號文章( 如何搜索微信最新公眾號內容?怎樣搜索方法/步驟)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 166 次瀏覽 ? 2022-01-16 09:15 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(
如何搜索微信最新公眾號內容?怎樣搜索方法/步驟)
  
  很多朋友在查看最新的微信公眾號文章時(shí),通常都會(huì )使用搜索功能,那么如何搜索最新的微信公眾號的內容呢?如何查詢(xún)微信公眾號文章的歷史記錄?道路數據將為您介紹。
  
  如何搜索最新的微信公眾號內容
  如何搜索最新的微信公眾號內容?
  方法/步驟
  打開(kāi)瀏覽器,進(jìn)入搜狗搜索首頁(yè),點(diǎn)擊“更多”進(jìn)入更多功能頁(yè)面。
  在輸入框中輸入你要搜索的關(guān)鍵詞(這里以“百度體驗”為例),點(diǎn)擊“搜索”。
  進(jìn)入搜索結果顯示頁(yè)面。點(diǎn)擊任意一個(gè)文章閱讀相關(guān)內容。
  進(jìn)入文字頁(yè)面,可以看到發(fā)文的公眾號文章。
  微信公眾號歷史文章如何搜索
  方法/步驟
  首先,找到您要搜索的公眾號并輸入。進(jìn)入后,部分公眾號下方有對應的文章歷史記錄,可點(diǎn)擊進(jìn)入。
  除此之外,還可以點(diǎn)擊右上角的人形logo進(jìn)入公眾號歷史后臺文章。
  進(jìn)入后臺后會(huì )看到文章最近幾期的內容,不過(guò)這些對我們來(lái)說(shuō)還不夠,點(diǎn)擊下拉找到全部信息,點(diǎn)擊進(jìn)入全部信息界面。
  進(jìn)入所有歷史信息的界面,整個(gè)界面往下拉,然后頂部會(huì )出現一個(gè)搜索框。
  這個(gè)搜索框可以搜索到這個(gè)文章里面的歷史文章,點(diǎn)擊搜索進(jìn)入搜索界面。
  例如在搜索界面輸入“HPV”,之后出現的界面就是本公眾號文章中關(guān)于HPV的全部文章。
  
  如何搜索最新的微信公眾號內容
  如何搜索最新的微信公眾號內容?微信公眾號文章搜索
  搜索所有公眾號內容
  在手機上打開(kāi)微信,點(diǎn)擊右上角的加號,選擇【添加好友】,在打開(kāi)的“添加好友”頁(yè)面點(diǎn)擊搜索框。
  在搜索框中搜索關(guān)鍵詞,就會(huì )出現帶有這個(gè)關(guān)鍵詞的內容。在搜索結果中選擇“文章”,微信公眾號文章將被過(guò)濾掉。搜索結果。
  在搜索結果中,您還可以根據不同的條件進(jìn)行篩選,按照不同的順序進(jìn)行排序,從而更快、更準確地找到您需要的內容。
  搜索指定公眾號文章 查看全部

  querylist采集微信公眾號文章(
如何搜索微信最新公眾號內容?怎樣搜索方法/步驟)
  
  很多朋友在查看最新的微信公眾號文章時(shí),通常都會(huì )使用搜索功能,那么如何搜索最新的微信公眾號的內容呢?如何查詢(xún)微信公眾號文章的歷史記錄?道路數據將為您介紹。
  
  如何搜索最新的微信公眾號內容
  如何搜索最新的微信公眾號內容?
  方法/步驟
  打開(kāi)瀏覽器,進(jìn)入搜狗搜索首頁(yè),點(diǎn)擊“更多”進(jìn)入更多功能頁(yè)面。
  在輸入框中輸入你要搜索的關(guān)鍵詞(這里以“百度體驗”為例),點(diǎn)擊“搜索”。
  進(jìn)入搜索結果顯示頁(yè)面。點(diǎn)擊任意一個(gè)文章閱讀相關(guān)內容。
  進(jìn)入文字頁(yè)面,可以看到發(fā)文的公眾號文章。
  微信公眾號歷史文章如何搜索
  方法/步驟
  首先,找到您要搜索的公眾號并輸入。進(jìn)入后,部分公眾號下方有對應的文章歷史記錄,可點(diǎn)擊進(jìn)入。
  除此之外,還可以點(diǎn)擊右上角的人形logo進(jìn)入公眾號歷史后臺文章。
  進(jìn)入后臺后會(huì )看到文章最近幾期的內容,不過(guò)這些對我們來(lái)說(shuō)還不夠,點(diǎn)擊下拉找到全部信息,點(diǎn)擊進(jìn)入全部信息界面。
  進(jìn)入所有歷史信息的界面,整個(gè)界面往下拉,然后頂部會(huì )出現一個(gè)搜索框。
  這個(gè)搜索框可以搜索到這個(gè)文章里面的歷史文章,點(diǎn)擊搜索進(jìn)入搜索界面。
  例如在搜索界面輸入“HPV”,之后出現的界面就是本公眾號文章中關(guān)于HPV的全部文章。
  
  如何搜索最新的微信公眾號內容
  如何搜索最新的微信公眾號內容?微信公眾號文章搜索
  搜索所有公眾號內容
  在手機上打開(kāi)微信,點(diǎn)擊右上角的加號,選擇【添加好友】,在打開(kāi)的“添加好友”頁(yè)面點(diǎn)擊搜索框。
  在搜索框中搜索關(guān)鍵詞,就會(huì )出現帶有這個(gè)關(guān)鍵詞的內容。在搜索結果中選擇“文章”,微信公眾號文章將被過(guò)濾掉。搜索結果。
  在搜索結果中,您還可以根據不同的條件進(jìn)行篩選,按照不同的順序進(jìn)行排序,從而更快、更準確地找到您需要的內容。
  搜索指定公眾號文章

querylist采集微信公眾號文章(Python微信公眾號文章文章爬取的示例代碼一.思路)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 471 次瀏覽 ? 2022-01-13 16:12 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(Python微信公眾號文章文章爬取的示例代碼一.思路)
  Python微信公眾號文章爬取示例代碼
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面
  
  
  從界面中我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
  二.界面分析
  獲取微信公眾號界面:
  范圍:
  行動(dòng)=search_biz
  開(kāi)始=0
  計數=5
  query=公眾號
  token = 每個(gè)賬戶(hù)對應的token值
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  所以在這個(gè)界面中,我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后可以通過(guò)網(wǎng)頁(yè)鏈接獲取token。
  
  獲取公眾號對應的文章接口:
  范圍:
  行動(dòng)=list_ex
  開(kāi)始=0
  計數=5
  fakeid=MjM5NDAwMTA2MA==
  類(lèi)型=9
  查詢(xún)=
  令牌=557131216
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  在這個(gè)接口中,我們需要獲取的值是上一步的token和fakeid,而這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以得到微信公眾號文章的數據了。
  
  三.實(shí)現
  第一步:
  首先我們需要通過(guò)selenium來(lái)模擬登錄,然后獲取cookie和對應的token
  
def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義了一個(gè)登錄方法,其中的參數是登錄賬號和密碼,然后定義了一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù)輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,登錄微信即可掃碼。
  刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token并返回。
  第2步:
  1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
  
url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲取的token和cookie,然后通過(guò)requests.get請求獲取微信公眾號返回的json數據
  
lists = search_resp.json().get('list')[0]
  通過(guò)以上代碼可以獲取對應的公眾號數據
  
fakeid = lists.get('fakeid')
  通過(guò)上面的代碼,可以得到對應的 fakeid
  2.請求訪(fǎng)問(wèn)微信公眾號文章接口,獲取我們需要的文章數據
  
appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入 fakeid 和 token 然后調用 requests.get 請求接口獲取返回的 json 數據。
  我們實(shí)現了微信公眾號文章的爬取。
  四.總結
  通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,我們在循環(huán)獲取文章的時(shí)候,一定要設置延遲時(shí)間,否則容易被封號,獲取不到返回的數據。
  至此,這篇關(guān)于Python微信公眾號文章爬取示例代碼的文章文章就介紹到這里了。更多相關(guān)Python微信公眾號文章爬取內容,請搜索我們之前的文章或繼續瀏覽下方相關(guān)文章,希望大家以后多多支持!
  時(shí)間:2020-11-27
  基于Python采集爬取微信公眾號歷史數據
  鯤之鵬技術(shù)人員將在本文中通過(guò)模擬微信App的操作,介紹一種采集指定公眾號所有歷史數據的方法。通過(guò)我們的抓包分析,我們發(fā)現微信公眾號的歷史數據是通過(guò)HTTP協(xié)議加載的,對應的API接口如下圖所示,關(guān)鍵參數有四個(gè)(__biz.appmsg_token.pass_ticket和餅干)。為了獲取這四個(gè)參數,我們需要模擬運行App,讓它生成這些參數,然后我們抓包獲取。對于模擬App操作,我們之前已經(jīng)介紹過(guò)通過(guò)Python模擬Android App的方法(詳見(jiàn)詳情)。
  python爬取微信公眾號文章的方法
  最近在學(xué)習Python3網(wǎng)絡(luò )爬蟲(chóng)(崔慶才寫(xiě)的)的開(kāi)發(fā)實(shí)踐,剛剛得知他在這里使用代理爬取了公眾號文章,但是根據他的代碼,還是出現了一些問(wèn)題。我在這里用過(guò)這本書(shū)。對本書(shū)前面提到的一些內容進(jìn)行了改進(jìn)。(作者半年前寫(xiě)的這段代碼,騰訊的網(wǎng)站半年前更新了)我直接加下面代碼:TIMEOUT = 20 from requests import Request, Session, PreparedRequest import requests from selenium import webdrive
  Python如何爬取微信公眾號文章及評論(基于Fiddler抓包分析)
  
  背景描述我覺(jué)得微信公眾號是比較難爬的平臺之一,但是經(jīng)過(guò)一番折騰,還是有一點(diǎn)小收獲。沒(méi)用Scrapy(估計爬太快有防爬限制),不過(guò)后面會(huì )開(kāi)始整理寫(xiě)一些實(shí)戰。. 簡(jiǎn)單介紹一下本次的開(kāi)發(fā)環(huán)境:python3請求psycopg2(操作postgres數據庫)抓包分析本次實(shí)戰對公眾號的抓包沒(méi)有限制,但是每次抓包前都要對不同的公眾號進(jìn)行分析。打開(kāi)Fiddler,在手機上配置相關(guān)代理。為了避免過(guò)多干擾,這里給Fiddler一個(gè)過(guò)濾規則,指定微信域名即可:
  python selenium爬取微信公眾號文章代碼詳解
  參考:selenium webdriver 添加cookies: 需求:想看微信公眾號文章的歷史,但是每次都找地方不方便。思路:1.使用selenium打開(kāi)微信公眾號歷史文章,滾動(dòng)刷新到底部,獲取所有歷史文章url。2.遍歷 url 并下載到本地。實(shí)現1.打開(kāi)微信客戶(hù)端,點(diǎn)擊A微信公眾號-&gt;進(jìn)入公眾號-&gt;打開(kāi)歷史文章鏈接(用瀏覽器打開(kāi)),通過(guò)開(kāi)發(fā)者工具獲取cookie
  Python爬取指定微信公眾號文章
  本文示例分享了python爬取微信公眾號文章的具體代碼,供大家參考。具體內容如下。該方法是依靠 urllib2 庫完成的。首先需要安裝你的python環(huán)境,然后安裝urllib2庫程序的啟動(dòng)方法(返回值為公眾號文章的列表): def openUrl(): print("啟動(dòng)爬蟲(chóng),打開(kāi)搜狗搜索微信界面") # 加載頁(yè)面url = ';s_from=input&amp;query = 被抓取的公眾號名稱(chēng)
  Python爬取微信公眾號文章
  本文示例分享python爬取微信公眾號文章的具體代碼供大家參考,具體內容如下# -*- coding: utf-8 -*- import requests from bs4 import BeautifulSoup from requests .exceptions import RequestException import time import random import MySQLdb import threading import socket import math soc
  Python爬蟲(chóng)_微信公眾號推送信息爬取示例
  
  問(wèn)題描述 使用搜狗微信搜索抓取指定公眾號的最新推送,并將對應網(wǎng)頁(yè)保存到本地。注意,搜狗微信獲取的地址是臨時(shí)鏈接,具有時(shí)效性。公眾號為動(dòng)態(tài)網(wǎng)頁(yè)(JavaScript渲染),使用requests.get()獲取的內容不收錄推送消息。這里使用 selenium+PhantomJS 處理代碼#!/usr/bin/env python3 from selenium import webdriver from datetime import datetime import bs4, requ
  Python使用webdriver爬取微信公眾號
  本文示例分享了python使用webdriver爬取微信公眾號的具體代碼,供大家參考。具體內容如下# -*- 編碼:utf-8 -*- from selenium import webdriver import time import json import requests import re import random #微信公眾號user="" #公眾號密碼password="" #設置需要爬取的公眾號列表 gzlist=['香河微服務(wù)
  Python抓取微信公眾號賬號信息的方法
  搜狗微信搜索提供了兩種關(guān)鍵詞搜索,一種是搜索公眾號文章的內容,另一種是直接搜索微信公眾號。公眾號基本信息可通過(guò)微信公眾號搜索獲取。還有最近發(fā)布的10個(gè)文章,今天就來(lái)?yè)屛⑿殴娞柕馁~號信息爬蟲(chóng)吧。首先通過(guò)首頁(yè)進(jìn)入,可以按類(lèi)別抓取,通過(guò)“查看更多”可以找到頁(yè)面鏈接規則: import requests as req import re reTypes = r'id="pc_\d*" uigs=" (pc_\d*)"&gt;([\s\S]*?)&amp;
  一種使用python itchat包爬取微信好友頭像形成矩形頭像集的方法
  初學(xué)者學(xué)python,一定要干點(diǎn)有趣的事!讓我們從微信開(kāi)始吧!頭像采集示例如下: 可以發(fā)朋友圈開(kāi)始鑒定大賽哈哈~ 廢話(huà)不多說(shuō),直接上代碼,我寫(xiě)了很多評論,大家應該都能看懂 import itchat import os import PIL .Image as Image from os import listdir import math import sys print("請進(jìn)入查詢(xún)模式:0-顯示所有好友頭像,但最終矩形頭像集的最后一行可能不完整:1-頭像集是一個(gè)完整的矩形,但朋友可能不完整,即在0模式下被丟棄
  微信公眾號Java批量獲取方法詳解
  
  最近需要爬取微信公眾號的文章信息。網(wǎng)上搜了一下,發(fā)現微信公眾號爬取的難點(diǎn)在于公眾號文章的鏈接在PC端打不開(kāi),所以用微信自帶的瀏覽器(只能在PC端打開(kāi))得到微信客戶(hù)端補充的參數后的其他平臺),給爬蟲(chóng)帶來(lái)了很大的麻煩。后來(lái)看到一個(gè)大牛在知乎上用php寫(xiě)的微信公眾號爬取程序按照大佬的思路整理成java。改造過(guò)程中有很多細節問(wèn)題,我就分享一下。系統的基本思路是在安卓模擬器上運行微信,模擬器設置代理,通過(guò)代理服務(wù)器截取微信數據,并將獲取的數據發(fā)送給自己的程序進(jìn)行處理。準備環(huán)境:node 查看全部

  querylist采集微信公眾號文章(Python微信公眾號文章文章爬取的示例代碼一.思路)
  Python微信公眾號文章爬取示例代碼
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面
  
  
  從界面中我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
  二.界面分析
  獲取微信公眾號界面:
  范圍:
  行動(dòng)=search_biz
  開(kāi)始=0
  計數=5
  query=公眾號
  token = 每個(gè)賬戶(hù)對應的token值
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  所以在這個(gè)界面中,我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后可以通過(guò)網(wǎng)頁(yè)鏈接獲取token。
  
  獲取公眾號對應的文章接口:
  范圍:
  行動(dòng)=list_ex
  開(kāi)始=0
  計數=5
  fakeid=MjM5NDAwMTA2MA==
  類(lèi)型=9
  查詢(xún)=
  令牌=557131216
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  在這個(gè)接口中,我們需要獲取的值是上一步的token和fakeid,而這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以得到微信公眾號文章的數據了。
  
  三.實(shí)現
  第一步:
  首先我們需要通過(guò)selenium來(lái)模擬登錄,然后獲取cookie和對應的token
  
def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義了一個(gè)登錄方法,其中的參數是登錄賬號和密碼,然后定義了一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù)輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,登錄微信即可掃碼。
  刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token并返回。
  第2步:
  1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
  
url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲取的token和cookie,然后通過(guò)requests.get請求獲取微信公眾號返回的json數據
  
lists = search_resp.json().get('list')[0]
  通過(guò)以上代碼可以獲取對應的公眾號數據
  
fakeid = lists.get('fakeid')
  通過(guò)上面的代碼,可以得到對應的 fakeid
  2.請求訪(fǎng)問(wèn)微信公眾號文章接口,獲取我們需要的文章數據
  
appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入 fakeid 和 token 然后調用 requests.get 請求接口獲取返回的 json 數據。
  我們實(shí)現了微信公眾號文章的爬取。
  四.總結
  通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,我們在循環(huán)獲取文章的時(shí)候,一定要設置延遲時(shí)間,否則容易被封號,獲取不到返回的數據。
  至此,這篇關(guān)于Python微信公眾號文章爬取示例代碼的文章文章就介紹到這里了。更多相關(guān)Python微信公眾號文章爬取內容,請搜索我們之前的文章或繼續瀏覽下方相關(guān)文章,希望大家以后多多支持!
  時(shí)間:2020-11-27
  基于Python采集爬取微信公眾號歷史數據
  鯤之鵬技術(shù)人員將在本文中通過(guò)模擬微信App的操作,介紹一種采集指定公眾號所有歷史數據的方法。通過(guò)我們的抓包分析,我們發(fā)現微信公眾號的歷史數據是通過(guò)HTTP協(xié)議加載的,對應的API接口如下圖所示,關(guān)鍵參數有四個(gè)(__biz.appmsg_token.pass_ticket和餅干)。為了獲取這四個(gè)參數,我們需要模擬運行App,讓它生成這些參數,然后我們抓包獲取。對于模擬App操作,我們之前已經(jīng)介紹過(guò)通過(guò)Python模擬Android App的方法(詳見(jiàn)詳情)。
  python爬取微信公眾號文章的方法
  最近在學(xué)習Python3網(wǎng)絡(luò )爬蟲(chóng)(崔慶才寫(xiě)的)的開(kāi)發(fā)實(shí)踐,剛剛得知他在這里使用代理爬取了公眾號文章,但是根據他的代碼,還是出現了一些問(wèn)題。我在這里用過(guò)這本書(shū)。對本書(shū)前面提到的一些內容進(jìn)行了改進(jìn)。(作者半年前寫(xiě)的這段代碼,騰訊的網(wǎng)站半年前更新了)我直接加下面代碼:TIMEOUT = 20 from requests import Request, Session, PreparedRequest import requests from selenium import webdrive
  Python如何爬取微信公眾號文章及評論(基于Fiddler抓包分析)
  
  背景描述我覺(jué)得微信公眾號是比較難爬的平臺之一,但是經(jīng)過(guò)一番折騰,還是有一點(diǎn)小收獲。沒(méi)用Scrapy(估計爬太快有防爬限制),不過(guò)后面會(huì )開(kāi)始整理寫(xiě)一些實(shí)戰。. 簡(jiǎn)單介紹一下本次的開(kāi)發(fā)環(huán)境:python3請求psycopg2(操作postgres數據庫)抓包分析本次實(shí)戰對公眾號的抓包沒(méi)有限制,但是每次抓包前都要對不同的公眾號進(jìn)行分析。打開(kāi)Fiddler,在手機上配置相關(guān)代理。為了避免過(guò)多干擾,這里給Fiddler一個(gè)過(guò)濾規則,指定微信域名即可:
  python selenium爬取微信公眾號文章代碼詳解
  參考:selenium webdriver 添加cookies: 需求:想看微信公眾號文章的歷史,但是每次都找地方不方便。思路:1.使用selenium打開(kāi)微信公眾號歷史文章,滾動(dòng)刷新到底部,獲取所有歷史文章url。2.遍歷 url 并下載到本地。實(shí)現1.打開(kāi)微信客戶(hù)端,點(diǎn)擊A微信公眾號-&gt;進(jìn)入公眾號-&gt;打開(kāi)歷史文章鏈接(用瀏覽器打開(kāi)),通過(guò)開(kāi)發(fā)者工具獲取cookie
  Python爬取指定微信公眾號文章
  本文示例分享了python爬取微信公眾號文章的具體代碼,供大家參考。具體內容如下。該方法是依靠 urllib2 庫完成的。首先需要安裝你的python環(huán)境,然后安裝urllib2庫程序的啟動(dòng)方法(返回值為公眾號文章的列表): def openUrl(): print("啟動(dòng)爬蟲(chóng),打開(kāi)搜狗搜索微信界面") # 加載頁(yè)面url = ';s_from=input&amp;query = 被抓取的公眾號名稱(chēng)
  Python爬取微信公眾號文章
  本文示例分享python爬取微信公眾號文章的具體代碼供大家參考,具體內容如下# -*- coding: utf-8 -*- import requests from bs4 import BeautifulSoup from requests .exceptions import RequestException import time import random import MySQLdb import threading import socket import math soc
  Python爬蟲(chóng)_微信公眾號推送信息爬取示例
  
  問(wèn)題描述 使用搜狗微信搜索抓取指定公眾號的最新推送,并將對應網(wǎng)頁(yè)保存到本地。注意,搜狗微信獲取的地址是臨時(shí)鏈接,具有時(shí)效性。公眾號為動(dòng)態(tài)網(wǎng)頁(yè)(JavaScript渲染),使用requests.get()獲取的內容不收錄推送消息。這里使用 selenium+PhantomJS 處理代碼#!/usr/bin/env python3 from selenium import webdriver from datetime import datetime import bs4, requ
  Python使用webdriver爬取微信公眾號
  本文示例分享了python使用webdriver爬取微信公眾號的具體代碼,供大家參考。具體內容如下# -*- 編碼:utf-8 -*- from selenium import webdriver import time import json import requests import re import random #微信公眾號user="" #公眾號密碼password="" #設置需要爬取的公眾號列表 gzlist=['香河微服務(wù)
  Python抓取微信公眾號賬號信息的方法
  搜狗微信搜索提供了兩種關(guān)鍵詞搜索,一種是搜索公眾號文章的內容,另一種是直接搜索微信公眾號。公眾號基本信息可通過(guò)微信公眾號搜索獲取。還有最近發(fā)布的10個(gè)文章,今天就來(lái)?yè)屛⑿殴娞柕馁~號信息爬蟲(chóng)吧。首先通過(guò)首頁(yè)進(jìn)入,可以按類(lèi)別抓取,通過(guò)“查看更多”可以找到頁(yè)面鏈接規則: import requests as req import re reTypes = r'id="pc_\d*" uigs=" (pc_\d*)"&gt;([\s\S]*?)&amp;
  一種使用python itchat包爬取微信好友頭像形成矩形頭像集的方法
  初學(xué)者學(xué)python,一定要干點(diǎn)有趣的事!讓我們從微信開(kāi)始吧!頭像采集示例如下: 可以發(fā)朋友圈開(kāi)始鑒定大賽哈哈~ 廢話(huà)不多說(shuō),直接上代碼,我寫(xiě)了很多評論,大家應該都能看懂 import itchat import os import PIL .Image as Image from os import listdir import math import sys print("請進(jìn)入查詢(xún)模式:0-顯示所有好友頭像,但最終矩形頭像集的最后一行可能不完整:1-頭像集是一個(gè)完整的矩形,但朋友可能不完整,即在0模式下被丟棄
  微信公眾號Java批量獲取方法詳解
  
  最近需要爬取微信公眾號的文章信息。網(wǎng)上搜了一下,發(fā)現微信公眾號爬取的難點(diǎn)在于公眾號文章的鏈接在PC端打不開(kāi),所以用微信自帶的瀏覽器(只能在PC端打開(kāi))得到微信客戶(hù)端補充的參數后的其他平臺),給爬蟲(chóng)帶來(lái)了很大的麻煩。后來(lái)看到一個(gè)大牛在知乎上用php寫(xiě)的微信公眾號爬取程序按照大佬的思路整理成java。改造過(guò)程中有很多細節問(wèn)題,我就分享一下。系統的基本思路是在安卓模擬器上運行微信,模擬器設置代理,通過(guò)代理服務(wù)器截取微信數據,并將獲取的數據發(fā)送給自己的程序進(jìn)行處理。準備環(huán)境:node

querylist采集微信公眾號文章(微信公眾號采集二級目錄生成工具是一款第三版巧妙偽原創(chuàng )來(lái)襲 )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 138 次瀏覽 ? 2022-01-12 08:05 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(微信公眾號采集二級目錄生成工具是一款第三版巧妙偽原創(chuàng )來(lái)襲
)
  微信公眾號采集二級目錄生成工具第三版聰明偽原創(chuàng )來(lái)了】微信公眾號采集+聰明偽原創(chuàng )+多cms版,這個(gè)軟件可以批量偽原創(chuàng ),然后批量偽原創(chuàng )檢查,非常值得注意,請先在本地環(huán)境測試,本軟件不能自動(dòng)編碼。
  軟件說(shuō)明
  1.本軟件的功能:
  適合優(yōu)采云站長(cháng),也適合支持站內做站群的人
  2.運行過(guò)程:
  采集微信文章,然后偽原創(chuàng )點(diǎn)擊這些文章,然后更新到網(wǎng)站。整個(gè)過(guò)程是全自動(dòng)的。無(wú)需打開(kāi)后臺,通過(guò)數據庫發(fā)送。因此,需要生成靜態(tài)頁(yè)面。
  3.與上一版本對比:和之前一樣,微信公眾號在文章采集和采集之后使用了偽原創(chuàng )。不知道這算不算偽原創(chuàng ),但確實(shí)達到了偽原創(chuàng )的效果,
  這個(gè)新版本偽原創(chuàng )的玩法很巧妙,就是翻譯,先中文轉英文,再英文轉中文??上б惶旆g量有限,可以自己換IP解決。(其實(shí)不適合更新太多,一天發(fā)幾篇就OK了,一般如果是老網(wǎng)站的話(huà)。關(guān)鍵詞可以很快排名)
  如何使用
  不建議新手站長(cháng)使用,因為這個(gè)軟件是用來(lái)偷懶的,新手最好不要偷懶。而且,重點(diǎn)是怕新手不懂概念,遇到問(wèn)題也解決不了。然后來(lái)找我。我也很無(wú)能為力,我也是雞。簡(jiǎn)單的問(wèn)題我不想回答。我不會(huì )復雜的。
  我不希望大家停止問(wèn)我,但我希望大家從百度開(kāi)始,不要再問(wèn)了。有時(shí)候同一個(gè)問(wèn)題可能被問(wèn)了很多遍,我就會(huì )發(fā)脾氣。我就是這樣的人,請不要冒犯。還是希望能和大家一起進(jìn)步。
   查看全部

  querylist采集微信公眾號文章(微信公眾號采集二級目錄生成工具是一款第三版巧妙偽原創(chuàng )來(lái)襲
)
  微信公眾號采集二級目錄生成工具第三版聰明偽原創(chuàng )來(lái)了】微信公眾號采集+聰明偽原創(chuàng )+多cms版,這個(gè)軟件可以批量偽原創(chuàng ),然后批量偽原創(chuàng )檢查,非常值得注意,請先在本地環(huán)境測試,本軟件不能自動(dòng)編碼。
  軟件說(shuō)明
  1.本軟件的功能:
  適合優(yōu)采云站長(cháng),也適合支持站內做站群的人
  2.運行過(guò)程:
  采集微信文章,然后偽原創(chuàng )點(diǎn)擊這些文章,然后更新到網(wǎng)站。整個(gè)過(guò)程是全自動(dòng)的。無(wú)需打開(kāi)后臺,通過(guò)數據庫發(fā)送。因此,需要生成靜態(tài)頁(yè)面。
  3.與上一版本對比:和之前一樣,微信公眾號在文章采集和采集之后使用了偽原創(chuàng )。不知道這算不算偽原創(chuàng ),但確實(shí)達到了偽原創(chuàng )的效果,
  這個(gè)新版本偽原創(chuàng )的玩法很巧妙,就是翻譯,先中文轉英文,再英文轉中文??上б惶旆g量有限,可以自己換IP解決。(其實(shí)不適合更新太多,一天發(fā)幾篇就OK了,一般如果是老網(wǎng)站的話(huà)。關(guān)鍵詞可以很快排名)
  如何使用
  不建議新手站長(cháng)使用,因為這個(gè)軟件是用來(lái)偷懶的,新手最好不要偷懶。而且,重點(diǎn)是怕新手不懂概念,遇到問(wèn)題也解決不了。然后來(lái)找我。我也很無(wú)能為力,我也是雞。簡(jiǎn)單的問(wèn)題我不想回答。我不會(huì )復雜的。
  我不希望大家停止問(wèn)我,但我希望大家從百度開(kāi)始,不要再問(wèn)了。有時(shí)候同一個(gè)問(wèn)題可能被問(wèn)了很多遍,我就會(huì )發(fā)脾氣。我就是這樣的人,請不要冒犯。還是希望能和大家一起進(jìn)步。
  

querylist采集微信公眾號文章(糗事百科的幾種方法,你都知道嗎?!)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 109 次瀏覽 ? 2022-01-12 06:05 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(糗事百科的幾種方法,你都知道嗎?!)
  querylist采集微信公眾號文章等信息,也有支持api形式的querylist,比如,糗事百科之前引入了通訊錄的關(guān)注查詢(xún)功能,是基于querylist和api進(jìn)行定制開(kāi)發(fā)的。缺點(diǎn)是,需要使用js實(shí)現url分析、分詞及文章列表返回。另外,糗事百科的支持發(fā)送鏈接時(shí),文章列表不會(huì )變化。(反正糗事百科的querylist的名字就是他們自己起的)[糗事百科querylist](),目前糗事百科還沒(méi)有引入正則表達式,這個(gè)空白是否用正則表達式實(shí)現都是未知數。
  目前糗事百科支持個(gè)人的關(guān)注消息以及對應的項目和網(wǎng)站進(jìn)行分析,對于其他平臺的信息還是需要通過(guò)爬蟲(chóng)工具爬取,而后對應querylist。
  糗事百科的信息分為發(fā)布平臺、各種類(lèi)型的公眾號文章,還有微信公眾號的文章列表信息。
  以糗事百科為例,糗事百科是目前國內最大的發(fā)布平臺,并且存在大量的原創(chuàng )內容,此外還支持api接口,你可以看一下,個(gè)人建議api應該更加靠譜一些,更加方便。
  糗事都倒閉了,人家做querylist的干嘛去了,然后被查了!目前我了解到的糗事百科做的還不錯的除了糗事歷史記錄還有打開(kāi)設備,刪帖時(shí)間等等。
  我也是對糗事百科的其他欄目感興趣,比如糗事玩樂(lè ),糗事笑話(huà),還有種子搜索的信息。我是從糗事百科的公眾號里看到的,其他沒(méi)有詳細看。
  1、糗事密室經(jīng)常有新怪人互懟的,這是我喜歡的一個(gè)玩法,
  2、糗事運轉博覽每日都會(huì )發(fā)圖文消息,
  3、糗事集合經(jīng)常有公司營(yíng)銷(xiāo)信息,
  4、糗事校園糗事百科還有糗事校園有自己的校園班級、單位、公司等集中展示區的聚合頁(yè)
  5、關(guān)注和贊賞其實(shí)來(lái)說(shuō)糗事百科也是一個(gè)輕博客式的網(wǎng)站,可以讓讀者對公司產(chǎn)品等進(jìn)行贊賞。關(guān)注和贊賞的方式也有好幾種,比如用戶(hù)發(fā)送消息,你的朋友或者發(fā)一條評論,其他用戶(hù)點(diǎn)贊就行了。不過(guò)看了一下并不是所有的用戶(hù)都有贊賞的權限,官方說(shuō)是鼓勵用戶(hù)發(fā)錢(qián)來(lái)感謝商家的文章。但是目前看到并沒(méi)有好玩的活動(dòng)和送錢(qián)這種方式,社區應該有更好的活動(dòng)形式來(lái)進(jìn)行內容建設和信息交流,比如通過(guò)用戶(hù)進(jìn)行互動(dòng)活動(dòng)之類(lèi)的??吹叫掳孢€加入了時(shí)事的功能,如果大家都關(guān)注時(shí)事的話(huà)這個(gè)網(wǎng)站還有存在價(jià)值嗎?。
  6、游戲行情這個(gè)功能個(gè)人還在挖掘中??戳艘幌马?yè)面比較簡(jiǎn)單,
  7、招聘聊天這個(gè)功能和招聘行業(yè)有關(guān),
  8、營(yíng)銷(xiāo)軟件行業(yè)這個(gè)欄目應該不會(huì )放很多二維碼吧! 查看全部

  querylist采集微信公眾號文章(糗事百科的幾種方法,你都知道嗎?!)
  querylist采集微信公眾號文章等信息,也有支持api形式的querylist,比如,糗事百科之前引入了通訊錄的關(guān)注查詢(xún)功能,是基于querylist和api進(jìn)行定制開(kāi)發(fā)的。缺點(diǎn)是,需要使用js實(shí)現url分析、分詞及文章列表返回。另外,糗事百科的支持發(fā)送鏈接時(shí),文章列表不會(huì )變化。(反正糗事百科的querylist的名字就是他們自己起的)[糗事百科querylist](),目前糗事百科還沒(méi)有引入正則表達式,這個(gè)空白是否用正則表達式實(shí)現都是未知數。
  目前糗事百科支持個(gè)人的關(guān)注消息以及對應的項目和網(wǎng)站進(jìn)行分析,對于其他平臺的信息還是需要通過(guò)爬蟲(chóng)工具爬取,而后對應querylist。
  糗事百科的信息分為發(fā)布平臺、各種類(lèi)型的公眾號文章,還有微信公眾號的文章列表信息。
  以糗事百科為例,糗事百科是目前國內最大的發(fā)布平臺,并且存在大量的原創(chuàng )內容,此外還支持api接口,你可以看一下,個(gè)人建議api應該更加靠譜一些,更加方便。
  糗事都倒閉了,人家做querylist的干嘛去了,然后被查了!目前我了解到的糗事百科做的還不錯的除了糗事歷史記錄還有打開(kāi)設備,刪帖時(shí)間等等。
  我也是對糗事百科的其他欄目感興趣,比如糗事玩樂(lè ),糗事笑話(huà),還有種子搜索的信息。我是從糗事百科的公眾號里看到的,其他沒(méi)有詳細看。
  1、糗事密室經(jīng)常有新怪人互懟的,這是我喜歡的一個(gè)玩法,
  2、糗事運轉博覽每日都會(huì )發(fā)圖文消息,
  3、糗事集合經(jīng)常有公司營(yíng)銷(xiāo)信息,
  4、糗事校園糗事百科還有糗事校園有自己的校園班級、單位、公司等集中展示區的聚合頁(yè)
  5、關(guān)注和贊賞其實(shí)來(lái)說(shuō)糗事百科也是一個(gè)輕博客式的網(wǎng)站,可以讓讀者對公司產(chǎn)品等進(jìn)行贊賞。關(guān)注和贊賞的方式也有好幾種,比如用戶(hù)發(fā)送消息,你的朋友或者發(fā)一條評論,其他用戶(hù)點(diǎn)贊就行了。不過(guò)看了一下并不是所有的用戶(hù)都有贊賞的權限,官方說(shuō)是鼓勵用戶(hù)發(fā)錢(qián)來(lái)感謝商家的文章。但是目前看到并沒(méi)有好玩的活動(dòng)和送錢(qián)這種方式,社區應該有更好的活動(dòng)形式來(lái)進(jìn)行內容建設和信息交流,比如通過(guò)用戶(hù)進(jìn)行互動(dòng)活動(dòng)之類(lèi)的??吹叫掳孢€加入了時(shí)事的功能,如果大家都關(guān)注時(shí)事的話(huà)這個(gè)網(wǎng)站還有存在價(jià)值嗎?。
  6、游戲行情這個(gè)功能個(gè)人還在挖掘中??戳艘幌马?yè)面比較簡(jiǎn)單,
  7、招聘聊天這個(gè)功能和招聘行業(yè)有關(guān),
  8、營(yíng)銷(xiāo)軟件行業(yè)這個(gè)欄目應該不會(huì )放很多二維碼吧!

querylist采集微信公眾號文章(本文來(lái)自:前端開(kāi)發(fā)者《》鏈接(圖))

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 172 次瀏覽 ? 2022-01-10 11:16 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(本文來(lái)自:前端開(kāi)發(fā)者《》鏈接(圖))
  之前自己維護了一個(gè)公眾號,但是因為個(gè)人關(guān)系,很久沒(méi)有更新了。今天來(lái)緬懷一下,偶然發(fā)現了一個(gè)獲取微信公眾號文章的方法。
  之前的獲取方式有很多??梢酝ㄟ^(guò)搜狗、青博、網(wǎng)頁(yè)、客戶(hù)端等方式使用,這個(gè)可能不如其他的好,但是操作簡(jiǎn)單易懂。
  所以,首先你需要有一個(gè)微信公眾平臺的賬號
  微信公眾平臺:
  
  登錄后進(jìn)入首頁(yè),點(diǎn)擊新建群發(fā)。
  
  選擇自創(chuàng )圖形:
  
  好像是公眾號運營(yíng)教學(xué)
  進(jìn)入編輯頁(yè)面后,單擊超鏈接
  
  彈出選擇框,我們在框中輸入對應的公眾號名稱(chēng),就會(huì )出現對應的文章列表。
  
  可以打開(kāi)控制臺查看請求的界面,這不奇怪嗎
  
  打開(kāi)響應,也就是我們需要的 文章 鏈接
  
  確定數據后,我們需要對接口進(jìn)行分析。
  感覺(jué)很簡(jiǎn)單,一個(gè)GET請求,攜帶一些參數。
  
  fakeid 是公眾號的唯一 ID,所以如果要直接通過(guò)名稱(chēng)獲取 文章 的列表,則需要先獲取 fakeid。
  當我們輸入公眾號名稱(chēng)時(shí),點(diǎn)擊搜索??梢钥吹接|發(fā)了搜索界面,返回了fakeid。
  
  這個(gè)接口不需要很多參數。
  
  接下來(lái),我們可以使用代碼來(lái)模擬上述操作。
  但是,也有必要使用現有的 cookie 來(lái)避免登錄。
  
  當前的cookie過(guò)期日期,我沒(méi)有測試過(guò)??赡苄枰粫r(shí)更新 cookie。
  測試代碼:
  
import requests
import json
Cookie = '請換上自己的Cookie,獲取方法:直接復制下來(lái)'
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
headers = {
"Cookie": Cookie,
"User-Agent": 'Mozilla/5.0 (Linux; Android 10; YAL-AL00 Build/HUAWEIYAL-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.64 HuaweiBrowser/10.0.1.335 Mobile Safari/537.36'
}
keyword = 'pythonlx' # 公眾號名字:可自定義
token = '你的token' # 獲取方法:如上述 直接復制下來(lái)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?action=search_biz&begin=0&count=5&query={}&token={}&lang=zh_CN&f=json&ajax=1'.format(keyword,token)
doc = requests.get(search_url,headers=headers).text
jstext = json.loads(doc)
fakeid = jstext['list'][0]['fakeid']
data = {
"token": token,
"lang": "zh_CN",
"f": "json",
"ajax": "1",
"action": "list_ex",
"begin": 0,
"count": "5",
"query": "",
"fakeid": fakeid,
"type": "9",
}
json_test = requests.get(url, headers=headers, params=data).text
json_test = json.loads(json_test)
print(json_test)
  這樣可以獲取最新的10篇文章文章,如果想獲取更多歷史文章,可以修改data中的“begin”參數,0為第一頁(yè),5為第一頁(yè)第二頁(yè),10 是第三頁(yè)(依此類(lèi)推)
  但如果你想大規模刮:
  請為自己安排一個(gè)穩定的代理,降低爬蟲(chóng)速度,并準備好多個(gè)賬號,以減少被封號的可能性。
  以上就是本文的全部?jì)热?。希望對大家的學(xué)習有所幫助,也希望大家多多支持前端開(kāi)發(fā)者。
  ? 本文來(lái)自:前端開(kāi)發(fā)者 ? 《通過(guò)微信公眾平臺獲取公眾號文章的方法示例_跑到_前端開(kāi)發(fā)者》
  ? 本文鏈接: 查看全部

  querylist采集微信公眾號文章(本文來(lái)自:前端開(kāi)發(fā)者《》鏈接(圖))
  之前自己維護了一個(gè)公眾號,但是因為個(gè)人關(guān)系,很久沒(méi)有更新了。今天來(lái)緬懷一下,偶然發(fā)現了一個(gè)獲取微信公眾號文章的方法。
  之前的獲取方式有很多??梢酝ㄟ^(guò)搜狗、青博、網(wǎng)頁(yè)、客戶(hù)端等方式使用,這個(gè)可能不如其他的好,但是操作簡(jiǎn)單易懂。
  所以,首先你需要有一個(gè)微信公眾平臺的賬號
  微信公眾平臺:
  
  登錄后進(jìn)入首頁(yè),點(diǎn)擊新建群發(fā)。
  
  選擇自創(chuàng )圖形:
  
  好像是公眾號運營(yíng)教學(xué)
  進(jìn)入編輯頁(yè)面后,單擊超鏈接
  
  彈出選擇框,我們在框中輸入對應的公眾號名稱(chēng),就會(huì )出現對應的文章列表。
  
  可以打開(kāi)控制臺查看請求的界面,這不奇怪嗎
  
  打開(kāi)響應,也就是我們需要的 文章 鏈接
  
  確定數據后,我們需要對接口進(jìn)行分析。
  感覺(jué)很簡(jiǎn)單,一個(gè)GET請求,攜帶一些參數。
  
  fakeid 是公眾號的唯一 ID,所以如果要直接通過(guò)名稱(chēng)獲取 文章 的列表,則需要先獲取 fakeid。
  當我們輸入公眾號名稱(chēng)時(shí),點(diǎn)擊搜索??梢钥吹接|發(fā)了搜索界面,返回了fakeid。
  
  這個(gè)接口不需要很多參數。
  
  接下來(lái),我們可以使用代碼來(lái)模擬上述操作。
  但是,也有必要使用現有的 cookie 來(lái)避免登錄。
  
  當前的cookie過(guò)期日期,我沒(méi)有測試過(guò)??赡苄枰粫r(shí)更新 cookie。
  測試代碼:
  
import requests
import json
Cookie = '請換上自己的Cookie,獲取方法:直接復制下來(lái)'
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
headers = {
"Cookie": Cookie,
"User-Agent": 'Mozilla/5.0 (Linux; Android 10; YAL-AL00 Build/HUAWEIYAL-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.64 HuaweiBrowser/10.0.1.335 Mobile Safari/537.36'
}
keyword = 'pythonlx' # 公眾號名字:可自定義
token = '你的token' # 獲取方法:如上述 直接復制下來(lái)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?action=search_biz&begin=0&count=5&query={}&token={}&lang=zh_CN&f=json&ajax=1'.format(keyword,token)
doc = requests.get(search_url,headers=headers).text
jstext = json.loads(doc)
fakeid = jstext['list'][0]['fakeid']
data = {
"token": token,
"lang": "zh_CN",
"f": "json",
"ajax": "1",
"action": "list_ex",
"begin": 0,
"count": "5",
"query": "",
"fakeid": fakeid,
"type": "9",
}
json_test = requests.get(url, headers=headers, params=data).text
json_test = json.loads(json_test)
print(json_test)
  這樣可以獲取最新的10篇文章文章,如果想獲取更多歷史文章,可以修改data中的“begin”參數,0為第一頁(yè),5為第一頁(yè)第二頁(yè),10 是第三頁(yè)(依此類(lèi)推)
  但如果你想大規模刮:
  請為自己安排一個(gè)穩定的代理,降低爬蟲(chóng)速度,并準備好多個(gè)賬號,以減少被封號的可能性。
  以上就是本文的全部?jì)热?。希望對大家的學(xué)習有所幫助,也希望大家多多支持前端開(kāi)發(fā)者。
  ? 本文來(lái)自:前端開(kāi)發(fā)者 ? 《通過(guò)微信公眾平臺獲取公眾號文章的方法示例_跑到_前端開(kāi)發(fā)者》
  ? 本文鏈接:

querylist采集微信公眾號文章(2018年7月20日更新:1.即刻APP(該方法已失效))

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 157 次瀏覽 ? 2022-01-10 11:16 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(2018年7月20日更新:1.即刻APP(該方法已失效))
  2018 年 7 月 20 日更新
  因為微廣場(chǎng)是封閉的,我又寫(xiě)了一篇文章文章,看看這些方法能不能滿(mǎn)足你的需求,文章的內容如下:
  本文將為您介紹幾種訂閱微信公眾號的絕佳方式。相信總有一款適合你(強烈推薦最后一種方法)。為了衡量這些方法的優(yōu)缺點(diǎn),我將使用以下三個(gè)公眾號進(jìn)行測試:
  1. Instant APP(此方法已過(guò)期)
<p>在聚合應用程序中,我認為立即執行是最好的。我從2015年就開(kāi)始用這個(gè)APP了,應該是第一批用戶(hù)。從一開(kāi)始只有一些手動(dòng)篩選的主題,到現在用戶(hù)可以自定義主題,功能越來(lái)越強大。在我之前的 查看全部

  querylist采集微信公眾號文章(2018年7月20日更新:1.即刻APP(該方法已失效))
  2018 年 7 月 20 日更新
  因為微廣場(chǎng)是封閉的,我又寫(xiě)了一篇文章文章,看看這些方法能不能滿(mǎn)足你的需求,文章的內容如下:
  本文將為您介紹幾種訂閱微信公眾號的絕佳方式。相信總有一款適合你(強烈推薦最后一種方法)。為了衡量這些方法的優(yōu)缺點(diǎn),我將使用以下三個(gè)公眾號進(jìn)行測試:
  1. Instant APP(此方法已過(guò)期)
<p>在聚合應用程序中,我認為立即執行是最好的。我從2015年就開(kāi)始用這個(gè)APP了,應該是第一批用戶(hù)。從一開(kāi)始只有一些手動(dòng)篩選的主題,到現在用戶(hù)可以自定義主題,功能越來(lái)越強大。在我之前的

querylist采集微信公眾號文章(微信公眾號文章的圖片無(wú)法直接復制到WordPress中的應用)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 155 次瀏覽 ? 2022-01-09 10:09 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(微信公眾號文章的圖片無(wú)法直接復制到WordPress中的應用)
  相信很多微信公眾號作者(個(gè)人、組織、公司)不僅在微信公眾平臺上發(fā)文,通常文章會(huì )在多個(gè)平臺上推送,比如今日頭條、知乎欄目、簡(jiǎn)書(shū)等等,甚至還有自己的網(wǎng)站(官網(wǎng)),但是在多個(gè)平臺上發(fā)布文章是一件非常耗時(shí)的工作。
  大多數 網(wǎng)站 構建都基于 WordPress,因為該平臺非常簡(jiǎn)單實(shí)用,并且有大量插件。因此,我也不例外。當我選擇建站系統時(shí),首先選擇的是 WordPress。不過(guò)我經(jīng)常寫(xiě)文章發(fā)現一個(gè)問(wèn)題,就是每次在公眾號寫(xiě)文章,我把文章@文章手動(dòng)復制到WordPress上,復制文字沒(méi)什么,但是復制圖片會(huì )害死我,微信公眾號文章的圖片不能直接復制到WordPress,會(huì )顯示為“無(wú)法顯示。這張圖片”,因為微信已對圖片實(shí)施防盜鏈措施。
  這時(shí)候我嘗試搜索了這樣一個(gè)插件,可以通過(guò)粘貼公眾號文章的鏈接直接將內容導入WordPress,并將圖片下載到本地(媒體庫),我搜索到找到了一個(gè)叫Little Bee的插件。試了之后,感覺(jué)見(jiàn)面晚了。書(shū)籍,知乎欄目中的文章,還有多種豐富的可選功能,果斷聯(lián)系作者索要授權碼。
  使用起來(lái)也很簡(jiǎn)單,只要粘貼鏈接,就可以同時(shí)導入多個(gè)文章,也就是批量導入功能。
  如果下載了,可以直接在安裝插件頁(yè)面搜索小蜜蜂就可以看到了。 查看全部

  querylist采集微信公眾號文章(微信公眾號文章的圖片無(wú)法直接復制到WordPress中的應用)
  相信很多微信公眾號作者(個(gè)人、組織、公司)不僅在微信公眾平臺上發(fā)文,通常文章會(huì )在多個(gè)平臺上推送,比如今日頭條、知乎欄目、簡(jiǎn)書(shū)等等,甚至還有自己的網(wǎng)站(官網(wǎng)),但是在多個(gè)平臺上發(fā)布文章是一件非常耗時(shí)的工作。
  大多數 網(wǎng)站 構建都基于 WordPress,因為該平臺非常簡(jiǎn)單實(shí)用,并且有大量插件。因此,我也不例外。當我選擇建站系統時(shí),首先選擇的是 WordPress。不過(guò)我經(jīng)常寫(xiě)文章發(fā)現一個(gè)問(wèn)題,就是每次在公眾號寫(xiě)文章,我把文章@文章手動(dòng)復制到WordPress上,復制文字沒(méi)什么,但是復制圖片會(huì )害死我,微信公眾號文章的圖片不能直接復制到WordPress,會(huì )顯示為“無(wú)法顯示。這張圖片”,因為微信已對圖片實(shí)施防盜鏈措施。
  這時(shí)候我嘗試搜索了這樣一個(gè)插件,可以通過(guò)粘貼公眾號文章的鏈接直接將內容導入WordPress,并將圖片下載到本地(媒體庫),我搜索到找到了一個(gè)叫Little Bee的插件。試了之后,感覺(jué)見(jiàn)面晚了。書(shū)籍,知乎欄目中的文章,還有多種豐富的可選功能,果斷聯(lián)系作者索要授權碼。
  使用起來(lái)也很簡(jiǎn)單,只要粘貼鏈接,就可以同時(shí)導入多個(gè)文章,也就是批量導入功能。
  如果下載了,可以直接在安裝插件頁(yè)面搜索小蜜蜂就可以看到了。

querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 154 次瀏覽 ? 2022-01-08 14:08 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。我在網(wǎng)上搜索,發(fā)現爬取微信公眾號的難點(diǎn)在于公眾號文章的鏈接在PC端打不開(kāi),所以需要使用微信自帶的瀏覽器(獲取參數微信客戶(hù)端補充)可以在其他平臺打開(kāi)),給爬蟲(chóng)帶來(lái)了很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,直接按照大佬的思路做成了java。改造過(guò)程中遇到了很多細節和問(wèn)題,就分享給大家。
  附上大牛的鏈接文章:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè)。這些想法寫(xiě)得很詳細。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------------
  系統的基本思路是在A(yíng)ndroid模擬器上運行微信,在模擬器上設置代理,通過(guò)代理服務(wù)器截取微信數據,將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、安卓模擬器
  Nodejs下載地址:我下載的是windows版本的,直接安裝就好了。安裝后直接運行 C:\Program Files\nodejs\npm.cmd 會(huì )自動(dòng)配置環(huán)境。
  anyproxy安裝:按照上一步安裝nodejs后,直接在cmd中運行npm install -g anyproxy即可安裝
  網(wǎng)上的安卓模擬器就好了,有很多。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------------------------
  首先安裝代理服務(wù)器的證書(shū)。Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后,就可以解析了。在cmd中執行anyproxy --root安裝證書(shū),然后在模擬器中下載證書(shū)。
  然后輸入anyproxy -i 命令打開(kāi)代理服務(wù)。(記得添加參數?。?br />   
  記住這個(gè)ip和端口,那么安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用來(lái)顯示http傳輸的數據。
  
  點(diǎn)擊上方紅框中的菜單,會(huì )出現一個(gè)二維碼。用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
  現在準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
  
  準備工作到這里基本完成。在模擬器上打開(kāi)微信,打開(kāi)一個(gè)公眾號的文章,就可以從剛剛打開(kāi)的web界面看到anyproxy抓取的數據:
  
  上圖紅框是微信文章的鏈接,點(diǎn)擊查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果頂部清晰,您可以向下。
  這里我們依靠代理服務(wù)來(lái)抓取微信數據,但是我們不能抓取一條數據自己操作微信,所以還是手動(dòng)復制比較好。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)可以使用anyproxy攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下的文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫做replaceServerResDataAsync: function(req,res,serverResData,callback)。該方法負責對anyproxy獲取的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚。順著(zhù)邏輯去理解就好,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require(&#39;http&#39;);
11 http.get(&#39;http://xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on(&#39;data&#39;, function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \&#39;(.*?)\&#39;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require(&#39;http&#39;);
36 http.get(&#39;xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on(&#39;data&#39;, function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require(&#39;http&#39;);
65 http.get(&#39;http://xxx/getWxPost&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on(&#39;data&#39;, function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這是一個(gè)簡(jiǎn)短的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以向下滾動(dòng)。向下滾動(dòng)會(huì )觸發(fā)js事件發(fā)送請求獲取json數據(下一頁(yè)的內容)。還有公眾號文章的鏈接,以及文章的閱讀和點(diǎn)贊鏈接(返回json數據)。這些環(huán)節的形式是固定的,可以通過(guò)邏輯判斷加以區分。這里有個(gè)問(wèn)題,如果歷史頁(yè)面需要一路爬取怎么辦。我的想法是通過(guò)js模擬鼠標向下滑動(dòng),從而觸發(fā)請求提交下一部分列表的加載?;蛘咧苯邮褂胊nyproxy分析下載請求,直接向微信服務(wù)器發(fā)出這個(gè)請求。但是有一個(gè)問(wèn)題是如何判斷沒(méi)有剩余數據。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)要求,但以后可能需要。如果需要,您可以嘗試一下。 查看全部

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。我在網(wǎng)上搜索,發(fā)現爬取微信公眾號的難點(diǎn)在于公眾號文章的鏈接在PC端打不開(kāi),所以需要使用微信自帶的瀏覽器(獲取參數微信客戶(hù)端補充)可以在其他平臺打開(kāi)),給爬蟲(chóng)帶來(lái)了很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,直接按照大佬的思路做成了java。改造過(guò)程中遇到了很多細節和問(wèn)題,就分享給大家。
  附上大牛的鏈接文章:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè)。這些想法寫(xiě)得很詳細。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------------
  系統的基本思路是在A(yíng)ndroid模擬器上運行微信,在模擬器上設置代理,通過(guò)代理服務(wù)器截取微信數據,將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、安卓模擬器
  Nodejs下載地址:我下載的是windows版本的,直接安裝就好了。安裝后直接運行 C:\Program Files\nodejs\npm.cmd 會(huì )自動(dòng)配置環(huán)境。
  anyproxy安裝:按照上一步安裝nodejs后,直接在cmd中運行npm install -g anyproxy即可安裝
  網(wǎng)上的安卓模擬器就好了,有很多。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------------------------
  首先安裝代理服務(wù)器的證書(shū)。Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后,就可以解析了。在cmd中執行anyproxy --root安裝證書(shū),然后在模擬器中下載證書(shū)。
  然后輸入anyproxy -i 命令打開(kāi)代理服務(wù)。(記得添加參數?。?br />   
  記住這個(gè)ip和端口,那么安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用來(lái)顯示http傳輸的數據。
  
  點(diǎn)擊上方紅框中的菜單,會(huì )出現一個(gè)二維碼。用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
  現在準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
  
  準備工作到這里基本完成。在模擬器上打開(kāi)微信,打開(kāi)一個(gè)公眾號的文章,就可以從剛剛打開(kāi)的web界面看到anyproxy抓取的數據:
  
  上圖紅框是微信文章的鏈接,點(diǎn)擊查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果頂部清晰,您可以向下。
  這里我們依靠代理服務(wù)來(lái)抓取微信數據,但是我們不能抓取一條數據自己操作微信,所以還是手動(dòng)復制比較好。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)可以使用anyproxy攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下的文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫做replaceServerResDataAsync: function(req,res,serverResData,callback)。該方法負責對anyproxy獲取的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚。順著(zhù)邏輯去理解就好,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require(&#39;http&#39;);
11 http.get(&#39;http://xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on(&#39;data&#39;, function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \&#39;(.*?)\&#39;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require(&#39;http&#39;);
36 http.get(&#39;xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on(&#39;data&#39;, function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require(&#39;http&#39;);
65 http.get(&#39;http://xxx/getWxPost&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on(&#39;data&#39;, function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這是一個(gè)簡(jiǎn)短的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以向下滾動(dòng)。向下滾動(dòng)會(huì )觸發(fā)js事件發(fā)送請求獲取json數據(下一頁(yè)的內容)。還有公眾號文章的鏈接,以及文章的閱讀和點(diǎn)贊鏈接(返回json數據)。這些環(huán)節的形式是固定的,可以通過(guò)邏輯判斷加以區分。這里有個(gè)問(wèn)題,如果歷史頁(yè)面需要一路爬取怎么辦。我的想法是通過(guò)js模擬鼠標向下滑動(dòng),從而觸發(fā)請求提交下一部分列表的加載?;蛘咧苯邮褂胊nyproxy分析下載請求,直接向微信服務(wù)器發(fā)出這個(gè)請求。但是有一個(gè)問(wèn)題是如何判斷沒(méi)有剩余數據。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)要求,但以后可能需要。如果需要,您可以嘗試一下。

querylist采集微信公眾號文章(querylist中實(shí)現自動(dòng)化采集2采集微信公眾號文章的實(shí)現流程)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 136 次瀏覽 ? 2022-01-08 01:02 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(querylist中實(shí)現自動(dòng)化采集2采集微信公眾號文章的實(shí)現流程)
  querylist采集微信公眾號文章,在python中實(shí)現自動(dòng)化采集2采集微信公眾號文章的實(shí)現流程1。獲取微信公眾號文章列表(list_pass_folds)、文章標題和文章描述采用fullurl函數2采集的數據格式3數據封裝加載,檢查數據規模4數據清洗分析python的相關(guān)工具包的使用:注意,在使用python自己的工具包以前,需要先安裝pympi,pipinstallpympiimportpandasaspdimportcollectionsfromsklearn。metricsimportroc_auc_scoreasroc_auc_score#。 查看全部

  querylist采集微信公眾號文章(querylist中實(shí)現自動(dòng)化采集2采集微信公眾號文章的實(shí)現流程)
  querylist采集微信公眾號文章,在python中實(shí)現自動(dòng)化采集2采集微信公眾號文章的實(shí)現流程1。獲取微信公眾號文章列表(list_pass_folds)、文章標題和文章描述采用fullurl函數2采集的數據格式3數據封裝加載,檢查數據規模4數據清洗分析python的相關(guān)工具包的使用:注意,在使用python自己的工具包以前,需要先安裝pympi,pipinstallpympiimportpandasaspdimportcollectionsfromsklearn。metricsimportroc_auc_scoreasroc_auc_score#。

querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 175 次瀏覽 ? 2022-01-06 17:06 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。上網(wǎng)查了一下,發(fā)現微信公眾號的難點(diǎn)是公眾號文章的鏈接在PC端打不開(kāi)。必須使用微信自帶的瀏覽器(獲取微信客戶(hù)端的補充參數,才能在其他平臺打開(kāi)),給爬蟲(chóng)程序帶來(lái)很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,直接按照大牛的思路做了成java。改造過(guò)程中遇到了很多細節問(wèn)題,分享給大家。
  附上大牛文章的鏈接:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè),思路很詳細。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -----------------------
  該系統的基本思想是在A(yíng)ndroid模擬器上運行微信,模擬器設置一個(gè)代理,通過(guò)代理服務(wù)器攔截微信數據,并將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
  nodejs下載地址:我下載的是windows版本的,直接安裝就可以了。安裝完成后,直接運行C:\Program Files\nodejs\npm.cmd 自動(dòng)配置環(huán)境。
  Anyproxy安裝:上一步安裝好nodejs后,在cmd中直接運行npm install -g anyproxy即可安裝
  網(wǎng)上隨便跟著(zhù)安卓模擬器就行了,很多。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------------
  首先安裝代理服務(wù)器的證書(shū)。Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后即可解決。在 cmd 中執行 anyproxy --root 將安裝證書(shū)。之后,您必須在模擬器上下載證書(shū)。
  然后輸入anyproxy -i 命令開(kāi)啟代理服務(wù)。(記得加參數?。?br />   
  記住這個(gè)ip和端口,然后安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用于顯示http傳輸數據。
  
  點(diǎn)擊上方紅框中的菜單,會(huì )顯示一個(gè)二維碼。使用安卓模擬器掃碼識別。模擬器(手機)將下載證書(shū)并安裝它。
  現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
  
  至此,準備工作基本完成,在模擬器上打開(kāi)微信,開(kāi)通公眾號文章,從剛剛打開(kāi)的web界面就可以看到anyproxy抓取到的數據了:
  
  上面紅框里是微信文章的鏈接,點(diǎn)進(jìn)去查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果一切順利,你就可以下去了。
  這里我們依靠代理服務(wù)來(lái)抓取微信數據,但不能隨便抓取一條數據,自己操作微信。最好手動(dòng)復制。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)候可以使用anyproxy來(lái)攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫做 replaceServerResDataAsync: function(req,res,serverResData,callback)。該方法負責對anyproxy獲得的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚,按照邏輯來(lái)理解就好了,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require(&#39;http&#39;);
11 http.get(&#39;http://xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on(&#39;data&#39;, function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \&#39;(.*?)\&#39;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require(&#39;http&#39;);
36 http.get(&#39;xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on(&#39;data&#39;, function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require(&#39;http&#39;);
65 http.get(&#39;http://xxx/getWxPost&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on(&#39;data&#39;, function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這里是一個(gè)簡(jiǎn)短的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以關(guān)閉。如果被拒絕,則會(huì )觸發(fā)一個(gè)js事件,發(fā)送獲取json數據(下一頁(yè)內容)的??請求。還有公眾號文章的鏈接,以及文章的閱讀量和喜歡的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷來(lái)區分。這里的問(wèn)題是,如果所有的歷史頁(yè)面都需要爬取,怎么做。我的想法是模擬鼠標滑過(guò)js觸發(fā)提交加載列表下一部分的請求?;蛘咧苯邮褂胊nyproxy來(lái)分析滑動(dòng)加載的請求,并將請求直接發(fā)送到微信服務(wù)器。但是如何判斷沒(méi)有剩余數據一直存在問(wèn)題。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)需求,以后可能需要。有需要的可以試試。 查看全部

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。上網(wǎng)查了一下,發(fā)現微信公眾號的難點(diǎn)是公眾號文章的鏈接在PC端打不開(kāi)。必須使用微信自帶的瀏覽器(獲取微信客戶(hù)端的補充參數,才能在其他平臺打開(kāi)),給爬蟲(chóng)程序帶來(lái)很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,直接按照大牛的思路做了成java。改造過(guò)程中遇到了很多細節問(wèn)題,分享給大家。
  附上大牛文章的鏈接:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè),思路很詳細。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -----------------------
  該系統的基本思想是在A(yíng)ndroid模擬器上運行微信,模擬器設置一個(gè)代理,通過(guò)代理服務(wù)器攔截微信數據,并將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
  nodejs下載地址:我下載的是windows版本的,直接安裝就可以了。安裝完成后,直接運行C:\Program Files\nodejs\npm.cmd 自動(dòng)配置環(huán)境。
  Anyproxy安裝:上一步安裝好nodejs后,在cmd中直接運行npm install -g anyproxy即可安裝
  網(wǎng)上隨便跟著(zhù)安卓模擬器就行了,很多。
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------------
  首先安裝代理服務(wù)器的證書(shū)。Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后即可解決。在 cmd 中執行 anyproxy --root 將安裝證書(shū)。之后,您必須在模擬器上下載證書(shū)。
  然后輸入anyproxy -i 命令開(kāi)啟代理服務(wù)。(記得加參數?。?br />   
  記住這個(gè)ip和端口,然后安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用于顯示http傳輸數據。
  
  點(diǎn)擊上方紅框中的菜單,會(huì )顯示一個(gè)二維碼。使用安卓模擬器掃碼識別。模擬器(手機)將下載證書(shū)并安裝它。
  現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
  
  至此,準備工作基本完成,在模擬器上打開(kāi)微信,開(kāi)通公眾號文章,從剛剛打開(kāi)的web界面就可以看到anyproxy抓取到的數據了:
  
  上面紅框里是微信文章的鏈接,點(diǎn)進(jìn)去查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果一切順利,你就可以下去了。
  這里我們依靠代理服務(wù)來(lái)抓取微信數據,但不能隨便抓取一條數據,自己操作微信。最好手動(dòng)復制。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)候可以使用anyproxy來(lái)攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫做 replaceServerResDataAsync: function(req,res,serverResData,callback)。該方法負責對anyproxy獲得的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚,按照邏輯來(lái)理解就好了,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require(&#39;http&#39;);
11 http.get(&#39;http://xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on(&#39;data&#39;, function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \&#39;(.*?)\&#39;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require(&#39;http&#39;);
36 http.get(&#39;xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on(&#39;data&#39;, function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require(&#39;http&#39;);
65 http.get(&#39;http://xxx/getWxPost&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on(&#39;data&#39;, function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這里是一個(gè)簡(jiǎn)短的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以關(guān)閉。如果被拒絕,則會(huì )觸發(fā)一個(gè)js事件,發(fā)送獲取json數據(下一頁(yè)內容)的??請求。還有公眾號文章的鏈接,以及文章的閱讀量和喜歡的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷來(lái)區分。這里的問(wèn)題是,如果所有的歷史頁(yè)面都需要爬取,怎么做。我的想法是模擬鼠標滑過(guò)js觸發(fā)提交加載列表下一部分的請求?;蛘咧苯邮褂胊nyproxy來(lái)分析滑動(dòng)加載的請求,并將請求直接發(fā)送到微信服務(wù)器。但是如何判斷沒(méi)有剩余數據一直存在問(wèn)題。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)需求,以后可能需要。有需要的可以試試。

querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 148 次瀏覽 ? 2022-01-04 06:16 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。上網(wǎng)查了一下,發(fā)現微信公眾號的難點(diǎn)是公眾號文章的鏈接在PC端打不開(kāi)。必須使用微信自帶的瀏覽器(獲取微信客戶(hù)端的補充參數,才能在其他平臺打開(kāi)),給爬蟲(chóng)程序帶來(lái)很大的麻煩。后來(lái)在知乎上看到了一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,他按照大佬的思路直接做了java。改造過(guò)程中遇到了很多細節問(wèn)題,分享給大家。
  附上大牛的鏈接文章:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè)。這些想法寫(xiě)得很詳細。
  ----------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------
  系統的基本思想是在安卓模擬器上運行微信。模擬器設置代理,通過(guò)代理服務(wù)器攔截微信數據,并將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
  nodejs下載地址:我下載的是windows版本的,直接下載安裝就可以了。安裝完成后直接運行C:\Program Files\nodejs\npm.cmd自動(dòng)配置環(huán)境。
  anyproxy安裝:上一步安裝好nodejs后,在cmd中直接運行npm install -g anyproxy就會(huì )安裝
  互聯(lián)網(wǎng)上只有一個(gè) Android 模擬器,很多。
  ----------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------------------------------
  首先安裝代理服務(wù)器的證書(shū)。 Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后即可解決。在 cmd 中執行 anyproxy --root 將安裝證書(shū)。之后,您必須在模擬器上下載證書(shū)。
  然后輸入anyproxy -i命令開(kāi)啟代理服務(wù)。 (記得加參數?。?br />   
  記住這個(gè)ip和端口,然后安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用于展示http傳輸數據。
  
  點(diǎn)擊上方紅框中的菜單,會(huì )顯示一個(gè)二維碼。使用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
  現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器ip,端口為8001
  
  準備工作到此基本完成。在模擬器上打開(kāi)微信,開(kāi)通公眾號文章。您可以從剛打開(kāi)的網(wǎng)頁(yè)界面看到 anyproxy 捕獲的數據:
  
  上面紅框里是微信文章的鏈接,點(diǎn)進(jìn)去查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果一切順利,你就可以下去了。
  這里我們依靠代理服務(wù)來(lái)抓取微信數據,但是我們不能抓取一條數據,只能自己操作微信。最好手動(dòng)復制。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)候可以使用anyproxy來(lái)攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫replaceServerResDataAsync:function(req,res,serverResData,callback)。該方法負責對anyproxy獲得的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚,按照邏輯來(lái)理解就好了,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require(&#39;http&#39;);
11 http.get(&#39;http://xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on(&#39;data&#39;, function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \&#39;(.*?)\&#39;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require(&#39;http&#39;);
36 http.get(&#39;xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on(&#39;data&#39;, function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require(&#39;http&#39;);
65 http.get(&#39;http://xxx/getWxPost&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on(&#39;data&#39;, function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這里是一個(gè)簡(jiǎn)單的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以關(guān)閉。如果被拒絕,則會(huì )觸發(fā)一個(gè)js事件,發(fā)送獲取json數據(下一頁(yè)內容)的??請求。還有公眾號文章的鏈接,以及文章的閱讀量和喜歡的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷來(lái)區分。這里的問(wèn)題是,如果所有的歷史頁(yè)面都需要爬取,怎么做。我的想法是模擬鼠標滑過(guò)js觸發(fā)提交加載列表下一部分的請求?;蛘咧苯邮褂胊nyproxy分析滑動(dòng)加載請求,直接將請求發(fā)送到微信服務(wù)器。但是如何判斷沒(méi)有剩余數據一直存在問(wèn)題。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)需求,以后可能需要。有需要的可以試試。 查看全部

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。上網(wǎng)查了一下,發(fā)現微信公眾號的難點(diǎn)是公眾號文章的鏈接在PC端打不開(kāi)。必須使用微信自帶的瀏覽器(獲取微信客戶(hù)端的補充參數,才能在其他平臺打開(kāi)),給爬蟲(chóng)程序帶來(lái)很大的麻煩。后來(lái)在知乎上看到了一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,他按照大佬的思路直接做了java。改造過(guò)程中遇到了很多細節問(wèn)題,分享給大家。
  附上大牛的鏈接文章:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè)。這些想法寫(xiě)得很詳細。
  ----------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------
  系統的基本思想是在安卓模擬器上運行微信。模擬器設置代理,通過(guò)代理服務(wù)器攔截微信數據,并將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
  nodejs下載地址:我下載的是windows版本的,直接下載安裝就可以了。安裝完成后直接運行C:\Program Files\nodejs\npm.cmd自動(dòng)配置環(huán)境。
  anyproxy安裝:上一步安裝好nodejs后,在cmd中直接運行npm install -g anyproxy就會(huì )安裝
  互聯(lián)網(wǎng)上只有一個(gè) Android 模擬器,很多。
  ----------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------------------------------
  首先安裝代理服務(wù)器的證書(shū)。 Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后即可解決。在 cmd 中執行 anyproxy --root 將安裝證書(shū)。之后,您必須在模擬器上下載證書(shū)。
  然后輸入anyproxy -i命令開(kāi)啟代理服務(wù)。 (記得加參數?。?br />   
  記住這個(gè)ip和端口,然后安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用于展示http傳輸數據。
  
  點(diǎn)擊上方紅框中的菜單,會(huì )顯示一個(gè)二維碼。使用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
  現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器ip,端口為8001
  
  準備工作到此基本完成。在模擬器上打開(kāi)微信,開(kāi)通公眾號文章。您可以從剛打開(kāi)的網(wǎng)頁(yè)界面看到 anyproxy 捕獲的數據:
  
  上面紅框里是微信文章的鏈接,點(diǎn)進(jìn)去查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果一切順利,你就可以下去了。
  這里我們依靠代理服務(wù)來(lái)抓取微信數據,但是我們不能抓取一條數據,只能自己操作微信。最好手動(dòng)復制。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)候可以使用anyproxy來(lái)攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫replaceServerResDataAsync:function(req,res,serverResData,callback)。該方法負責對anyproxy獲得的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚,按照邏輯來(lái)理解就好了,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require(&#39;http&#39;);
11 http.get(&#39;http://xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on(&#39;data&#39;, function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \&#39;(.*?)\&#39;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require(&#39;http&#39;);
36 http.get(&#39;xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on(&#39;data&#39;, function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require(&#39;http&#39;);
65 http.get(&#39;http://xxx/getWxPost&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on(&#39;data&#39;, function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這里是一個(gè)簡(jiǎn)單的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以關(guān)閉。如果被拒絕,則會(huì )觸發(fā)一個(gè)js事件,發(fā)送獲取json數據(下一頁(yè)內容)的??請求。還有公眾號文章的鏈接,以及文章的閱讀量和喜歡的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷來(lái)區分。這里的問(wèn)題是,如果所有的歷史頁(yè)面都需要爬取,怎么做。我的想法是模擬鼠標滑過(guò)js觸發(fā)提交加載列表下一部分的請求?;蛘咧苯邮褂胊nyproxy分析滑動(dòng)加載請求,直接將請求發(fā)送到微信服務(wù)器。但是如何判斷沒(méi)有剩余數據一直存在問(wèn)題。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)需求,以后可能需要。有需要的可以試試。

querylist采集微信公眾號文章(rjava采集微信公眾號文章的有效性)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 202 次瀏覽 ? 2022-01-03 04:01 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(rjava采集微信公眾號文章的有效性)
  querylist采集微信公眾號文章,大文本、小文本都可以,按詞抓取,點(diǎn)擊率高,方便。
  樓上的沒(méi)有提及全面!有人提到wordtab:
  目前幾個(gè)平臺中,微博爬蟲(chóng)你可以用scrapy,
  既然你那么肯定有效,不妨把數據轉接一下,非對稱(chēng)加密,或者使用hashify、密碼管理。
  推薦你看看rjava博客提到的nodejs微信爬蟲(chóng)
  wordtab,爬取微信公眾號的文章,不限文本類(lèi)型,
  可以使用公眾號熱文爬蟲(chóng)的spider.py,請看博文,自己改動(dòng)注釋和模板功能,
  沒(méi)有人說(shuō)wordtab嗎?-python
  lxml+xpath
  大部分都是需要導入數據庫查詢(xún)的,
  最適合中文的爬蟲(chóng)網(wǎng)站lxml+xpath
  wordtab不錯
  有人說(shuō)wordtab?
  最大的還是lxml+xpath,htmlfield,關(guān)鍵詞,tag,openpyxl如果后端功能都有比較全了,可以考慮beautifulsoup。
  wordtab可以抓取javascript各種網(wǎng)頁(yè)
  wordtab最合適了,beautifulsoup框架,然后直接轉word,
  數據庫操作必須有book_field_tag_meta字段,否則爬到的基本都是有機體。 查看全部

  querylist采集微信公眾號文章(rjava采集微信公眾號文章的有效性)
  querylist采集微信公眾號文章,大文本、小文本都可以,按詞抓取,點(diǎn)擊率高,方便。
  樓上的沒(méi)有提及全面!有人提到wordtab:
  目前幾個(gè)平臺中,微博爬蟲(chóng)你可以用scrapy,
  既然你那么肯定有效,不妨把數據轉接一下,非對稱(chēng)加密,或者使用hashify、密碼管理。
  推薦你看看rjava博客提到的nodejs微信爬蟲(chóng)
  wordtab,爬取微信公眾號的文章,不限文本類(lèi)型,
  可以使用公眾號熱文爬蟲(chóng)的spider.py,請看博文,自己改動(dòng)注釋和模板功能,
  沒(méi)有人說(shuō)wordtab嗎?-python
  lxml+xpath
  大部分都是需要導入數據庫查詢(xún)的,
  最適合中文的爬蟲(chóng)網(wǎng)站lxml+xpath
  wordtab不錯
  有人說(shuō)wordtab?
  最大的還是lxml+xpath,htmlfield,關(guān)鍵詞,tag,openpyxl如果后端功能都有比較全了,可以考慮beautifulsoup。
  wordtab可以抓取javascript各種網(wǎng)頁(yè)
  wordtab最合適了,beautifulsoup框架,然后直接轉word,
  數據庫操作必須有book_field_tag_meta字段,否則爬到的基本都是有機體。

querylist采集微信公眾號文章( 搜狗微信公眾號實(shí)操訓練 )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 140 次瀏覽 ? 2022-01-02 04:12 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(
搜狗微信公眾號實(shí)操訓練
)
  爬取公眾號文章
  項目介紹
  公眾號是我最喜歡的學(xué)習方式之一。我經(jīng)常關(guān)注一些技巧文章進(jìn)行實(shí)踐訓練。所以打算做一段時(shí)間的公眾號爬取文章。
  這里我們使用selenium庫通過(guò)搜狗微信網(wǎng)址獲取相關(guān)文章內容:
  搜狗微信網(wǎng)址
  頁(yè)面詳情
  我們發(fā)現有一個(gè)登錄按鈕可以進(jìn)入頁(yè)面。如果我們不登錄,我們只能查看10頁(yè)的內容。如果內容很多,10頁(yè)是不夠的。
  
  這里我設置睡眠時(shí)間為20秒,微信掃碼登錄;然后我會(huì )進(jìn)行后續的操作。
  driver.find_element_by_id("loginBtn").click()
time.sleep(20) #休眠20秒進(jìn)行微信掃碼登錄操作
  
  接下來(lái)就是輸入我們要搜索的相關(guān)內容文章
  我使用顯示等待。如果超過(guò)10秒沒(méi)有找到對應的內容,則表示不存在。
  input = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.NAME,&#39;query&#39;)))
input.send_keys("python") #模擬輸入
driver.find_element_by_xpath("//input[@class=&#39;swz&#39;]").click()#模擬點(diǎn)擊
  
  最后一步是爬取對應的文章。我們在爬行的時(shí)候,需要專(zhuān)門(mén)去爬行。這里我選擇了官方賬號名中收錄Python這個(gè)詞的賬號。如果找到,就會(huì )被抓取并保存。
  #爬取頁(yè)面所有文章
new_list = driver.find_elements_by_xpath("//li[contains(@id,&#39;sogou_vr_11002601_box&#39;)]")
# print(new_list)
for new in new_list:
#獲取文章賬號
sourse = new.find_elements_by_class_name("account")[0].text
if "python" in sourse:

#獲取文章標題
title = new.find_elements_by_xpath("div[2]/h3/a")[0].text

  完整代碼
<p>from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
import datetime
from selenium.common.exceptions import TimeoutException
import xlwt
class official_accounts:
# #實(shí)例化參數,直接傳入參數
# def __init__(self,name,deep_num):
# self.name = name
# self.deep_num = deep_num

#登錄頁(yè)面
def login_btn(self,name):
global driver
driver = webdriver.Firefox()
driver.get(&#39;https://weixin.sogou.com/&#39;)
driver.find_element_by_id("loginBtn").click()
time.sleep(20) #休眠20秒進(jìn)行微信掃碼登錄操作
input = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.NAME,&#39;query&#39;)))
input.send_keys(name)
driver.find_element_by_xpath("//input[@class=&#39;swz&#39;]").click()
#爬取內容
def get_news(self,name):
global data_total
data = []
time.sleep(1)
new_list = driver.find_elements_by_xpath("//li[contains(@id,&#39;sogou_vr_11002601_box&#39;)]")
# print(new_list)
for new in new_list:
#獲取文章賬號
sourse = new.find_elements_by_class_name("account")[0].text
if name in sourse:
#獲取文章標題
title = new.find_elements_by_xpath("div[2]/h3/a")[0].text

#獲取文章發(fā)表日期
date = new.find_elements_by_xpath("div[2]/div/span")[0].text
# 文章發(fā)表的日期如果較近可能會(huì )顯示“1天前” “12小時(shí)前” “30分鐘前”
# 這里可以用`datetime`模塊根據時(shí)間差求出具體時(shí)間
# 然后解析為`YYYY-MM-DD`格式
if &#39;前&#39; in date:
today = datetime.datetime.today()
if &#39;天&#39; in date:
delta = datetime.timedelta(days=int(date[0]))
elif &#39;小時(shí)&#39; in date:
delta = datetime.timedelta(hours=int(date.replace(&#39;小時(shí)前&#39;, &#39; &#39;)))
else:
delta = datetime.timedelta(minutes=int(date.replace(&#39;分鐘前&#39;, &#39; &#39;)))
date = str((today - delta).strftime(&#39;%Y-%m-%d&#39;))
date = datetime.datetime.strptime(date, &#39;%Y-%m-%d&#39;).strftime(&#39;%Y-%m-%d&#39;)

#獲取文章簡(jiǎn)介
content = new.find_elements_by_xpath("div[2]/p")[0].text

#獲取鏈接
url = new.find_elements_by_xpath("div[2]/h3/a")[0].get_attribute(&#39;href&#39;)

data.append(title)
data.append(date)
data.append(content)
data.append(url)

if data not in data_total:
data_total.append(data)
print(sourse,title,date,content)
print(url)
print(&#39;------&#39;*10)
else:
continue
#寫(xiě)入Excel中
def save(self,data_total,name): #將爬取的信息寫(xiě)入Excel文件
# xlwt.Workbook用來(lái)創(chuàng )建一個(gè)工作表,style_compression=0表示是否被壓縮
con = xlwt.Workbook(encoding=&#39;utf-8&#39;,style_compression=0)
# 添加sheet表格,并允許重復修改
sheet = con.add_sheet("公眾號文字爬取信息",cell_overwrite_ok=True)
colunm = ("title","date","content","url") #定義列名
for i in range(0,4):
sheet.write(0,i,colunm[i])
for i in range(0,len(data_total)-1):
d = data_total[i]
for j in range(0,4):
sheet.write(i+1,j,d[j])
con.save( name +".xls")
print("數據保存成功!")
#定義爬取深度,要爬取多少個(gè)頁(yè)面后就停止
def depth(self,name,deep_num):

self.login_btn(name)

global data_total
data_total = []
self.get_news(name)
d = 1 #定義一個(gè)爬取深度,爬取多少個(gè)頁(yè)面
while d 查看全部

  querylist采集微信公眾號文章(
搜狗微信公眾號實(shí)操訓練
)
  爬取公眾號文章
  項目介紹
  公眾號是我最喜歡的學(xué)習方式之一。我經(jīng)常關(guān)注一些技巧文章進(jìn)行實(shí)踐訓練。所以打算做一段時(shí)間的公眾號爬取文章。
  這里我們使用selenium庫通過(guò)搜狗微信網(wǎng)址獲取相關(guān)文章內容:
  搜狗微信網(wǎng)址
  頁(yè)面詳情
  我們發(fā)現有一個(gè)登錄按鈕可以進(jìn)入頁(yè)面。如果我們不登錄,我們只能查看10頁(yè)的內容。如果內容很多,10頁(yè)是不夠的。
  
  這里我設置睡眠時(shí)間為20秒,微信掃碼登錄;然后我會(huì )進(jìn)行后續的操作。
  driver.find_element_by_id("loginBtn").click()
time.sleep(20) #休眠20秒進(jìn)行微信掃碼登錄操作
  
  接下來(lái)就是輸入我們要搜索的相關(guān)內容文章
  我使用顯示等待。如果超過(guò)10秒沒(méi)有找到對應的內容,則表示不存在。
  input = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.NAME,&#39;query&#39;)))
input.send_keys("python") #模擬輸入
driver.find_element_by_xpath("//input[@class=&#39;swz&#39;]").click()#模擬點(diǎn)擊
  
  最后一步是爬取對應的文章。我們在爬行的時(shí)候,需要專(zhuān)門(mén)去爬行。這里我選擇了官方賬號名中收錄Python這個(gè)詞的賬號。如果找到,就會(huì )被抓取并保存。
  #爬取頁(yè)面所有文章
new_list = driver.find_elements_by_xpath("//li[contains(@id,&#39;sogou_vr_11002601_box&#39;)]")
# print(new_list)
for new in new_list:
#獲取文章賬號
sourse = new.find_elements_by_class_name("account")[0].text
if "python" in sourse:

#獲取文章標題
title = new.find_elements_by_xpath("div[2]/h3/a")[0].text

  完整代碼
<p>from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
import datetime
from selenium.common.exceptions import TimeoutException
import xlwt
class official_accounts:
# #實(shí)例化參數,直接傳入參數
# def __init__(self,name,deep_num):
# self.name = name
# self.deep_num = deep_num

#登錄頁(yè)面
def login_btn(self,name):
global driver
driver = webdriver.Firefox()
driver.get(&#39;https://weixin.sogou.com/&#39;)
driver.find_element_by_id("loginBtn").click()
time.sleep(20) #休眠20秒進(jìn)行微信掃碼登錄操作
input = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.NAME,&#39;query&#39;)))
input.send_keys(name)
driver.find_element_by_xpath("//input[@class=&#39;swz&#39;]").click()
#爬取內容
def get_news(self,name):
global data_total
data = []
time.sleep(1)
new_list = driver.find_elements_by_xpath("//li[contains(@id,&#39;sogou_vr_11002601_box&#39;)]")
# print(new_list)
for new in new_list:
#獲取文章賬號
sourse = new.find_elements_by_class_name("account")[0].text
if name in sourse:
#獲取文章標題
title = new.find_elements_by_xpath("div[2]/h3/a")[0].text

#獲取文章發(fā)表日期
date = new.find_elements_by_xpath("div[2]/div/span")[0].text
# 文章發(fā)表的日期如果較近可能會(huì )顯示“1天前” “12小時(shí)前” “30分鐘前”
# 這里可以用`datetime`模塊根據時(shí)間差求出具體時(shí)間
# 然后解析為`YYYY-MM-DD`格式
if &#39;前&#39; in date:
today = datetime.datetime.today()
if &#39;天&#39; in date:
delta = datetime.timedelta(days=int(date[0]))
elif &#39;小時(shí)&#39; in date:
delta = datetime.timedelta(hours=int(date.replace(&#39;小時(shí)前&#39;, &#39; &#39;)))
else:
delta = datetime.timedelta(minutes=int(date.replace(&#39;分鐘前&#39;, &#39; &#39;)))
date = str((today - delta).strftime(&#39;%Y-%m-%d&#39;))
date = datetime.datetime.strptime(date, &#39;%Y-%m-%d&#39;).strftime(&#39;%Y-%m-%d&#39;)

#獲取文章簡(jiǎn)介
content = new.find_elements_by_xpath("div[2]/p")[0].text

#獲取鏈接
url = new.find_elements_by_xpath("div[2]/h3/a")[0].get_attribute(&#39;href&#39;)

data.append(title)
data.append(date)
data.append(content)
data.append(url)

if data not in data_total:
data_total.append(data)
print(sourse,title,date,content)
print(url)
print(&#39;------&#39;*10)
else:
continue
#寫(xiě)入Excel中
def save(self,data_total,name): #將爬取的信息寫(xiě)入Excel文件
# xlwt.Workbook用來(lái)創(chuàng )建一個(gè)工作表,style_compression=0表示是否被壓縮
con = xlwt.Workbook(encoding=&#39;utf-8&#39;,style_compression=0)
# 添加sheet表格,并允許重復修改
sheet = con.add_sheet("公眾號文字爬取信息",cell_overwrite_ok=True)
colunm = ("title","date","content","url") #定義列名
for i in range(0,4):
sheet.write(0,i,colunm[i])
for i in range(0,len(data_total)-1):
d = data_total[i]
for j in range(0,4):
sheet.write(i+1,j,d[j])
con.save( name +".xls")
print("數據保存成功!")
#定義爬取深度,要爬取多少個(gè)頁(yè)面后就停止
def depth(self,name,deep_num):

self.login_btn(name)

global data_total
data_total = []
self.get_news(name)
d = 1 #定義一個(gè)爬取深度,爬取多少個(gè)頁(yè)面
while d

querylist采集微信公眾號文章(,小編覺(jué)得挺不錯的主要介紹思路,代碼部分請自行解決獲取)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 151 次瀏覽 ? 2022-01-02 02:15 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(,小編覺(jué)得挺不錯的主要介紹思路,代碼部分請自行解決獲取)
  本文文章主要介紹python如何抓取搜狗微信公眾號文章永久鏈接思維分析,小編覺(jué)得還不錯,現分享給大家,給大家參考。跟著(zhù)小編一起來(lái)看看吧。
  本文主要講解思路,代碼部分請自行解決
  獲取搜狗微信當天信息排名
  指定輸入關(guān)鍵字,通過(guò)scrapy抓取公眾號
  登錄微信公眾號鏈接獲取cookie信息
  由于微信公眾平臺模擬登錄尚未解決,需要手動(dòng)登錄實(shí)時(shí)獲取cookie信息
  
  
  
  
  固定鏈接可以在這里轉換
  代碼部分
  def parse(self, response):
item = SougouItem()
item["title"] = response.xpath(&#39;//title/text()&#39;).extract_first()
print("**"*5, item["title"],"**"*5)
name = input("----------請輸入需要搜索的信息:")
print(name)
url = "http://weixin.sogou.com/weixin ... ot%3B
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name":name})
  搜狗微信訪(fǎng)問(wèn)頻率會(huì )過(guò)快,導致需要輸入驗證碼
   def parse_two(self, response):
print(response.url)
name = response.meta["name"]
resp = response.xpath(&#39;//ul[@class="news-list"]/li&#39;)
s = 1
# 判斷url 是否是需要輸入驗證碼
res = re.search("from", response.url) # 需要驗證碼驗證
if res:
print(response.url)
img = response.xpath(&#39;//img/@src&#39;).extract()
print(img)
url_img = "http://weixin.sogou.com/antispider/"+ img[1]
print(url_img)
url_img = requests.get(url_img).content with open("urli.jpg", "wb") as f:
f.write(url_img) # f.close()
img = input("請輸入驗證碼:")
print(img)
url = response.url
r = re.search(r"from=(.*)",url).group(1)
print(r)
postData = {"c":img,"r":r,"v":"5"}
url = "http://weixin.sogou.com/antispider/thank.php"
yield scrapy.FormRequest(url=url, formdata=postData, callback=self.parse_two,meta={"name":name})
# 不需要驗證碼驗證
else:
for res, i in zip(resp, range(1, 10)):
item = SougouItem()
item["url"] = res.xpath(&#39;.//p[1]/a/@href&#39;).extract_first()
item["name"] = name
print("第%d條" % i) # 轉化永久鏈接
headers = {"Host": "mp.weixin.qq.com",
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cookie": "noticeLoginFlag=1; pgv_pvi=5269297152; pt2gguin=o1349184918; RK=ph4smy/QWu; ptcz=f3eb6ede5db921d0ada7f1713e6d1ca516d200fec57d602e677245490fcb7f1e; pgv_pvid=1033302674; o_cookie=1349184918; pac_uid=1_1349184918; ua_id=4nooSvHNkTOjpIpgAAAAAFX9OSNcLApfsluzwfClLW8=; mm_lang=zh_CN; noticeLoginFlag=1; remember_acct=Liangkai318; rewardsn=; wxtokenkey=777; pgv_si=s1944231936; uuid=700c40c965347f0925a8e8fdcc1e003e; ticket=023fc8861356b01527983c2c4765ef80903bf3d7; ticket_id=gh_6923d82780e4; cert=L_cE4aRdaZeDnzao3xEbMkcP3Kwuejoi; data_bizuin=3075391054; bizuin=3208078327; data_ticket=XrzOnrV9Odc80hJLtk8vFjTLI1vd7kfKJ9u+DzvaeeHxZkMXbv9kcWk/Pmqx/9g7; slave_sid=SWRKNmFyZ1NkM002Rk9NR0RRVGY5VFdMd1lXSkExWGtPcWJaREkzQ1BESEcyQkNLVlQ3YnB4OFNoNmtRZzdFdGpnVGlHak9LMjJ5eXBNVEgxZDlZb1BZMnlfN1hKdnJsV0NKallsQW91Zjk5Y3prVjlQRDNGYUdGUWNFNEd6eTRYT1FSOEQxT0MwR01Ja0Vo; slave_user=gh_6923d82780e4; xid=7b2245140217dbb3c5c0a552d46b9664; openid2ticket_oTr5Ot_B4nrDSj14zUxlXg8yrzws=D/B6//xK73BoO+mKE2EAjdcgIXNPw/b5PEDTDWM6t+4="}
respon = requests.get(url=item["url"]).content
gongzhongh = etree.HTML(respon).xpath(&#39;//a[@id="post-user"]/text()&#39;)[0]
# times = etree.HTML(respon).xpath(&#39;//*[@id="post-date"]/text()&#39;)[0]
title_one = etree.HTML(respon).xpath(&#39;//*[@id="activity-name"]/text()&#39;)[0].split()[0]
print(gongzhongh, title_one)
item["tit"] = title_one
item["gongzhongh"] = gongzhongh
# item["times"] = times
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + gongzhongh + "&begin=0&count=5"
# wenzhang_url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
resp = requests.get(url=url, headers=headers).content
print(resp)
faskeids = json.loads(resp.decode("utf-8"))
try:
list_fask = faskeids["list"] except Exception as f:
print("**********[INFO]:請求失敗,登陸失敗, 請重新登陸*************")
return
for fask in list_fask:
fakeid = fask["fakeid"]
nickname = fask["nickname"] if nickname == item["gongzhongh"]:
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + fakeid + "&type=9"
# url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] +"&fakeid=" + fakeid +"&type=9"
resp = requests.get(url=url, headers=headers).content
app = json.loads(resp.decode("utf-8"))["app_msg_list"]
item["aid"] = app["aid"]
item["appmsgid"] = app["appmsgid"]
item["cover"] = app["cover"]
item["digest"] = app["digest"]
item["url_link"] = app["link"]
item["tit"] = app["title"]
print(item)
time.sleep(10) # time.sleep(5)
# dict_wengzhang = json.loads(resp.decode("utf-8"))
# app_msg_list = dict_wengzhang["app_msg_list"]
# print(len(app_msg_list))
# for app in app_msg_list:
# print(app)
# title = app["title"]
# if title == item["tit"]:
# item["url_link"] = app["link"]
# updata_time = app["update_time"]
# item["times"] = time.strftime("%Y-%m-%d %H:%M:%S", updata_time)
# print("最終鏈接為:", item["url_link"])
# yield item
# else:
# print(app["title"], item["tit"])
# print("與所選文章不同放棄")
# # item["tit"] = app["title"]
# # item["url_link"] = app["link"]
# # yield item
# else:
# print(nickname, item["gongzhongh"])
# print("與所選公眾號不一致放棄")
# time.sleep(100)
# yield item
if response.xpath(&#39;//a[@class="np"]&#39;):
s += 1
url = "http://weixin.sogou.com/weixin ... 2Bstr(s) # time.sleep(3)
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name": name})
  以上是python如何抓取搜狗微信公眾號文章永久鏈接思路解析的詳細內容。更多詳情請關(guān)注其他相關(guān)php中文網(wǎng)站文章!
  
  免責聲明:本文由原創(chuàng )發(fā)表于php中文網(wǎng)。轉載請注明出處。感謝您的尊重!如果您有任何問(wèn)題,請聯(lián)系我們 查看全部

  querylist采集微信公眾號文章(,小編覺(jué)得挺不錯的主要介紹思路,代碼部分請自行解決獲取)
  本文文章主要介紹python如何抓取搜狗微信公眾號文章永久鏈接思維分析,小編覺(jué)得還不錯,現分享給大家,給大家參考。跟著(zhù)小編一起來(lái)看看吧。
  本文主要講解思路,代碼部分請自行解決
  獲取搜狗微信當天信息排名
  指定輸入關(guān)鍵字,通過(guò)scrapy抓取公眾號
  登錄微信公眾號鏈接獲取cookie信息
  由于微信公眾平臺模擬登錄尚未解決,需要手動(dòng)登錄實(shí)時(shí)獲取cookie信息
  
  
  
  
  固定鏈接可以在這里轉換
  代碼部分
  def parse(self, response):
item = SougouItem()
item["title"] = response.xpath(&#39;//title/text()&#39;).extract_first()
print("**"*5, item["title"],"**"*5)
name = input("----------請輸入需要搜索的信息:")
print(name)
url = "http://weixin.sogou.com/weixin ... ot%3B
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name":name})
  搜狗微信訪(fǎng)問(wèn)頻率會(huì )過(guò)快,導致需要輸入驗證碼
   def parse_two(self, response):
print(response.url)
name = response.meta["name"]
resp = response.xpath(&#39;//ul[@class="news-list"]/li&#39;)
s = 1
# 判斷url 是否是需要輸入驗證碼
res = re.search("from", response.url) # 需要驗證碼驗證
if res:
print(response.url)
img = response.xpath(&#39;//img/@src&#39;).extract()
print(img)
url_img = "http://weixin.sogou.com/antispider/"+ img[1]
print(url_img)
url_img = requests.get(url_img).content with open("urli.jpg", "wb") as f:
f.write(url_img) # f.close()
img = input("請輸入驗證碼:")
print(img)
url = response.url
r = re.search(r"from=(.*)",url).group(1)
print(r)
postData = {"c":img,"r":r,"v":"5"}
url = "http://weixin.sogou.com/antispider/thank.php"
yield scrapy.FormRequest(url=url, formdata=postData, callback=self.parse_two,meta={"name":name})
# 不需要驗證碼驗證
else:
for res, i in zip(resp, range(1, 10)):
item = SougouItem()
item["url"] = res.xpath(&#39;.//p[1]/a/@href&#39;).extract_first()
item["name"] = name
print("第%d條" % i) # 轉化永久鏈接
headers = {"Host": "mp.weixin.qq.com",
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cookie": "noticeLoginFlag=1; pgv_pvi=5269297152; pt2gguin=o1349184918; RK=ph4smy/QWu; ptcz=f3eb6ede5db921d0ada7f1713e6d1ca516d200fec57d602e677245490fcb7f1e; pgv_pvid=1033302674; o_cookie=1349184918; pac_uid=1_1349184918; ua_id=4nooSvHNkTOjpIpgAAAAAFX9OSNcLApfsluzwfClLW8=; mm_lang=zh_CN; noticeLoginFlag=1; remember_acct=Liangkai318; rewardsn=; wxtokenkey=777; pgv_si=s1944231936; uuid=700c40c965347f0925a8e8fdcc1e003e; ticket=023fc8861356b01527983c2c4765ef80903bf3d7; ticket_id=gh_6923d82780e4; cert=L_cE4aRdaZeDnzao3xEbMkcP3Kwuejoi; data_bizuin=3075391054; bizuin=3208078327; data_ticket=XrzOnrV9Odc80hJLtk8vFjTLI1vd7kfKJ9u+DzvaeeHxZkMXbv9kcWk/Pmqx/9g7; slave_sid=SWRKNmFyZ1NkM002Rk9NR0RRVGY5VFdMd1lXSkExWGtPcWJaREkzQ1BESEcyQkNLVlQ3YnB4OFNoNmtRZzdFdGpnVGlHak9LMjJ5eXBNVEgxZDlZb1BZMnlfN1hKdnJsV0NKallsQW91Zjk5Y3prVjlQRDNGYUdGUWNFNEd6eTRYT1FSOEQxT0MwR01Ja0Vo; slave_user=gh_6923d82780e4; xid=7b2245140217dbb3c5c0a552d46b9664; openid2ticket_oTr5Ot_B4nrDSj14zUxlXg8yrzws=D/B6//xK73BoO+mKE2EAjdcgIXNPw/b5PEDTDWM6t+4="}
respon = requests.get(url=item["url"]).content
gongzhongh = etree.HTML(respon).xpath(&#39;//a[@id="post-user"]/text()&#39;)[0]
# times = etree.HTML(respon).xpath(&#39;//*[@id="post-date"]/text()&#39;)[0]
title_one = etree.HTML(respon).xpath(&#39;//*[@id="activity-name"]/text()&#39;)[0].split()[0]
print(gongzhongh, title_one)
item["tit"] = title_one
item["gongzhongh"] = gongzhongh
# item["times"] = times
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + gongzhongh + "&begin=0&count=5"
# wenzhang_url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
resp = requests.get(url=url, headers=headers).content
print(resp)
faskeids = json.loads(resp.decode("utf-8"))
try:
list_fask = faskeids["list"] except Exception as f:
print("**********[INFO]:請求失敗,登陸失敗, 請重新登陸*************")
return
for fask in list_fask:
fakeid = fask["fakeid"]
nickname = fask["nickname"] if nickname == item["gongzhongh"]:
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + fakeid + "&type=9"
# url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] +"&fakeid=" + fakeid +"&type=9"
resp = requests.get(url=url, headers=headers).content
app = json.loads(resp.decode("utf-8"))["app_msg_list"]
item["aid"] = app["aid"]
item["appmsgid"] = app["appmsgid"]
item["cover"] = app["cover"]
item["digest"] = app["digest"]
item["url_link"] = app["link"]
item["tit"] = app["title"]
print(item)
time.sleep(10) # time.sleep(5)
# dict_wengzhang = json.loads(resp.decode("utf-8"))
# app_msg_list = dict_wengzhang["app_msg_list"]
# print(len(app_msg_list))
# for app in app_msg_list:
# print(app)
# title = app["title"]
# if title == item["tit"]:
# item["url_link"] = app["link"]
# updata_time = app["update_time"]
# item["times"] = time.strftime("%Y-%m-%d %H:%M:%S", updata_time)
# print("最終鏈接為:", item["url_link"])
# yield item
# else:
# print(app["title"], item["tit"])
# print("與所選文章不同放棄")
# # item["tit"] = app["title"]
# # item["url_link"] = app["link"]
# # yield item
# else:
# print(nickname, item["gongzhongh"])
# print("與所選公眾號不一致放棄")
# time.sleep(100)
# yield item
if response.xpath(&#39;//a[@class="np"]&#39;):
s += 1
url = "http://weixin.sogou.com/weixin ... 2Bstr(s) # time.sleep(3)
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name": name})
  以上是python如何抓取搜狗微信公眾號文章永久鏈接思路解析的詳細內容。更多詳情請關(guān)注其他相關(guān)php中文網(wǎng)站文章!
  
  免責聲明:本文由原創(chuàng )發(fā)表于php中文網(wǎng)。轉載請注明出處。感謝您的尊重!如果您有任何問(wèn)題,請聯(lián)系我們

querylist采集微信公眾號文章( 微信公眾號爬蟲(chóng)關(guān)鍵是獲取請求地址,注意:請求是需要cookies參數 )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 167 次瀏覽 ? 2022-01-01 21:03 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(
微信公眾號爬蟲(chóng)關(guān)鍵是獲取請求地址,注意:請求是需要cookies參數
)
  
  微信公眾號爬蟲(chóng)的關(guān)鍵是獲取請求的地址。這個(gè)文章是方法之一。
  登錄自己的公眾號后臺,微信官方平臺,進(jìn)入圖文消息編輯界面,進(jìn)入超鏈接,選擇公眾號文章,
  搜索人民日報等公眾號,會(huì )彈出最新的文章列表。這時(shí)候就可以找到對應的請求了??梢酝ㄟ^(guò)公眾號文章翻頁(yè)找到請求的參數規則。
  注意:請求需要cookies參數,可以復制瀏覽器訪(fǎng)問(wèn)的cookies。代碼如下:(cookies中的關(guān)鍵參數已經(jīng)脫敏為“???”)
  &#39;&#39;&#39; the key is to use cookies&#39;&#39;&#39;
import requests
headers={&#39;User-Agent&#39;:&#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36&#39;,&#39;referer&#39;:&#39;https://mp.weixin.qq.com/cgi-b ... 39%3B}
cookies={&#39;appmsglist_action_3207019504&#39;: &#39;card&#39;, &#39; pgv_info&#39;: &#39;ssid&#39;, &#39; pgv_pvid&#39;: &#39;4778161886&#39;, &#39; RK&#39;: &#39;1KphnCSeRK&#39;, &#39; ptcz&#39;: &#39;4a3ad775ddc10f3d9f50479110d37c6f7d5c7e8b38ebdb1e90207808173ad942&#39;, &#39; rewardsn&#39;: &#39;&#39;, &#39; wxtokenkey&#39;: &#39;777&#39;, &#39; _ga&#39;: &#39;GA1.2.1040497363.1629278077&#39;, &#39; o_cookie&#39;: &#39;???????&#39;, &#39; pac_uid&#39;: &#39;1_???????&#39;, &#39; tvfe_boss_uuid&#39;: &#39;a1a981cb70609f6e&#39;, &#39; vversion_name&#39;: &#39;8.2.95&#39;, &#39; user_id&#39;: &#39;null&#39;, &#39; session_id&#39;: &#39;null&#39;,
&#39; ua_id&#39;: &#39;ZpH4w1C3ipVIqGlHAAAAANiI5kknP2NeaIGodK9Opus&#39;, &#39; wxuin&#39;: &#39;32385700599949&#39;, &#39; mm_lang&#39;: &#39;zh_CN&#39;, &#39; ptui_loginuin&#39;: &#39;???????&#39;, &#39; verifysession&#39;: &#39;h014382c87bb4d29015296cbadb898e8e19aed8e594f786d35bf732285d003ed4c300f3ad957b8e52bf&#39;, &#39; video_omgid&#39;: &#39;&#39;, &#39; uin&#39;: &#39;o0???????&#39;, &#39; iip&#39;: &#39;0&#39;, &#39; mmad_session&#39;: &#39;db8fbb73a2b0a4c41bc175f34a6ad7d79d7245bbd1ba1a04ed6f116b38c7c8b6c4a209839bd7378c4da98642d25827cce39f657a4b128eb2c6658eb64dad90d50adf1bdf73a0fae947e3047a489efcc4cd503f920e2c7f38ac8e4728189d5c2711de1c56c245721266e7088080fefde3&#39;, &#39; ts_uid&#39;: &#39;8844190317&#39;, &#39; sig&#39;: &#39;h01ac912472130166d03e296461b8fba0d24e1a2bbe362cbae1470395802352c863c771017587fdabdb&#39;, &#39; uuid&#39;: &#39;5d8752d7b10e69ca60b82d934f101a8c&#39;, &#39; rand_info&#39;: &#39;CAESIK4WkEF7objSg84LpN/56kispUPwx5XIFkZWGhEmjYpM&#39;, &#39; slave_bizuin&#39;: &#39;3207019504&#39;, &#39; data_bizuin&#39;: &#39;3226019316&#39;, &#39; bizuin&#39;: &#39;3207019504&#39;, &#39; data_ticket&#39;: &#39;DaBODpqknEMzImuPqc7tT2ZR07to0GCNXX9WR2+lfcCOvPl/ZUTGnX5wAkd2yzQn&#39;, &#39; slave_sid&#39;: &#39;eFkzZVJOeXg5aHRIdHFuMlcyaUplT2JBbXVQZk5jYzB1aXM0bENQdFZUMmlwQWFvODVvX0V0MEM4cTdjWGN1NmJsYzFaTXI2YnpQZWNQNHluNjV6N1BMT3B1MWNHYU1kUWVPQU5oYTJ1eTJvb2dpU09oNG5rYk5JMGgyRFV0TnlYUFFMTDRabllhc0RLTXlL&#39;, &#39; slave_user&#39;: &#39;gh_90314c99dc76&#39;, &#39; xid&#39;: &#39;cb00dd5d681ce20868e0ffd778c1863f&#39;}
url=&#39;https://mp.weixin.qq.com/cgi-bin/appmsg&#39;
for page in range(0,5):
page=page*5
#fakeid 為公眾號賬號,此處為人民日報賬號;page實(shí)現翻頁(yè)
data={&#39;action&#39;: &#39;list_ex&#39;, &#39;begin&#39;: page, &#39;count&#39;: &#39;5&#39;, &#39;fakeid&#39;: &#39;MjM5MjAxNDM4MA==&#39;, &#39;type&#39;: &#39;9&#39;, &#39;query&#39;: &#39;&#39;, &#39;token&#39;: &#39;2101561850&#39;, &#39;lang&#39;: &#39;zh_CN&#39;, &#39;f&#39;: &#39;json&#39;, &#39;ajax&#39;: &#39;1&#39;}
res=requests.get(url,headers=headers,params=data,cookies=cookies)
print(res.status_code)
app_msg_list=res.json()[&#39;app_msg_list&#39;]
# print(app_msg_list)
for message in app_msg_list:
link=message[&#39;link&#39;]
title=message[&#39;title&#39;]
print(title,link) 查看全部

  querylist采集微信公眾號文章(
微信公眾號爬蟲(chóng)關(guān)鍵是獲取請求地址,注意:請求是需要cookies參數
)
  
  微信公眾號爬蟲(chóng)的關(guān)鍵是獲取請求的地址。這個(gè)文章是方法之一。
  登錄自己的公眾號后臺,微信官方平臺,進(jìn)入圖文消息編輯界面,進(jìn)入超鏈接,選擇公眾號文章,
  搜索人民日報等公眾號,會(huì )彈出最新的文章列表。這時(shí)候就可以找到對應的請求了??梢酝ㄟ^(guò)公眾號文章翻頁(yè)找到請求的參數規則。
  注意:請求需要cookies參數,可以復制瀏覽器訪(fǎng)問(wèn)的cookies。代碼如下:(cookies中的關(guān)鍵參數已經(jīng)脫敏為“???”)
  &#39;&#39;&#39; the key is to use cookies&#39;&#39;&#39;
import requests
headers={&#39;User-Agent&#39;:&#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36&#39;,&#39;referer&#39;:&#39;https://mp.weixin.qq.com/cgi-b ... 39%3B}
cookies={&#39;appmsglist_action_3207019504&#39;: &#39;card&#39;, &#39; pgv_info&#39;: &#39;ssid&#39;, &#39; pgv_pvid&#39;: &#39;4778161886&#39;, &#39; RK&#39;: &#39;1KphnCSeRK&#39;, &#39; ptcz&#39;: &#39;4a3ad775ddc10f3d9f50479110d37c6f7d5c7e8b38ebdb1e90207808173ad942&#39;, &#39; rewardsn&#39;: &#39;&#39;, &#39; wxtokenkey&#39;: &#39;777&#39;, &#39; _ga&#39;: &#39;GA1.2.1040497363.1629278077&#39;, &#39; o_cookie&#39;: &#39;???????&#39;, &#39; pac_uid&#39;: &#39;1_???????&#39;, &#39; tvfe_boss_uuid&#39;: &#39;a1a981cb70609f6e&#39;, &#39; vversion_name&#39;: &#39;8.2.95&#39;, &#39; user_id&#39;: &#39;null&#39;, &#39; session_id&#39;: &#39;null&#39;,
&#39; ua_id&#39;: &#39;ZpH4w1C3ipVIqGlHAAAAANiI5kknP2NeaIGodK9Opus&#39;, &#39; wxuin&#39;: &#39;32385700599949&#39;, &#39; mm_lang&#39;: &#39;zh_CN&#39;, &#39; ptui_loginuin&#39;: &#39;???????&#39;, &#39; verifysession&#39;: &#39;h014382c87bb4d29015296cbadb898e8e19aed8e594f786d35bf732285d003ed4c300f3ad957b8e52bf&#39;, &#39; video_omgid&#39;: &#39;&#39;, &#39; uin&#39;: &#39;o0???????&#39;, &#39; iip&#39;: &#39;0&#39;, &#39; mmad_session&#39;: &#39;db8fbb73a2b0a4c41bc175f34a6ad7d79d7245bbd1ba1a04ed6f116b38c7c8b6c4a209839bd7378c4da98642d25827cce39f657a4b128eb2c6658eb64dad90d50adf1bdf73a0fae947e3047a489efcc4cd503f920e2c7f38ac8e4728189d5c2711de1c56c245721266e7088080fefde3&#39;, &#39; ts_uid&#39;: &#39;8844190317&#39;, &#39; sig&#39;: &#39;h01ac912472130166d03e296461b8fba0d24e1a2bbe362cbae1470395802352c863c771017587fdabdb&#39;, &#39; uuid&#39;: &#39;5d8752d7b10e69ca60b82d934f101a8c&#39;, &#39; rand_info&#39;: &#39;CAESIK4WkEF7objSg84LpN/56kispUPwx5XIFkZWGhEmjYpM&#39;, &#39; slave_bizuin&#39;: &#39;3207019504&#39;, &#39; data_bizuin&#39;: &#39;3226019316&#39;, &#39; bizuin&#39;: &#39;3207019504&#39;, &#39; data_ticket&#39;: &#39;DaBODpqknEMzImuPqc7tT2ZR07to0GCNXX9WR2+lfcCOvPl/ZUTGnX5wAkd2yzQn&#39;, &#39; slave_sid&#39;: &#39;eFkzZVJOeXg5aHRIdHFuMlcyaUplT2JBbXVQZk5jYzB1aXM0bENQdFZUMmlwQWFvODVvX0V0MEM4cTdjWGN1NmJsYzFaTXI2YnpQZWNQNHluNjV6N1BMT3B1MWNHYU1kUWVPQU5oYTJ1eTJvb2dpU09oNG5rYk5JMGgyRFV0TnlYUFFMTDRabllhc0RLTXlL&#39;, &#39; slave_user&#39;: &#39;gh_90314c99dc76&#39;, &#39; xid&#39;: &#39;cb00dd5d681ce20868e0ffd778c1863f&#39;}
url=&#39;https://mp.weixin.qq.com/cgi-bin/appmsg&#39;
for page in range(0,5):
page=page*5
#fakeid 為公眾號賬號,此處為人民日報賬號;page實(shí)現翻頁(yè)
data={&#39;action&#39;: &#39;list_ex&#39;, &#39;begin&#39;: page, &#39;count&#39;: &#39;5&#39;, &#39;fakeid&#39;: &#39;MjM5MjAxNDM4MA==&#39;, &#39;type&#39;: &#39;9&#39;, &#39;query&#39;: &#39;&#39;, &#39;token&#39;: &#39;2101561850&#39;, &#39;lang&#39;: &#39;zh_CN&#39;, &#39;f&#39;: &#39;json&#39;, &#39;ajax&#39;: &#39;1&#39;}
res=requests.get(url,headers=headers,params=data,cookies=cookies)
print(res.status_code)
app_msg_list=res.json()[&#39;app_msg_list&#39;]
# print(app_msg_list)
for message in app_msg_list:
link=message[&#39;link&#39;]
title=message[&#39;title&#39;]
print(title,link)

querylist采集微信公眾號文章(一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址和采集方法)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 182 次瀏覽 ? 2022-01-01 12:07 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址和采集方法)
  我從2014年開(kāi)始批量做微信公眾號內容采集,最初的目的是為了制造一個(gè)html5垃圾郵件網(wǎng)站。當時(shí),垃圾站采集到達的微信公眾號內容很容易在公眾號傳播。那個(gè)時(shí)候分批的采集特別好做,而采集的入口就是公眾號的歷史新聞頁(yè)面。這個(gè)入口現在還是一樣,只是越來(lái)越難采集。 采集的方法也更新了很多版本。后來(lái)到了2015年,html5垃圾站就不做了。取而代之的是,采集的目標是針對本地新聞資訊公眾號,將前端展示做成一個(gè)app。于是一個(gè)可以自動(dòng)采集公眾號內容的新聞APP就形成了。曾經(jīng)擔心微信技術(shù)升級一天后,采集的內容不可用,我的新聞應用會(huì )失敗。但是隨著(zhù)微信技術(shù)的不斷升級,采集的方法也得到了升級,這讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集查看內容。所以今天整理了一下,決定把采集這個(gè)方法寫(xiě)下來(lái)。我的方法來(lái)自于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。
  本文文章會(huì )持續更新,保證您看到的內容在您看到時(shí)可用。
  首先來(lái)看一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址:
  http://mp.weixin.qq.com/mp/get ... irect
  ========2017 年 1 月 11 日更新==========
  現在根據不同的微信個(gè)人賬號,會(huì )有兩個(gè)不同的歷史消息頁(yè)地址。以下是另一個(gè)歷史消息頁(yè)面的地址。第一種地址的鏈接在anyproxy中會(huì )顯示302跳轉:
  https://mp.weixin.qq.com/mp/pr ... irect
  第一個(gè)鏈接地址的頁(yè)面樣式:
  
  第二個(gè)鏈接地址的頁(yè)面樣式:
  
  根據目前的信息,這兩種頁(yè)面格式在不同的微信賬號中出現不規則。有的微信賬號永遠是第一頁(yè)格式,有的永遠是第二頁(yè)格式。
  上面的鏈接是微信公眾號歷史新聞頁(yè)面的真實(shí)鏈接,但是當我們在瀏覽器中輸入這個(gè)鏈接時(shí),會(huì )顯示:請從微信客戶(hù)端訪(fǎng)問(wèn)。這是因為鏈接地址實(shí)際上需要幾個(gè)參數才能正常顯示內容。我們來(lái)看看一個(gè)可以正常顯示內容的完整鏈接是什么樣子的:
  //第一種鏈接
http://mp.weixin.qq.com/mp/get ... r%3D1
//第二種
http://mp.weixin.qq.com/mp/pro ... r%3D1
  該地址是通過(guò)微信客戶(hù)端打開(kāi)歷史消息頁(yè)面后使用代理服務(wù)器軟件獲取的。這里有幾個(gè)參數:
  action=;__biz=;uin=;key=;devicetype=;version=;lang=;nettype=;scene=;pass_ticket=;wx_header=;
  重要的參數是:__biz;uin=;key=;pass_ticket=;這4個(gè)參數。
  __biz 是公眾號的類(lèi)似id的參數。每個(gè)公眾號都有一個(gè)微信。目前公眾號的biz變動(dòng)的可能性很??;
  剩下的3個(gè)參數與用戶(hù)的id和tokenticket相關(guān)。這3個(gè)參數的值在微信客戶(hù)端生成后會(huì )自動(dòng)添加到地址欄中。所以我們認為采集公眾號必須通過(guò)微信客戶(hù)端。在之前的微信版本中,這3個(gè)參數也可以一次性獲取,在有效期內可以使用多個(gè)公眾號。在當前版本中,每次訪(fǎng)問(wèn)公眾號都會(huì )更改參數值。
  我現在使用的方法只需要關(guān)注__biz參數即可。
  我的采集系統由以下部分組成:
  1、 微信客戶(hù)端:可以是安裝了微信應用的手機,也可以是電腦上的安卓模擬器。在batch采集上測試的ios微信客戶(hù)端崩潰率高于A(yíng)ndroid系統。為了降低成本,我使用了Android模擬器。
  
  2、一個(gè)微信個(gè)人賬號:為了采集內容,不僅需要一個(gè)微信客戶(hù)端,還需要一個(gè)專(zhuān)用于采集的微信個(gè)人賬號,因為這個(gè)微信賬號可以不要做任何其他事情。
  3、本地代理服務(wù)器系統:目前使用的方法是通過(guò)Anyproxy代理服務(wù)器將公眾賬號歷史消息頁(yè)面中文章的列表發(fā)送到自己的服務(wù)器上。具體安裝方法后面會(huì )詳細介紹。
  4、文章列表分析入庫系統:本人使用php語(yǔ)言編寫(xiě),下篇文章將詳細介紹如何分析文章列表并建立采集 queue 實(shí)現批量采集內容。
  步驟
  一、 安裝模擬器或使用手機安裝微信客戶(hù)端,申請微信個(gè)人賬號并登錄應用。這個(gè)就不多介紹了,大家自己做。
  二、代理服務(wù)器系統安裝
  目前我使用 Anyproxy、AnyProxy。這個(gè)軟件的特點(diǎn)是可以獲取https鏈接的內容。 2016年初,微信公眾號和微信文章開(kāi)始使用https鏈接。而Anyproxy可以通過(guò)修改規則配置,在公眾號頁(yè)面插入腳本代碼。下面將介紹安裝和配置過(guò)程。
  1、安裝 NodeJS
  2、在命令行或終端運行npm install -g anyproxy,mac系統需要添加sudo;
  3、生成RootCA,https需要這個(gè)證書(shū):運行命令sudo anyproxy --root(windows可能不需要sudo);
  4、啟動(dòng)anyproxy運行命令:sudo anyproxy -i;參數-i表示解析HTTPS;
  5、安裝證書(shū),在手機或者安卓模擬器安裝證書(shū):
  6、 設置代理:安卓模擬器的代理服務(wù)器地址為wifi鏈接的網(wǎng)關(guān)。通過(guò)dhcp設置為static后就可以看到網(wǎng)關(guān)地址了。閱讀后不要忘記將其設置為自動(dòng)。手機中的代理服務(wù)器地址是運行anyproxy的電腦的ip地址。代理服務(wù)器默認端口為8001;
  
  現在打開(kāi)微信,點(diǎn)擊任意一個(gè)公眾號歷史消息或者文章,就可以看到在終端滾動(dòng)的響應碼。如果沒(méi)有出現,請檢查手機的代理設置是否正確。
  
  現在打開(kāi)瀏覽器地址localhost:8002,可以看到anyproxy的web界面。微信點(diǎn)擊打開(kāi)歷史消息頁(yè)面,然后查看瀏覽器的網(wǎng)頁(yè)界面,歷史消息頁(yè)面的地址會(huì )滾動(dòng)。
  
  /mp/getmasssendmsg開(kāi)頭的網(wǎng)址是微信歷史消息頁(yè)面。左邊的小鎖表示這個(gè)頁(yè)面是 https 加密的?,F在我們點(diǎn)擊這一行;
  ========2017 年 1 月 11 日更新==========
  有些以/mp/getmasssendmsg開(kāi)頭的微信賬號會(huì )出現302跳轉到/mp/profile_ext?action=home開(kāi)頭的地址。所以點(diǎn)擊這個(gè)地址可以看到內容。
  
  如果右側出現html文件內容,則表示解密成功。如果沒(méi)有內容,請檢查anyproxy運行方式是否有參數i,是否生成了ca證書(shū),是否在手機上正確安裝了證書(shū)。
  現在我們手機里的所有內容都可以明文通過(guò)代理服務(wù)器了。接下來(lái)我們需要修改一下代理服務(wù)器的配置,才能獲取公眾號的內容。
  一、找到配置文件:
  配置文件在mac系統中的位置是/usr/local/lib/node_modules/anyproxy/lib/;對于windows系統,不知道還請見(jiàn)諒。應該可以根據類(lèi)似mac的文件夾地址找到這個(gè)目錄。
  二、修改文件rule_default.js
  找到 replaceServerResDataAsync: function(req,res,serverResData,callback) 函數
  修改函數內容(請注意詳細閱讀注釋?zhuān)@里只是介紹原理,理解后根據自己的情況修改內容):
  ========2017 年 1 月 11 日更新==========
  因為有兩種頁(yè)面格式,相同的頁(yè)面格式總是在不同的微信賬號中顯示,但是為了兼容兩種頁(yè)面格式,下面的代碼會(huì )保留兩種頁(yè)面格式的判斷。您也可以按照從您自己的頁(yè)面表單中刪除 li
  replaceServerResDataAsync: function(req,res,serverResData,callback){
if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
if(serverResData.toString() !== ""){
try {//防止報錯退出程序
var reg = /msgList = (.*?);\r\n/;//定義歷史消息正則匹配規則
var ret = reg.exec(serverResData.toString());//轉換變量為string
HttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
var http = require(&#39;http&#39;);
http.get(&#39;http://xxx.com/getWxHis.php&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
res.on(&#39;data&#39;, function(chunk){
callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
})
});
}catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
try {
var json = JSON.parse(serverResData.toString());
if (json.general_msg_list != []) {
HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
}
}catch(e){
console.log(e);//錯誤捕捉
}
callback(serverResData);//直接返回第二頁(yè)json內容
}
}
}else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
try {
var reg = /var msgList = \&#39;(.*?)\&#39;;\r\n/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
var ret = reg.exec(serverResData.toString());//轉換變量為string
HttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
var http = require(&#39;http&#39;);
http.get(&#39;http://xxx.com/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
res.on(&#39;data&#39;, function(chunk){
callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
})
});
}catch(e){
callback(serverResData);
}
}else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
try {
var json = JSON.parse(serverResData.toString());
if (json.general_msg_list != []) {
HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
}
}catch(e){
console.log(e);
}
callback(serverResData);
}else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
try {
HttpPost(serverResData,req.url,"getMsgExt.php");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
}catch(e){
}
callback(serverResData);
}else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
try {
var http = require(&#39;http&#39;);
http.get(&#39;http://xxx.com/getWxPost.php&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
res.on(&#39;data&#39;, function(chunk){
callback(chunk+serverResData);
})
});
}catch(e){
callback(serverResData);
}
}else{
callback(serverResData);
}
},
  以上代碼是使用anyproxy修改返回頁(yè)面內容、向頁(yè)面注入腳本、將頁(yè)面內容發(fā)送到服務(wù)器的功能。利用這個(gè)原理批量處理采集公眾號內容和閱讀量。該腳本中自定義了一個(gè)函數,詳細說(shuō)明如下:
  在 rule_default.js 文件末尾添加以下代碼:
  function HttpPost(str,url,path) {//將json發(fā)送到服務(wù)器,str為json內容,url為歷史消息頁(yè)面地址,path是接收程序的路徑和文件名
var http = require(&#39;http&#39;);
var data = {
str: encodeURIComponent(str),
url: encodeURIComponent(url)
};
content = require(&#39;querystring&#39;).stringify(data);
var options = {
method: "POST",
host: "www.xxx.com",//注意沒(méi)有http://,這是服務(wù)器的域名。
port: 80,
path: path,//接收程序的路徑和文件名
headers: {
&#39;Content-Type&#39;: &#39;application/x-www-form-urlencoded; charset=UTF-8&#39;,
"Content-Length": content.length
}
};
var req = http.request(options, function (res) {
res.setEncoding(&#39;utf8&#39;);
res.on(&#39;data&#39;, function (chunk) {
console.log(&#39;BODY: &#39; + chunk);
});
});
req.on(&#39;error&#39;, function (e) {
console.log(&#39;problem with request: &#39; + e.message);
});
req.write(content);
req.end();
}
  以上是規則修改的主要部分。您需要將json內容發(fā)送到您自己的服務(wù)器,并從服務(wù)器獲取到下一頁(yè)的跳轉地址。這涉及到四個(gè)php文件:getMsgJson.php、getMsgExt.php、getWxHis.php、getWxPost.php
  在詳細介紹這4個(gè)php文件之前,為了提高采集系統性能,降低崩潰率,我們還可以做一些修改:
  Android模擬器經(jīng)常訪(fǎng)問(wèn)一些地址,會(huì )導致anyproxy崩潰,找到函數replaceRequestOption:function(req,option),修改函數內容:
  replaceRequestOption : function(req,option){
var newOption = option;
if(/google/i.test(newOption.headers.host)){
newOption.hostname = "www.baidu.com";
newOption.port = "80";
}
return newOption;
},
  以上是anyproxy的規則文件的修改配置。配置修改完成后,重啟anyproxy。在mac系統下,按control+c中斷程序,然后輸入命令sudo anyproxy -i啟動(dòng);如果報錯,程序可能無(wú)法干凈退出,端口被占用。這時(shí)候輸入命令ps -a查看占用的pid,然后輸入命令“kill -9 pid”將pid替換為查詢(xún)到的pid號。殺掉進(jìn)程后,就可以啟動(dòng)anyproxy了。再次請原諒我不熟悉windows命令。
  接下來(lái)詳細介紹服務(wù)器端接收程序的設計原理:
 ?。ㄒ韵麓a不能直接使用,只介紹原理,部分需要根據自己的服務(wù)器數據庫框架編寫(xiě))
  1、getMsgJson.php:該程序負責接收歷史消息的json,解析并存入數據庫
<p> 查看全部

  querylist采集微信公眾號文章(一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址和采集方法)
  我從2014年開(kāi)始批量做微信公眾號內容采集,最初的目的是為了制造一個(gè)html5垃圾郵件網(wǎng)站。當時(shí),垃圾站采集到達的微信公眾號內容很容易在公眾號傳播。那個(gè)時(shí)候分批的采集特別好做,而采集的入口就是公眾號的歷史新聞頁(yè)面。這個(gè)入口現在還是一樣,只是越來(lái)越難采集。 采集的方法也更新了很多版本。后來(lái)到了2015年,html5垃圾站就不做了。取而代之的是,采集的目標是針對本地新聞資訊公眾號,將前端展示做成一個(gè)app。于是一個(gè)可以自動(dòng)采集公眾號內容的新聞APP就形成了。曾經(jīng)擔心微信技術(shù)升級一天后,采集的內容不可用,我的新聞應用會(huì )失敗。但是隨著(zhù)微信技術(shù)的不斷升級,采集的方法也得到了升級,這讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集查看內容。所以今天整理了一下,決定把采集這個(gè)方法寫(xiě)下來(lái)。我的方法來(lái)自于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。
  本文文章會(huì )持續更新,保證您看到的內容在您看到時(shí)可用。
  首先來(lái)看一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址:
  http://mp.weixin.qq.com/mp/get ... irect
  ========2017 年 1 月 11 日更新==========
  現在根據不同的微信個(gè)人賬號,會(huì )有兩個(gè)不同的歷史消息頁(yè)地址。以下是另一個(gè)歷史消息頁(yè)面的地址。第一種地址的鏈接在anyproxy中會(huì )顯示302跳轉:
  https://mp.weixin.qq.com/mp/pr ... irect
  第一個(gè)鏈接地址的頁(yè)面樣式:
  
  第二個(gè)鏈接地址的頁(yè)面樣式:
  
  根據目前的信息,這兩種頁(yè)面格式在不同的微信賬號中出現不規則。有的微信賬號永遠是第一頁(yè)格式,有的永遠是第二頁(yè)格式。
  上面的鏈接是微信公眾號歷史新聞頁(yè)面的真實(shí)鏈接,但是當我們在瀏覽器中輸入這個(gè)鏈接時(shí),會(huì )顯示:請從微信客戶(hù)端訪(fǎng)問(wèn)。這是因為鏈接地址實(shí)際上需要幾個(gè)參數才能正常顯示內容。我們來(lái)看看一個(gè)可以正常顯示內容的完整鏈接是什么樣子的:
  //第一種鏈接
http://mp.weixin.qq.com/mp/get ... r%3D1
//第二種
http://mp.weixin.qq.com/mp/pro ... r%3D1
  該地址是通過(guò)微信客戶(hù)端打開(kāi)歷史消息頁(yè)面后使用代理服務(wù)器軟件獲取的。這里有幾個(gè)參數:
  action=;__biz=;uin=;key=;devicetype=;version=;lang=;nettype=;scene=;pass_ticket=;wx_header=;
  重要的參數是:__biz;uin=;key=;pass_ticket=;這4個(gè)參數。
  __biz 是公眾號的類(lèi)似id的參數。每個(gè)公眾號都有一個(gè)微信。目前公眾號的biz變動(dòng)的可能性很??;
  剩下的3個(gè)參數與用戶(hù)的id和tokenticket相關(guān)。這3個(gè)參數的值在微信客戶(hù)端生成后會(huì )自動(dòng)添加到地址欄中。所以我們認為采集公眾號必須通過(guò)微信客戶(hù)端。在之前的微信版本中,這3個(gè)參數也可以一次性獲取,在有效期內可以使用多個(gè)公眾號。在當前版本中,每次訪(fǎng)問(wèn)公眾號都會(huì )更改參數值。
  我現在使用的方法只需要關(guān)注__biz參數即可。
  我的采集系統由以下部分組成:
  1、 微信客戶(hù)端:可以是安裝了微信應用的手機,也可以是電腦上的安卓模擬器。在batch采集上測試的ios微信客戶(hù)端崩潰率高于A(yíng)ndroid系統。為了降低成本,我使用了Android模擬器。
  
  2、一個(gè)微信個(gè)人賬號:為了采集內容,不僅需要一個(gè)微信客戶(hù)端,還需要一個(gè)專(zhuān)用于采集的微信個(gè)人賬號,因為這個(gè)微信賬號可以不要做任何其他事情。
  3、本地代理服務(wù)器系統:目前使用的方法是通過(guò)Anyproxy代理服務(wù)器將公眾賬號歷史消息頁(yè)面中文章的列表發(fā)送到自己的服務(wù)器上。具體安裝方法后面會(huì )詳細介紹。
  4、文章列表分析入庫系統:本人使用php語(yǔ)言編寫(xiě),下篇文章將詳細介紹如何分析文章列表并建立采集 queue 實(shí)現批量采集內容。
  步驟
  一、 安裝模擬器或使用手機安裝微信客戶(hù)端,申請微信個(gè)人賬號并登錄應用。這個(gè)就不多介紹了,大家自己做。
  二、代理服務(wù)器系統安裝
  目前我使用 Anyproxy、AnyProxy。這個(gè)軟件的特點(diǎn)是可以獲取https鏈接的內容。 2016年初,微信公眾號和微信文章開(kāi)始使用https鏈接。而Anyproxy可以通過(guò)修改規則配置,在公眾號頁(yè)面插入腳本代碼。下面將介紹安裝和配置過(guò)程。
  1、安裝 NodeJS
  2、在命令行或終端運行npm install -g anyproxy,mac系統需要添加sudo;
  3、生成RootCA,https需要這個(gè)證書(shū):運行命令sudo anyproxy --root(windows可能不需要sudo);
  4、啟動(dòng)anyproxy運行命令:sudo anyproxy -i;參數-i表示解析HTTPS;
  5、安裝證書(shū),在手機或者安卓模擬器安裝證書(shū):
  6、 設置代理:安卓模擬器的代理服務(wù)器地址為wifi鏈接的網(wǎng)關(guān)。通過(guò)dhcp設置為static后就可以看到網(wǎng)關(guān)地址了。閱讀后不要忘記將其設置為自動(dòng)。手機中的代理服務(wù)器地址是運行anyproxy的電腦的ip地址。代理服務(wù)器默認端口為8001;
  
  現在打開(kāi)微信,點(diǎn)擊任意一個(gè)公眾號歷史消息或者文章,就可以看到在終端滾動(dòng)的響應碼。如果沒(méi)有出現,請檢查手機的代理設置是否正確。
  
  現在打開(kāi)瀏覽器地址localhost:8002,可以看到anyproxy的web界面。微信點(diǎn)擊打開(kāi)歷史消息頁(yè)面,然后查看瀏覽器的網(wǎng)頁(yè)界面,歷史消息頁(yè)面的地址會(huì )滾動(dòng)。
  
  /mp/getmasssendmsg開(kāi)頭的網(wǎng)址是微信歷史消息頁(yè)面。左邊的小鎖表示這個(gè)頁(yè)面是 https 加密的?,F在我們點(diǎn)擊這一行;
  ========2017 年 1 月 11 日更新==========
  有些以/mp/getmasssendmsg開(kāi)頭的微信賬號會(huì )出現302跳轉到/mp/profile_ext?action=home開(kāi)頭的地址。所以點(diǎn)擊這個(gè)地址可以看到內容。
  
  如果右側出現html文件內容,則表示解密成功。如果沒(méi)有內容,請檢查anyproxy運行方式是否有參數i,是否生成了ca證書(shū),是否在手機上正確安裝了證書(shū)。
  現在我們手機里的所有內容都可以明文通過(guò)代理服務(wù)器了。接下來(lái)我們需要修改一下代理服務(wù)器的配置,才能獲取公眾號的內容。
  一、找到配置文件:
  配置文件在mac系統中的位置是/usr/local/lib/node_modules/anyproxy/lib/;對于windows系統,不知道還請見(jiàn)諒。應該可以根據類(lèi)似mac的文件夾地址找到這個(gè)目錄。
  二、修改文件rule_default.js
  找到 replaceServerResDataAsync: function(req,res,serverResData,callback) 函數
  修改函數內容(請注意詳細閱讀注釋?zhuān)@里只是介紹原理,理解后根據自己的情況修改內容):
  ========2017 年 1 月 11 日更新==========
  因為有兩種頁(yè)面格式,相同的頁(yè)面格式總是在不同的微信賬號中顯示,但是為了兼容兩種頁(yè)面格式,下面的代碼會(huì )保留兩種頁(yè)面格式的判斷。您也可以按照從您自己的頁(yè)面表單中刪除 li
  replaceServerResDataAsync: function(req,res,serverResData,callback){
if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
if(serverResData.toString() !== ""){
try {//防止報錯退出程序
var reg = /msgList = (.*?);\r\n/;//定義歷史消息正則匹配規則
var ret = reg.exec(serverResData.toString());//轉換變量為string
HttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
var http = require(&#39;http&#39;);
http.get(&#39;http://xxx.com/getWxHis.php&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
res.on(&#39;data&#39;, function(chunk){
callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
})
});
}catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
try {
var json = JSON.parse(serverResData.toString());
if (json.general_msg_list != []) {
HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
}
}catch(e){
console.log(e);//錯誤捕捉
}
callback(serverResData);//直接返回第二頁(yè)json內容
}
}
}else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
try {
var reg = /var msgList = \&#39;(.*?)\&#39;;\r\n/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
var ret = reg.exec(serverResData.toString());//轉換變量為string
HttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
var http = require(&#39;http&#39;);
http.get(&#39;http://xxx.com/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
res.on(&#39;data&#39;, function(chunk){
callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
})
});
}catch(e){
callback(serverResData);
}
}else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
try {
var json = JSON.parse(serverResData.toString());
if (json.general_msg_list != []) {
HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
}
}catch(e){
console.log(e);
}
callback(serverResData);
}else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
try {
HttpPost(serverResData,req.url,"getMsgExt.php");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
}catch(e){
}
callback(serverResData);
}else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
try {
var http = require(&#39;http&#39;);
http.get(&#39;http://xxx.com/getWxPost.php&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
res.on(&#39;data&#39;, function(chunk){
callback(chunk+serverResData);
})
});
}catch(e){
callback(serverResData);
}
}else{
callback(serverResData);
}
},
  以上代碼是使用anyproxy修改返回頁(yè)面內容、向頁(yè)面注入腳本、將頁(yè)面內容發(fā)送到服務(wù)器的功能。利用這個(gè)原理批量處理采集公眾號內容和閱讀量。該腳本中自定義了一個(gè)函數,詳細說(shuō)明如下:
  在 rule_default.js 文件末尾添加以下代碼:
  function HttpPost(str,url,path) {//將json發(fā)送到服務(wù)器,str為json內容,url為歷史消息頁(yè)面地址,path是接收程序的路徑和文件名
var http = require(&#39;http&#39;);
var data = {
str: encodeURIComponent(str),
url: encodeURIComponent(url)
};
content = require(&#39;querystring&#39;).stringify(data);
var options = {
method: "POST",
host: "www.xxx.com",//注意沒(méi)有http://,這是服務(wù)器的域名。
port: 80,
path: path,//接收程序的路徑和文件名
headers: {
&#39;Content-Type&#39;: &#39;application/x-www-form-urlencoded; charset=UTF-8&#39;,
"Content-Length": content.length
}
};
var req = http.request(options, function (res) {
res.setEncoding(&#39;utf8&#39;);
res.on(&#39;data&#39;, function (chunk) {
console.log(&#39;BODY: &#39; + chunk);
});
});
req.on(&#39;error&#39;, function (e) {
console.log(&#39;problem with request: &#39; + e.message);
});
req.write(content);
req.end();
}
  以上是規則修改的主要部分。您需要將json內容發(fā)送到您自己的服務(wù)器,并從服務(wù)器獲取到下一頁(yè)的跳轉地址。這涉及到四個(gè)php文件:getMsgJson.php、getMsgExt.php、getWxHis.php、getWxPost.php
  在詳細介紹這4個(gè)php文件之前,為了提高采集系統性能,降低崩潰率,我們還可以做一些修改:
  Android模擬器經(jīng)常訪(fǎng)問(wèn)一些地址,會(huì )導致anyproxy崩潰,找到函數replaceRequestOption:function(req,option),修改函數內容:
  replaceRequestOption : function(req,option){
var newOption = option;
if(/google/i.test(newOption.headers.host)){
newOption.hostname = "www.baidu.com";
newOption.port = "80";
}
return newOption;
},
  以上是anyproxy的規則文件的修改配置。配置修改完成后,重啟anyproxy。在mac系統下,按control+c中斷程序,然后輸入命令sudo anyproxy -i啟動(dòng);如果報錯,程序可能無(wú)法干凈退出,端口被占用。這時(shí)候輸入命令ps -a查看占用的pid,然后輸入命令“kill -9 pid”將pid替換為查詢(xún)到的pid號。殺掉進(jìn)程后,就可以啟動(dòng)anyproxy了。再次請原諒我不熟悉windows命令。
  接下來(lái)詳細介紹服務(wù)器端接收程序的設計原理:
 ?。ㄒ韵麓a不能直接使用,只介紹原理,部分需要根據自己的服務(wù)器數據庫框架編寫(xiě))
  1、getMsgJson.php:該程序負責接收歷史消息的json,解析并存入數據庫
<p>

querylist采集微信公眾號文章(爬取所有關(guān)于python的公眾號文章,你了解多少? )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 171 次瀏覽 ? 2021-12-31 17:22 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(爬取所有關(guān)于python的公眾號文章,你了解多少?
)
  前言
  本文中的文字圖片過(guò)濾網(wǎng)絡(luò )可用于學(xué)習、交流,不具有任何商業(yè)用途。如果您有任何問(wèn)題,請聯(lián)系我們進(jìn)行處理。
  文章為基礎開(kāi)發(fā)環(huán)境爬取兩個(gè)公眾號:
  1.抓取所有 文章
  2、爬取所有關(guān)于python的公眾號文章
  爬取 文章
  1、登錄公眾號后點(diǎn)擊圖片和文字
  
  2、打開(kāi)開(kāi)發(fā)者工具
  
  3、點(diǎn)擊超鏈接
  
  加載相關(guān)數據時(shí),有一個(gè)數據包,包括文章標題、鏈接、摘要、發(fā)布時(shí)間等,你也可以選擇其他公眾號進(jìn)行爬取,但這需要你有一個(gè)微信公眾號。
  添加cookie
  import pprint
import time
import requests
import csv
f = open(&#39;青燈公眾號文章.csv&#39;, mode=&#39;a&#39;, encoding=&#39;utf-8&#39;, newline=&#39;&#39;)
csv_writer = csv.DictWriter(f, fieldnames=[&#39;標題&#39;, &#39;文章發(fā)布時(shí)間&#39;, &#39;文章地址&#39;])
csv_writer.writeheader()
for page in range(0, 40, 5):
url = f&#39;https://mp.weixin.qq.com/cgi-b ... in%3D{page}&count=5&fakeid=&type=9&query=&token=1252678642&lang=zh_CN&f=json&ajax=1&#39;
headers = {
&#39;cookie&#39;: &#39;加cookie&#39;,
&#39;referer&#39;: &#39;https://mp.weixin.qq.com/cgi-b ... 39%3B,
&#39;user-agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36&#39;,
}
response = requests.get(url=url, headers=headers)
html_data = response.json()
pprint.pprint(response.json())
lis = html_data[&#39;app_msg_list&#39;]
for li in lis:
title = li[&#39;title&#39;]
link_url = li[&#39;link&#39;]
update_time = li[&#39;update_time&#39;]
timeArray = time.localtime(int(update_time))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
&#39;標題&#39;: title,
&#39;文章發(fā)布時(shí)間&#39;: otherStyleTime,
&#39;文章地址&#39;: link_url,
}
csv_writer.writerow(dit)
print(dit)
  爬取所有關(guān)于python的公眾號文章
  1、搜狗搜索python選擇微信
  
  注意:如果不登錄,只能抓取前十頁(yè)數據。登錄后可以抓取2W多篇文章文章。
  2.直接爬取靜態(tài)網(wǎng)頁(yè)的標題、公眾號、文章地址、發(fā)帖時(shí)間。
  import time
import requests
import parsel
import csv
f = open(&#39;公眾號文章.csv&#39;, mode=&#39;a&#39;, encoding=&#39;utf-8&#39;, newline=&#39;&#39;)
csv_writer = csv.DictWriter(f, fieldnames=[&#39;標題&#39;, &#39;公眾號&#39;, &#39;文章發(fā)布時(shí)間&#39;, &#39;文章地址&#39;])
csv_writer.writeheader()
for page in range(1, 2447):
url = f&#39;https://weixin.sogou.com/weixi ... ge%3D{page}&ie=utf8&#39;
headers = {
&#39;Cookie&#39;: &#39;自己的cookie&#39;,
&#39;Host&#39;: &#39;weixin.sogou.com&#39;,
&#39;Referer&#39;: &#39;https://www.sogou.com/web%3Fqu ... 39%3B,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36&#39;,
}
response = requests.get(url=url, headers=headers)
selector = parsel.Selector(response.text)
lis = selector.css(&#39;.news-list li&#39;)
for li in lis:
title_list = li.css(&#39;.txt-box h3 a::text&#39;).getall()
num = len(title_list)
if num == 1:
title_str = &#39;python&#39; + title_list[0]
else:
title_str = &#39;python&#39;.join(title_list)
href = li.css(&#39;.txt-box h3 a::attr(href)&#39;).get()
article_url = &#39;https://weixin.sogou.com&#39; + href
name = li.css(&#39;.s-p a::text&#39;).get()
date = li.css(&#39;.s-p::attr(t)&#39;).get()
timeArray = time.localtime(int(date))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
&#39;標題&#39;: title_str,
&#39;公眾號&#39;: name,
&#39;文章發(fā)布時(shí)間&#39;: otherStyleTime,
&#39;文章地址&#39;: article_url,
}
csv_writer.writerow(dit)
print(title_str, name, otherStyleTime, article_url)
   查看全部

  querylist采集微信公眾號文章(爬取所有關(guān)于python的公眾號文章,你了解多少?
)
  前言
  本文中的文字圖片過(guò)濾網(wǎng)絡(luò )可用于學(xué)習、交流,不具有任何商業(yè)用途。如果您有任何問(wèn)題,請聯(lián)系我們進(jìn)行處理。
  文章為基礎開(kāi)發(fā)環(huán)境爬取兩個(gè)公眾號:
  1.抓取所有 文章
  2、爬取所有關(guān)于python的公眾號文章
  爬取 文章
  1、登錄公眾號后點(diǎn)擊圖片和文字
  
  2、打開(kāi)開(kāi)發(fā)者工具
  
  3、點(diǎn)擊超鏈接
  
  加載相關(guān)數據時(shí),有一個(gè)數據包,包括文章標題、鏈接、摘要、發(fā)布時(shí)間等,你也可以選擇其他公眾號進(jìn)行爬取,但這需要你有一個(gè)微信公眾號。
  添加cookie
  import pprint
import time
import requests
import csv
f = open(&#39;青燈公眾號文章.csv&#39;, mode=&#39;a&#39;, encoding=&#39;utf-8&#39;, newline=&#39;&#39;)
csv_writer = csv.DictWriter(f, fieldnames=[&#39;標題&#39;, &#39;文章發(fā)布時(shí)間&#39;, &#39;文章地址&#39;])
csv_writer.writeheader()
for page in range(0, 40, 5):
url = f&#39;https://mp.weixin.qq.com/cgi-b ... in%3D{page}&count=5&fakeid=&type=9&query=&token=1252678642&lang=zh_CN&f=json&ajax=1&#39;
headers = {
&#39;cookie&#39;: &#39;加cookie&#39;,
&#39;referer&#39;: &#39;https://mp.weixin.qq.com/cgi-b ... 39%3B,
&#39;user-agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36&#39;,
}
response = requests.get(url=url, headers=headers)
html_data = response.json()
pprint.pprint(response.json())
lis = html_data[&#39;app_msg_list&#39;]
for li in lis:
title = li[&#39;title&#39;]
link_url = li[&#39;link&#39;]
update_time = li[&#39;update_time&#39;]
timeArray = time.localtime(int(update_time))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
&#39;標題&#39;: title,
&#39;文章發(fā)布時(shí)間&#39;: otherStyleTime,
&#39;文章地址&#39;: link_url,
}
csv_writer.writerow(dit)
print(dit)
  爬取所有關(guān)于python的公眾號文章
  1、搜狗搜索python選擇微信
  
  注意:如果不登錄,只能抓取前十頁(yè)數據。登錄后可以抓取2W多篇文章文章。
  2.直接爬取靜態(tài)網(wǎng)頁(yè)的標題、公眾號、文章地址、發(fā)帖時(shí)間。
  import time
import requests
import parsel
import csv
f = open(&#39;公眾號文章.csv&#39;, mode=&#39;a&#39;, encoding=&#39;utf-8&#39;, newline=&#39;&#39;)
csv_writer = csv.DictWriter(f, fieldnames=[&#39;標題&#39;, &#39;公眾號&#39;, &#39;文章發(fā)布時(shí)間&#39;, &#39;文章地址&#39;])
csv_writer.writeheader()
for page in range(1, 2447):
url = f&#39;https://weixin.sogou.com/weixi ... ge%3D{page}&ie=utf8&#39;
headers = {
&#39;Cookie&#39;: &#39;自己的cookie&#39;,
&#39;Host&#39;: &#39;weixin.sogou.com&#39;,
&#39;Referer&#39;: &#39;https://www.sogou.com/web%3Fqu ... 39%3B,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36&#39;,
}
response = requests.get(url=url, headers=headers)
selector = parsel.Selector(response.text)
lis = selector.css(&#39;.news-list li&#39;)
for li in lis:
title_list = li.css(&#39;.txt-box h3 a::text&#39;).getall()
num = len(title_list)
if num == 1:
title_str = &#39;python&#39; + title_list[0]
else:
title_str = &#39;python&#39;.join(title_list)
href = li.css(&#39;.txt-box h3 a::attr(href)&#39;).get()
article_url = &#39;https://weixin.sogou.com&#39; + href
name = li.css(&#39;.s-p a::text&#39;).get()
date = li.css(&#39;.s-p::attr(t)&#39;).get()
timeArray = time.localtime(int(date))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
&#39;標題&#39;: title_str,
&#39;公眾號&#39;: name,
&#39;文章發(fā)布時(shí)間&#39;: otherStyleTime,
&#39;文章地址&#39;: article_url,
}
csv_writer.writerow(dit)
print(title_str, name, otherStyleTime, article_url)
  

官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久