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

querylist采集微信公眾號文章

querylist采集微信公眾號文章

分享文章:通過(guò)微信公眾平臺獲取公眾號文章的方法示例

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

  如何通過(guò)微信公眾平臺獲取官方帳戶(hù)文章的示例
  我以前自己維護過(guò)一個(gè)官方帳戶(hù),但是由于我的個(gè)人關(guān)系很長(cháng)時(shí)間沒(méi)有更新,所以我今天起身去記住它,但是偶然發(fā)現了一種獲取微信官方帳戶(hù)的方法文章。
  以前有很多方法可以獲取它,并且可以通過(guò)搜狗,青博,網(wǎng)絡(luò ),客戶(hù)端等來(lái)獲取。這可能并不出色,但是操作簡(jiǎn)單易懂。
  因此,首先您需要擁有一個(gè)微信公眾平臺帳戶(hù)
  微信公眾平臺:
  
  登錄后,轉到主頁(yè),然后單擊“新建論壇帖子”。
  
  選擇自己創(chuàng )建的圖形:
  
  似乎是官方帳戶(hù)操作教學(xué)
  進(jìn)入編輯頁(yè)面后,單擊超鏈接
  
  彈出一個(gè)選擇框,我們在框中輸入相應的正式帳戶(hù)名稱(chēng),并出現相應的文章列表
  
  您感到驚訝嗎?您可以打開(kāi)控制臺以檢查請求的界面
  
  打開(kāi)響應,我們需要文章鏈接
  
  確認數據后,我們需要分析此界面。
  感覺(jué)很簡(jiǎn)單。 GET請求帶有一些參數。
  
  Fakeid是官方帳戶(hù)的唯一ID,因此,如果您想直接通過(guò)名稱(chēng)獲取文章列表,則還需要先獲取偽造品。
  輸入官方帳戶(hù)名后,單擊“搜索”。您會(huì )看到搜索界面已觸發(fā),并返回了假冒的商品。
  
  此界面不需要很多參數。
  
  接下來(lái),我們可以使用代碼來(lái)模擬上述操作。
  但是您還需要使用現有的cookie以避免登錄。
  
  我尚未測試當前cookie的有效期。 Cookies可能需要及時(shí)更新。
  測試代碼:
  
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篇文章文章。如果要獲取更多歷史記錄文章,則可以修改數據中的“開(kāi)始”參數,0是第一頁(yè),5是第二頁(yè),10是第三頁(yè)(依此類(lèi)推)
  但是,如果您想進(jìn)行大規模爬網(wǎng):
  請為自己和履帶的速度安排一個(gè)穩定的代理人,并為可能被阻止的情況準備多個(gè)帳戶(hù)。
  以上是本文的全部?jì)热?,希望對大家的學(xué)習有所幫助,希望大家都支持Ian。 查看全部

  如何通過(guò)微信公眾平臺獲取官方帳戶(hù)文章的示例
  我以前自己維護過(guò)一個(gè)官方帳戶(hù),但是由于我的個(gè)人關(guān)系很長(cháng)時(shí)間沒(méi)有更新,所以我今天起身去記住它,但是偶然發(fā)現了一種獲取微信官方帳戶(hù)的方法文章。
  以前有很多方法可以獲取它,并且可以通過(guò)搜狗,青博,網(wǎng)絡(luò ),客戶(hù)端等來(lái)獲取。這可能并不出色,但是操作簡(jiǎn)單易懂。
  因此,首先您需要擁有一個(gè)微信公眾平臺帳戶(hù)
  微信公眾平臺:
  
  登錄后,轉到主頁(yè),然后單擊“新建論壇帖子”。
  
  選擇自己創(chuàng )建的圖形:
  
  似乎是官方帳戶(hù)操作教學(xué)
  進(jìn)入編輯頁(yè)面后,單擊超鏈接
  
  彈出一個(gè)選擇框,我們在框中輸入相應的正式帳戶(hù)名稱(chēng),并出現相應的文章列表
  
  您感到驚訝嗎?您可以打開(kāi)控制臺以檢查請求的界面
  
  打開(kāi)響應,我們需要文章鏈接
  
  確認數據后,我們需要分析此界面。
  感覺(jué)很簡(jiǎn)單。 GET請求帶有一些參數。
  
  Fakeid是官方帳戶(hù)的唯一ID,因此,如果您想直接通過(guò)名稱(chēng)獲取文章列表,則還需要先獲取偽造品。
  輸入官方帳戶(hù)名后,單擊“搜索”。您會(huì )看到搜索界面已觸發(fā),并返回了假冒的商品。
  
  此界面不需要很多參數。
  
  接下來(lái),我們可以使用代碼來(lái)模擬上述操作。
  但是您還需要使用現有的cookie以避免登錄。
  
  我尚未測試當前cookie的有效期。 Cookies可能需要及時(shí)更新。
  測試代碼:
  
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篇文章文章。如果要獲取更多歷史記錄文章,則可以修改數據中的“開(kāi)始”參數,0是第一頁(yè),5是第二頁(yè),10是第三頁(yè)(依此類(lèi)推)
  但是,如果您想進(jìn)行大規模爬網(wǎng):
  請為自己和履帶的速度安排一個(gè)穩定的代理人,并為可能被阻止的情況準備多個(gè)帳戶(hù)。
  以上是本文的全部?jì)热?,希望對大家的學(xué)習有所幫助,希望大家都支持Ian。

分享方法:爬蟲(chóng)如何爬取微信公眾號文章

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

  爬蟲(chóng)如何抓取微信公眾號文章
  第二部分文章:python爬蟲(chóng)如何抓取微信官方帳戶(hù)文章(二)
  下一篇文章是如何連接python爬蟲(chóng)以實(shí)現每天抓取微信公眾號的推送文章
  由于我最近在法庭上執業(yè),因此我需要一些官方帳戶(hù)數據,然后將其放入網(wǎng)頁(yè)中以進(jìn)行顯示以便于查看。我之前寫(xiě)過(guò)一些爬蟲(chóng),但是它們都對網(wǎng)站數據進(jìn)行爬蟲(chóng)。這次我認為這很容易,但是遇到了很多麻煩,在這里與您分享。
  1、使用采集器搜尋數據的最基本也是最重要的事情是找到目標網(wǎng)站的url地址,然后遍歷該地址以一個(gè)或多個(gè)線(xiàn)程對其進(jìn)行搜尋。通常,后續的爬網(wǎng)地址主要是通過(guò)兩種方式獲得的,一種是基于頁(yè)面分頁(yè)來(lái)計算URL地址的規律,通常后跟參數page = num,另一種是過(guò)濾出當前地址的標簽。頁(yè)面,然后將該URL作為后續的抓取地址。不幸的是,這兩種方法都不能在微信公眾號中使用,因為官方帳號的文章地址之間沒(méi)有關(guān)聯(lián),并且不可能通過(guò)一個(gè)文章地址找到所有文章地址
  2、那么我們如何獲得官方帳戶(hù)的歷史文章地址?一種方法是通過(guò)搜狗微信網(wǎng)站搜索目標官方帳戶(hù),您可以看到最新的文章文章,但這僅僅是最新的一篇無(wú)法獲取歷史記錄文章。如果要每天進(jìn)行爬網(wǎng),則可以使用此方法每天進(jìn)行爬網(wǎng)。圖片是這樣的:
  
  3、當然,我們需要很多結果,因此我們仍然必須找到一種方法來(lái)獲取所有歷史文本,少說(shuō)廢話(huà),然后直達主題:
<p>4、找到歷史記錄文章后,我們如何編寫(xiě)程序以獲取所有URL地址? ,首先讓我們分析一下瀏覽器在單擊官方帳戶(hù)名,調出檢查頁(yè)面,單擊網(wǎng)絡(luò ),首先清除所有數據,然后單擊目標官方帳戶(hù)時(shí)的行為,您可以看到以下界面: 查看全部

  爬蟲(chóng)如何抓取微信公眾號文章
  第二部分文章:python爬蟲(chóng)如何抓取微信官方帳戶(hù)文章(二)
  下一篇文章是如何連接python爬蟲(chóng)以實(shí)現每天抓取微信公眾號的推送文章
  由于我最近在法庭上執業(yè),因此我需要一些官方帳戶(hù)數據,然后將其放入網(wǎng)頁(yè)中以進(jìn)行顯示以便于查看。我之前寫(xiě)過(guò)一些爬蟲(chóng),但是它們都對網(wǎng)站數據進(jìn)行爬蟲(chóng)。這次我認為這很容易,但是遇到了很多麻煩,在這里與您分享。
  1、使用采集器搜尋數據的最基本也是最重要的事情是找到目標網(wǎng)站的url地址,然后遍歷該地址以一個(gè)或多個(gè)線(xiàn)程對其進(jìn)行搜尋。通常,后續的爬網(wǎng)地址主要是通過(guò)兩種方式獲得的,一種是基于頁(yè)面分頁(yè)來(lái)計算URL地址的規律,通常后跟參數page = num,另一種是過(guò)濾出當前地址的標簽。頁(yè)面,然后將該URL作為后續的抓取地址。不幸的是,這兩種方法都不能在微信公眾號中使用,因為官方帳號的文章地址之間沒(méi)有關(guān)聯(lián),并且不可能通過(guò)一個(gè)文章地址找到所有文章地址
  2、那么我們如何獲得官方帳戶(hù)的歷史文章地址?一種方法是通過(guò)搜狗微信網(wǎng)站搜索目標官方帳戶(hù),您可以看到最新的文章文章,但這僅僅是最新的一篇無(wú)法獲取歷史記錄文章。如果要每天進(jìn)行爬網(wǎng),則可以使用此方法每天進(jìn)行爬網(wǎng)。圖片是這樣的:
  
  3、當然,我們需要很多結果,因此我們仍然必須找到一種方法來(lái)獲取所有歷史文本,少說(shuō)廢話(huà),然后直達主題:
<p>4、找到歷史記錄文章后,我們如何編寫(xiě)程序以獲取所有URL地址? ,首先讓我們分析一下瀏覽器在單擊官方帳戶(hù)名,調出檢查頁(yè)面,單擊網(wǎng)絡(luò ),首先清除所有數據,然后單擊目標官方帳戶(hù)時(shí)的行為,您可以看到以下界面:

解密:python批量爬取公眾號文章

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

  Python批量抓取公共帳戶(hù)文章
  轉載:
  Python檢索官方帳戶(hù)文章
  
  PS:如果您需要Python學(xué)習資料,可以單擊下面的鏈接自行獲得/ A6Zvjdun
  有多種爬網(wǎng)方式。今天,我將與您分享一個(gè)更簡(jiǎn)單的方法,即通過(guò)微信公眾號背景的“超鏈接”功能進(jìn)行爬網(wǎng)。也許有些朋友沒(méi)有聯(lián)系到微信公眾號的后臺,這是一張供大家理解的圖片
  
  這里的一些朋友可能會(huì )說(shuō),我無(wú)法登錄到正式帳戶(hù),該怎么辦? ? ?
  沒(méi)關(guān)系,盡管每個(gè)爬蟲(chóng)的目的都是為了獲得我們想要的結果,但這并不是我們學(xué)習的重點(diǎn)。我們學(xué)習的重點(diǎn)在于抓取過(guò)程,如何獲取目標數據,因此我們無(wú)法登錄到公眾文章閱讀此內容文章之后,后臺的朋友可能無(wú)法獲得最終的抓取結果,但閱讀此文章后,您也會(huì )有所收獲。
  一、初步準備
  選擇要爬網(wǎng)的目標官方帳戶(hù)
  單擊超鏈接-進(jìn)入編輯超鏈接界面-進(jìn)入我們需要抓取的搜索目標官方帳戶(hù)
  今天我們將以“數據分析”官方帳戶(hù)的抓取為例,供大家介紹
  
  單擊官方帳戶(hù)以查看每個(gè)文章對應的標題信息
  
  這次抓取工具的目標是獲得文章標題和相應的鏈接。
  二、開(kāi)始抓取
  爬行的三個(gè)步驟:
  1、請求頁(yè)面
  首先導入我們需要使用此采集器的第三方庫
  import re#用來(lái)解析網(wǎng)頁(yè)
import requests#用來(lái)請求網(wǎng)頁(yè)
import csv#用來(lái)保存數據
import time#用來(lái)設置每次爬取間隔的時(shí)間
  找到我們抓取的目標數據的位置,單擊通過(guò)搜索獲得的包,然后獲取目標URL和請求標頭信息
  
  請求網(wǎng)頁(yè)
  headers={
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36&#39;,
&#39;cookie&#39;: &#39;pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15&#39;
}#請求頭信息,這里cookie信息必須添加,否則得不到網(wǎng)頁(yè)信息
url=&#39;https://mp.weixin.qq.com/cgi-b ... 39%3B
response=requests.get(url,headers=headers)#得到響應內容
response.encoding=&#39;utf-8&#39;#設置響應內容為utf-8格式
html=response.text#得到網(wǎng)頁(yè)的文本形式
print(html)
  此處的請求標頭信息必須添加cookie信息,否則無(wú)法獲取網(wǎng)頁(yè)信息
  網(wǎng)頁(yè)的請求結果如下圖所示。紅色框標記了我們需要的文章標題和文章鏈接。
  
  2、分析網(wǎng)頁(yè)
  從網(wǎng)頁(yè)響應結果中我們可以看到,每個(gè)文章的標題和鏈接都位于“ title”標簽和“ cover”標簽的后面,因此我們可以使用正則表達式直接對其進(jìn)行解析
  title=re.findall(&#39;"title":"(.*?)"&#39;,html)#得到文章標題
cover=re.findall(&#39;"cover":"(.*?)"&#39;,html)#得到文章鏈接
all=zip(title,cover)#利用zip方法,將兩個(gè)列表中的數據一一對應
print(list(all))#list是對zip方法得到的數據進(jìn)行解壓
  解析后的結果如下
  
  3、保存數據
  for data in all:#for循環(huán)遍歷列表
time.sleep(3)#每爬取一篇文章間隔3秒,以防觸發(fā)反爬
with open(&#39;C:\\Users\\Administrator\\Desktop\\爬取公眾號文章.csv&#39;,&#39;a&#39;,encoding=&#39;utf-8-sig&#39;) as file:
#將數據保存到桌面
write=csv.writer(file)
write.writerow(data)
  到目前為止,該抓取工具已經(jīng)完成,讓我們看一下最終結果
  
  完整代碼 查看全部

  Python批量抓取公共帳戶(hù)文章
  轉載:
  Python檢索官方帳戶(hù)文章
  
  PS:如果您需要Python學(xué)習資料,可以單擊下面的鏈接自行獲得/ A6Zvjdun
  有多種爬網(wǎng)方式。今天,我將與您分享一個(gè)更簡(jiǎn)單的方法,即通過(guò)微信公眾號背景的“超鏈接”功能進(jìn)行爬網(wǎng)。也許有些朋友沒(méi)有聯(lián)系到微信公眾號的后臺,這是一張供大家理解的圖片
  
  這里的一些朋友可能會(huì )說(shuō),我無(wú)法登錄到正式帳戶(hù),該怎么辦? ? ?
  沒(méi)關(guān)系,盡管每個(gè)爬蟲(chóng)的目的都是為了獲得我們想要的結果,但這并不是我們學(xué)習的重點(diǎn)。我們學(xué)習的重點(diǎn)在于抓取過(guò)程,如何獲取目標數據,因此我們無(wú)法登錄到公眾文章閱讀此內容文章之后,后臺的朋友可能無(wú)法獲得最終的抓取結果,但閱讀此文章后,您也會(huì )有所收獲。
  一、初步準備
  選擇要爬網(wǎng)的目標官方帳戶(hù)
  單擊超鏈接-進(jìn)入編輯超鏈接界面-進(jìn)入我們需要抓取的搜索目標官方帳戶(hù)
  今天我們將以“數據分析”官方帳戶(hù)的抓取為例,供大家介紹
  
  單擊官方帳戶(hù)以查看每個(gè)文章對應的標題信息
  
  這次抓取工具的目標是獲得文章標題和相應的鏈接。
  二、開(kāi)始抓取
  爬行的三個(gè)步驟:
  1、請求頁(yè)面
  首先導入我們需要使用此采集器的第三方庫
  import re#用來(lái)解析網(wǎng)頁(yè)
import requests#用來(lái)請求網(wǎng)頁(yè)
import csv#用來(lái)保存數據
import time#用來(lái)設置每次爬取間隔的時(shí)間
  找到我們抓取的目標數據的位置,單擊通過(guò)搜索獲得的包,然后獲取目標URL和請求標頭信息
  
  請求網(wǎng)頁(yè)
  headers={
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36&#39;,
&#39;cookie&#39;: &#39;pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15&#39;
}#請求頭信息,這里cookie信息必須添加,否則得不到網(wǎng)頁(yè)信息
url=&#39;https://mp.weixin.qq.com/cgi-b ... 39%3B
response=requests.get(url,headers=headers)#得到響應內容
response.encoding=&#39;utf-8&#39;#設置響應內容為utf-8格式
html=response.text#得到網(wǎng)頁(yè)的文本形式
print(html)
  此處的請求標頭信息必須添加cookie信息,否則無(wú)法獲取網(wǎng)頁(yè)信息
  網(wǎng)頁(yè)的請求結果如下圖所示。紅色框標記了我們需要的文章標題和文章鏈接。
  
  2、分析網(wǎng)頁(yè)
  從網(wǎng)頁(yè)響應結果中我們可以看到,每個(gè)文章的標題和鏈接都位于“ title”標簽和“ cover”標簽的后面,因此我們可以使用正則表達式直接對其進(jìn)行解析
  title=re.findall(&#39;"title":"(.*?)"&#39;,html)#得到文章標題
cover=re.findall(&#39;"cover":"(.*?)"&#39;,html)#得到文章鏈接
all=zip(title,cover)#利用zip方法,將兩個(gè)列表中的數據一一對應
print(list(all))#list是對zip方法得到的數據進(jìn)行解壓
  解析后的結果如下
  
  3、保存數據
  for data in all:#for循環(huán)遍歷列表
time.sleep(3)#每爬取一篇文章間隔3秒,以防觸發(fā)反爬
with open(&#39;C:\\Users\\Administrator\\Desktop\\爬取公眾號文章.csv&#39;,&#39;a&#39;,encoding=&#39;utf-8-sig&#39;) as file:
#將數據保存到桌面
write=csv.writer(file)
write.writerow(data)
  到目前為止,該抓取工具已經(jīng)完成,讓我們看一下最終結果
  
  完整代碼

免費獲?。何⑿殴娞柵颗廊ava版

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

  微信公眾號批量抓取Java版本
  最近,我們需要抓取微信公眾號的文章信息。我在互聯(lián)網(wǎng)上搜索后發(fā)現,抓取微信官方賬號的困難在于無(wú)法在PC端打開(kāi)官方賬號文章的鏈接。您需要使用WeChat的瀏覽器(獲取WeChat客戶(hù)端的補充參數才能訪(fǎng)問(wèn)其他平臺上的Open),這會(huì )給爬蟲(chóng)程序帶來(lái)很多麻煩。后來(lái),在知乎上,我看到了由一頭大牛用PHP編寫(xiě)的微信官方帳戶(hù)爬網(wǎng)程序,并且根據大佬的想法將其直接制成Java。在轉換過(guò)程中遇到了很多詳細的問(wèn)題,因此請與大家分享。
  系統的基本思想是在A(yíng)ndroid模擬器上運行微信,模擬器設置代理,通過(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,它將被安裝
  互聯(lián)網(wǎng)上只有一個(gè)Android模擬器。
  首先為代理服務(wù)器安裝證書(shū)。默認情況下,Anyproxy不會(huì )解析https鏈接。安裝證書(shū)后,可以解決它。在cmd中執行anyproxy --root將安裝證書(shū),然后必須在模擬器上下載證書(shū)。
  然后輸入anyproxy -i命令打開(kāi)代理服務(wù)。 (請記住要添加參數?。?br />   
  記住該IP和端口,然后Android仿真器的代理將使用此IP和端口?,F在,使用瀏覽器打開(kāi)網(wǎng)頁(yè):: 8002 /這是anyproxy的網(wǎng)絡(luò )界面,用于顯示http傳輸數據。
  
  單擊上方紅色框中的菜單,將顯示QR碼。使用Android模擬器掃描代碼以進(jìn)行識別。仿真器(手機)將下載證書(shū)并安裝。
  現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip是運行anyproxy的計算機的ip,端口為8001
  
  準備工作到此基本完成。在模擬器上打開(kāi)微信并開(kāi)設一個(gè)官方帳戶(hù)文章。您可以從剛打開(kāi)的Web界面中查看anyproxy捕獲的數據:
  
  在上方的紅色框中是微信文章的鏈接,單擊進(jìn)入以查看特定數據。如果響應正文中沒(méi)有任何內容,則證書(shū)安裝可能存在問(wèn)題。
  如果一切都通過(guò)以上,則可以下去。
  在這里,我們依靠代理服務(wù)來(lái)捕獲微信數據,但是我們無(wú)法捕獲數據,而只能自己操作微信。最好手動(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
  文件中有一種稱(chēng)為replaceServerResDataAsync的方法:function(req,res,serverResData,callback)。此方法負責對anyproxy獲得的數據進(jìn)行各種操作。開(kāi)頭應該只有callback(serverResData);此語(yǔ)句意味著(zhù)直接將服務(wù)器響應數據返回給客戶(hù)端。直接刪除此語(yǔ)句,并將其替換為Daniel編寫(xiě)的以下代碼。我在這里沒(méi)有對代碼做任何更改,并且內部的注釋也很清楚地解釋了,只需按照邏輯來(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() !== ""){
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('http');
11 http.get('http://xxx/getWxHis', function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on('data', 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 = \'(.*?)\';/;//定義歷史消息正則匹配規則(和第一種頁(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('http');
36 http.get('xxx/getWxHis', function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on('data', 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('http');
65 http.get('http://xxx/getWxPost', function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on('data', 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)短的解釋。鏈接到微信官方帳戶(hù)歷史新聞頁(yè)面的鏈接有兩種形式:一種以/ mp / getmasssendmsg開(kāi)頭,另一種以/ mp / profile_ext開(kāi)頭。歷史記錄頁(yè)面可以關(guān)閉。如果將其關(guān)閉,則會(huì )觸發(fā)js事件,以發(fā)送請求以獲取json數據(下一頁(yè)內容)。也有指向官方帳戶(hù)文章的鏈接,也有指向文章的閱讀次數和喜歡次數的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷加以區分。這里的問(wèn)題是,如果需要對所有歷史頁(yè)面進(jìn)行爬網(wǎng),該怎么做。我的想法是模擬鼠標在js中向下滑動(dòng),以觸發(fā)提交請求以加載列表的下一部分?;蛘咧苯邮褂胊nyproxy分析滑動(dòng)加載請求,并將請求直接發(fā)送至微信服務(wù)器。但是,如何判斷沒(méi)有剩余數據始終存在問(wèn)題。我正在搜尋最新數據。我暫時(shí)沒(méi)有這個(gè)要求。以后可能需要。如果需要,可以嘗試一下。 查看全部

  微信公眾號批量抓取Java版本
  最近,我們需要抓取微信公眾號的文章信息。我在互聯(lián)網(wǎng)上搜索后發(fā)現,抓取微信官方賬號的困難在于無(wú)法在PC端打開(kāi)官方賬號文章的鏈接。您需要使用WeChat的瀏覽器(獲取WeChat客戶(hù)端的補充參數才能訪(fǎng)問(wèn)其他平臺上的Open),這會(huì )給爬蟲(chóng)程序帶來(lái)很多麻煩。后來(lái),在知乎上,我看到了由一頭大牛用PHP編寫(xiě)的微信官方帳戶(hù)爬網(wǎng)程序,并且根據大佬的想法將其直接制成Java。在轉換過(guò)程中遇到了很多詳細的問(wèn)題,因此請與大家分享。
  系統的基本思想是在A(yíng)ndroid模擬器上運行微信,模擬器設置代理,通過(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,它將被安裝
  互聯(lián)網(wǎng)上只有一個(gè)Android模擬器。
  首先為代理服務(wù)器安裝證書(shū)。默認情況下,Anyproxy不會(huì )解析https鏈接。安裝證書(shū)后,可以解決它。在cmd中執行anyproxy --root將安裝證書(shū),然后必須在模擬器上下載證書(shū)。
  然后輸入anyproxy -i命令打開(kāi)代理服務(wù)。 (請記住要添加參數?。?br />   
  記住該IP和端口,然后Android仿真器的代理將使用此IP和端口?,F在,使用瀏覽器打開(kāi)網(wǎng)頁(yè):: 8002 /這是anyproxy的網(wǎng)絡(luò )界面,用于顯示http傳輸數據。
  
  單擊上方紅色框中的菜單,將顯示QR碼。使用Android模擬器掃描代碼以進(jìn)行識別。仿真器(手機)將下載證書(shū)并安裝。
  現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip是運行anyproxy的計算機的ip,端口為8001
  
  準備工作到此基本完成。在模擬器上打開(kāi)微信并開(kāi)設一個(gè)官方帳戶(hù)文章。您可以從剛打開(kāi)的Web界面中查看anyproxy捕獲的數據:
  
  在上方的紅色框中是微信文章的鏈接,單擊進(jìn)入以查看特定數據。如果響應正文中沒(méi)有任何內容,則證書(shū)安裝可能存在問(wèn)題。
  如果一切都通過(guò)以上,則可以下去。
  在這里,我們依靠代理服務(wù)來(lái)捕獲微信數據,但是我們無(wú)法捕獲數據,而只能自己操作微信。最好手動(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
  文件中有一種稱(chēng)為replaceServerResDataAsync的方法:function(req,res,serverResData,callback)。此方法負責對anyproxy獲得的數據進(jìn)行各種操作。開(kāi)頭應該只有callback(serverResData);此語(yǔ)句意味著(zhù)直接將服務(wù)器響應數據返回給客戶(hù)端。直接刪除此語(yǔ)句,并將其替換為Daniel編寫(xiě)的以下代碼。我在這里沒(méi)有對代碼做任何更改,并且內部的注釋也很清楚地解釋了,只需按照邏輯來(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() !== ""){
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('http');
11 http.get('http://xxx/getWxHis', function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on('data', 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 = \'(.*?)\';/;//定義歷史消息正則匹配規則(和第一種頁(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('http');
36 http.get('xxx/getWxHis', function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on('data', 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('http');
65 http.get('http://xxx/getWxPost', function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on('data', 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)短的解釋。鏈接到微信官方帳戶(hù)歷史新聞頁(yè)面的鏈接有兩種形式:一種以/ mp / getmasssendmsg開(kāi)頭,另一種以/ mp / profile_ext開(kāi)頭。歷史記錄頁(yè)面可以關(guān)閉。如果將其關(guān)閉,則會(huì )觸發(fā)js事件,以發(fā)送請求以獲取json數據(下一頁(yè)內容)。也有指向官方帳戶(hù)文章的鏈接,也有指向文章的閱讀次數和喜歡次數的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷加以區分。這里的問(wèn)題是,如果需要對所有歷史頁(yè)面進(jìn)行爬網(wǎng),該怎么做。我的想法是模擬鼠標在js中向下滑動(dòng),以觸發(fā)提交請求以加載列表的下一部分?;蛘咧苯邮褂胊nyproxy分析滑動(dòng)加載請求,并將請求直接發(fā)送至微信服務(wù)器。但是,如何判斷沒(méi)有剩余數據始終存在問(wèn)題。我正在搜尋最新數據。我暫時(shí)沒(méi)有這個(gè)要求。以后可能需要。如果需要,可以嘗試一下。

內容分享:微信公眾號文章爬取實(shí)戰

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

  微信公眾號文章抓實(shí)戰
  在之前的爬蟲(chóng)實(shí)戰中,我們基于關(guān)鍵詞搜索了相關(guān)的微信公眾號文章,并獲得了一系列相關(guān)的文章標題,鏈接等。找到文章后,我們需要保存,此實(shí)驗的目的是抓取微信公眾號文章文本內容。
  實(shí)驗環(huán)境
  python3
  主要使用的請求pyquery庫
  步驟分析
  本文使用CSDN公共帳戶(hù)的Python來(lái)抓取北京二手房數據,以分析北票人是否負擔得起房屋? 隨附完整的源代碼作為示例,
  在請求此頁(yè)面后,我們獲得文章標題,作者,官方帳戶(hù)信息和文章文本信息。由于我們要顯示文章的內容,因此為了確保文章文本的格式不變,我們提取html格式,最后將所有提取的內容合并為html格式,并通過(guò)瀏覽器保持文章的原創(chuàng )格式。
  應注意,文章中的所有圖片均來(lái)自互聯(lián)網(wǎng)。這些圖片無(wú)法通過(guò)打開(kāi)本地html進(jìn)行解析,因此我們提取了圖片鏈接,然后將其下載并保存到本地,并且html中的圖片鏈接替換了本地位置。
  在實(shí)驗過(guò)程中確定文章標題
  文章標題位于以下位置:
  
  1<br />2<br />
  <br />title = doc.find(&#39;.rich_media_title&#39;).text()<br />
  確認官方帳戶(hù)信息
  作者信息,官方帳戶(hù)的來(lái)源,微信帳戶(hù)以及官方帳戶(hù)的介紹都可以通過(guò)pyquery提?。?br />   
  1<br />2<br />3<br />4<br />
  # 微信公眾號<br />author = doc.find(&#39;#meta_content .rich_media_meta_text&#39;).text()<br />source = doc.find(&#39;#js_name&#39;).text()<br />source_info = doc.find(&#39;.profile_meta_value&#39;).text()<br />
  確認文章的內容
  文章的正文內容無(wú)法通過(guò)text()提取,因為提取的內容只是文本部分,而且缺少格式,因此顯示起來(lái)非常難看,因此我們使用html()保留身體部位的html元素:
  
  1<br />2<br />
  # 正文內容<br />content = doc.find(&#39;.rich_media_content&#39;)<br />
  提取所有圖像鏈接
  所有圖像鏈接都在img元素的data-src屬性中:
  
  1<br />2<br />3<br />4<br />5<br />6<br />
  # 所有圖片鏈接<br />pics_src = content.find(&#39;img&#39;).items()<br />for each in pics_src:<br /> if &#39;=&#39; in each.attr(&#39;data-src&#39;):<br /> pic.append(each.attr(&#39;data-src&#39;))<br />#print(pic)<br />
  下載圖片
  下載文章中的所有圖片并將其保存在本地文件中
  1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />
  def (title,url):<br /> print(url)<br /> pic_name = url.split(&#39;/&#39;)[4]<br /> pic_type = url.split(&#39;=&#39;)[1]<br /> response = requests.get(url,headers=random.choice(headers))<br /> try:<br /> if response.status_code == 200:<br /> file_dir = "{0}/{1}".format(os.getcwd(), title)<br /> if not os.path.isdir(file_dir):<br /> os.mkdir(file_dir)<br /> path = os.path.join(file_dir,pic_name+&#39;.&#39;+pic_type)<br /> if not os.path.exists(path):<br /> with open(path,&#39;wb&#39;) as f:<br /> f.write(response.content)<br /> except:<br /> pass<br />
  替換圖片
  將文本鏈接中的圖像鏈接替換為本地圖像的鏈接,但要注意,我們需要在img元素中添加src屬性,因為實(shí)際的圖像鏈接存儲在此處,然后存儲圖像的位置用作src屬性值。
  1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />
  for item in content.find(&#39;img&#39;).items():<br /> pic_url = item.attr(&#39;data-src&#39;)<br /> if &#39;=&#39; in pic_url:<br /> pic_name = pic_url.split(&#39;/&#39;)[4]<br /> pic_type = pic_url.split(&#39;=&#39;)[1]<br /> image = pic_name + &#39;.&#39; + pic_type<br /> item.add_class(&#39;src&#39;)<br /> item.attr(&#39;src&#39;,image)<br />
  生成index.html
  以html格式添加先前提取的文章標題,作者和官方帳戶(hù)信息以生成index.html,然后將其打開(kāi)以查看微信正文內容。
  1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />
  file_dir = "{0}/{1}".format(os.getcwd(), title)<br />path = os.path.join(file_dir,&#39;index.html&#39;)<br /><br />index = &#39;&#39;+title+&#39;
&#39;<br />index += &#39;&#39;+author+&#39;&#39;+source+&#39;
&#39;<br />index += &#39;&#39;+source_info+&#39;
&#39;<br />index += content<br />with open(path, &#39;wb&#39;) as f:<br /> f.write(index.encode(&#39;utf-8&#39;))<br />
  結果分析與解釋
  有關(guān)完整代碼,請參見(jiàn)微信2. py
  運行代碼:
  1<br />
  python https://mp.weixin.qq.com/s/QAw ... %3Bbr />
  
  檢索到的index.html如下: 查看全部

  微信公眾號文章抓實(shí)戰
  在之前的爬蟲(chóng)實(shí)戰中,我們基于關(guān)鍵詞搜索了相關(guān)的微信公眾號文章,并獲得了一系列相關(guān)的文章標題,鏈接等。找到文章后,我們需要保存,此實(shí)驗的目的是抓取微信公眾號文章文本內容。
  實(shí)驗環(huán)境
  python3
  主要使用的請求pyquery庫
  步驟分析
  本文使用CSDN公共帳戶(hù)的Python來(lái)抓取北京二手房數據,以分析北票人是否負擔得起房屋? 隨附完整的源代碼作為示例,
  在請求此頁(yè)面后,我們獲得文章標題,作者,官方帳戶(hù)信息和文章文本信息。由于我們要顯示文章的內容,因此為了確保文章文本的格式不變,我們提取html格式,最后將所有提取的內容合并為html格式,并通過(guò)瀏覽器保持文章的原創(chuàng )格式。
  應注意,文章中的所有圖片均來(lái)自互聯(lián)網(wǎng)。這些圖片無(wú)法通過(guò)打開(kāi)本地html進(jìn)行解析,因此我們提取了圖片鏈接,然后將其下載并保存到本地,并且html中的圖片鏈接替換了本地位置。
  在實(shí)驗過(guò)程中確定文章標題
  文章標題位于以下位置:
  
  1<br />2<br />
  <br />title = doc.find(&#39;.rich_media_title&#39;).text()<br />
  確認官方帳戶(hù)信息
  作者信息,官方帳戶(hù)的來(lái)源,微信帳戶(hù)以及官方帳戶(hù)的介紹都可以通過(guò)pyquery提?。?br />   
  1<br />2<br />3<br />4<br />
  # 微信公眾號<br />author = doc.find(&#39;#meta_content .rich_media_meta_text&#39;).text()<br />source = doc.find(&#39;#js_name&#39;).text()<br />source_info = doc.find(&#39;.profile_meta_value&#39;).text()<br />
  確認文章的內容
  文章的正文內容無(wú)法通過(guò)text()提取,因為提取的內容只是文本部分,而且缺少格式,因此顯示起來(lái)非常難看,因此我們使用html()保留身體部位的html元素:
  
  1<br />2<br />
  # 正文內容<br />content = doc.find(&#39;.rich_media_content&#39;)<br />
  提取所有圖像鏈接
  所有圖像鏈接都在img元素的data-src屬性中:
  
  1<br />2<br />3<br />4<br />5<br />6<br />
  # 所有圖片鏈接<br />pics_src = content.find(&#39;img&#39;).items()<br />for each in pics_src:<br /> if &#39;=&#39; in each.attr(&#39;data-src&#39;):<br /> pic.append(each.attr(&#39;data-src&#39;))<br />#print(pic)<br />
  下載圖片
  下載文章中的所有圖片并將其保存在本地文件中
  1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />
  def (title,url):<br /> print(url)<br /> pic_name = url.split(&#39;/&#39;)[4]<br /> pic_type = url.split(&#39;=&#39;)[1]<br /> response = requests.get(url,headers=random.choice(headers))<br /> try:<br /> if response.status_code == 200:<br /> file_dir = "{0}/{1}".format(os.getcwd(), title)<br /> if not os.path.isdir(file_dir):<br /> os.mkdir(file_dir)<br /> path = os.path.join(file_dir,pic_name+&#39;.&#39;+pic_type)<br /> if not os.path.exists(path):<br /> with open(path,&#39;wb&#39;) as f:<br /> f.write(response.content)<br /> except:<br /> pass<br />
  替換圖片
  將文本鏈接中的圖像鏈接替換為本地圖像的鏈接,但要注意,我們需要在img元素中添加src屬性,因為實(shí)際的圖像鏈接存儲在此處,然后存儲圖像的位置用作src屬性值。
  1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />
  for item in content.find(&#39;img&#39;).items():<br /> pic_url = item.attr(&#39;data-src&#39;)<br /> if &#39;=&#39; in pic_url:<br /> pic_name = pic_url.split(&#39;/&#39;)[4]<br /> pic_type = pic_url.split(&#39;=&#39;)[1]<br /> image = pic_name + &#39;.&#39; + pic_type<br /> item.add_class(&#39;src&#39;)<br /> item.attr(&#39;src&#39;,image)<br />
  生成index.html
  以html格式添加先前提取的文章標題,作者和官方帳戶(hù)信息以生成index.html,然后將其打開(kāi)以查看微信正文內容。
  1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />
  file_dir = "{0}/{1}".format(os.getcwd(), title)<br />path = os.path.join(file_dir,&#39;index.html&#39;)<br /><br />index = &#39;&#39;+title+&#39;
&#39;<br />index += &#39;&#39;+author+&#39;&#39;+source+&#39;
&#39;<br />index += &#39;&#39;+source_info+&#39;
&#39;<br />index += content<br />with open(path, &#39;wb&#39;) as f:<br /> f.write(index.encode(&#39;utf-8&#39;))<br />
  結果分析與解釋
  有關(guān)完整代碼,請參見(jiàn)微信2. py
  運行代碼:
  1<br />
  python https://mp.weixin.qq.com/s/QAw ... %3Bbr />
  
  檢索到的index.html如下:

干貨內容:[Python]抓取微信公眾號文章

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

  [Python]搶到微信官方賬號文章
  
  我目前正在開(kāi)發(fā)自己的項目,該項目涉及文章,該項目需要通過(guò)python抓取微信官方帳戶(hù). 由于微信的獨特方法,不可能直接爬網(wǎng). 研究了一些文章之后,我可能會(huì )有想法. 目前,Internet可以毫無(wú)問(wèn)題地搜索提議的解決方案,但是由于第三方庫中的某些更改,內部代碼基本上無(wú)法使用. 本文是為需要爬網(wǎng)公共帳戶(hù)文章的朋友而寫(xiě)的. 最后還將提供python源代碼下載.
  ##公共帳戶(hù)捕獲方法
  當前有兩種主流的公共帳戶(hù)爬網(wǎng)解決方案. 一種是搜索搜狗的微信官方帳戶(hù)頁(yè)面,找到文章地址,然后獲取特定的文章內容. 第二種方法是注冊一個(gè)公共帳戶(hù),然后通過(guò)官方帳戶(hù)的搜索界面可以查詢(xún)產(chǎn)品地址,然后根據該地址獲取產(chǎn)品內容.
  這兩種方案各有優(yōu)缺點(diǎn). 搜狗搜索的核心思想是通過(guò)請求模擬搜狗搜索公共賬號,然后解析搜索結果頁(yè)面,然后根據公共賬號的首頁(yè)地址對抓取工具進(jìn)行爬網(wǎng). }已捕獲詳細信息. 由于搜狗與騰訊之間的協(xié)議,只能顯示最新的10個(gè)文章,但無(wú)法獲取所有文章. 如果要獲取所有文章,則朋友可能必須使用第二種方法. 第二種方法的缺點(diǎn)是通過(guò)騰訊身份驗證注冊公共帳戶(hù). 這個(gè)過(guò)程比較麻煩. 您可以通過(guò)調用該界面的公共帳戶(hù)查詢(xún)界面進(jìn)行查詢(xún),但是您需要使用硒來(lái)模擬滑動(dòng)頁(yè)面翻頁(yè)操作. 整個(gè)過(guò)程仍然很麻煩. 是. 因為我的項目不需要歷史記錄文章,所以我使用搜狗搜索功能來(lái)檢索公共帳戶(hù).
  檢索最近的10個(gè)公共帳戶(hù)文章
  Python需要依賴(lài)的第三方庫如下:
  
  urllib,pyquery,請求,硒
  具體邏輯寫(xiě)在注釋中,沒(méi)有什么特別復雜的.
  核心爬蟲(chóng)課程
  ```python
  #! / usr / bin / python
  #代碼: utf-8
  
  [Python]純文本視圖復制代碼
  import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from urllib import quote
from pyquery import PyQuery as pq
import requests
import time
import re
import os
from selenium.webdriver import Chrome
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.wait import WebDriverWait
# 搜索入口地址,以公眾為關(guān)鍵字搜索該公眾號
def get_search_result_by_keywords(sogou_search_url):
# 爬蟲(chóng)偽裝頭部設置
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0'}
# 設置操作超時(shí)時(shí)長(cháng)
timeout = 5
# 爬蟲(chóng)模擬在一個(gè)request.session中完成
s = requests.Session()
log(u'搜索地址為:%s' % sogou_search_url)
return s.get(sogou_search_url, headers=headers, timeout=timeout).content
# 獲得公眾號主頁(yè)地址
def get_wx_url_by_sougou_search_html(sougou_search_html):
doc = pq(sougou_search_html)
return doc('div[class=txt-box]')('p[class=tit]')('a').attr('href')
# 使用webdriver 加載公眾號主頁(yè)內容,主要是js渲染的部分
def get_selenium_js_html(url):
options = Options()
options.add_argument('-headless') # 無(wú)頭參數
driver = Chrome(executable_path='chromedriver', chrome_options=options)
wait = WebDriverWait(driver, timeout=10)
driver.get(url)
time.sleep(3)
# 執行js得到整個(gè)頁(yè)面內容
html = driver.execute_script("return document.documentElement.outerHTML")
driver.close()
return html
# 獲取公眾號文章內容
def parse_wx_articles_by_html(selenium_html):
doc = pq(selenium_html)
return doc('div[class="weui_media_box appmsg"]')
# 將獲取到的文章轉換為字典
def switch_arctiles_to_list(articles):
# 定義存貯變量
articles_list = []
i = 1
# 遍歷找到的文章,解析里面的內容
if articles:
for article in articles.items():
log(u'開(kāi)始整合(%d/%d)' % (i, len(articles)))
# 處理單個(gè)文章
articles_list.append(parse_one_article(article))
i += 1
return articles_list
# 解析單篇文章
def parse_one_article(article):
article_dict = {}
# 獲取標題
title = article('h4[class="weui_media_title"]').text().strip()
###log(u'標題是: %s' % title)
# 獲取標題對應的地址
url = 'http://mp.weixin.qq.com' + article('h4[class="weui_media_title"]').attr('hrefs')
log(u'地址為: %s' % url)
# 獲取概要內容
summary = article('.weui_media_desc').text()
log(u'文章簡(jiǎn)述: %s' % summary)
# 獲取文章發(fā)表時(shí)間
date = article('.weui_media_extra_info').text().strip()
log(u'發(fā)表時(shí)間為: %s' % date)
# 獲取封面圖片
pic = parse_cover_pic(article)
# 返回字典數據
return {
'title': title,
'url': url,
'summary': summary,
'date': date,
'pic': pic
}
# 查找封面圖片,獲取封面圖片地址
def parse_cover_pic(article):
pic = article('.weui_media_hd').attr('style')
p = re.compile(r'background-image:url\((.*?)\)')
rs = p.findall(pic)
log(u'封面圖片是:%s ' % rs[0] if len(rs) > 0 else '')
return rs[0] if len(rs) > 0 else ''
# 自定義log函數,主要是加上時(shí)間
def log(msg):
print u'%s: %s' % (time.strftime('%Y-%m-%d_%H-%M-%S'), msg)
# 驗證函數
def need_verify(selenium_html):
' 有時(shí)候對方會(huì )封鎖ip,這里做一下判斷,檢測html中是否包含id=verify_change的標簽,有的話(huà),代表被重定向了,提醒過(guò)一陣子重試 '
return pq(selenium_html)('#verify_change').text() != ''
# 創(chuàng )建公眾號命名的文件夾
def create_dir(keywords):
if not os.path.exists(keywords):
os.makedirs(keywords)
# 爬蟲(chóng)主函數
def run(keywords):
' 爬蟲(chóng)入口函數 '
# Step 0 : 創(chuàng )建公眾號命名的文件夾
create_dir(keywords)
# 搜狐微信搜索鏈接入口
sogou_search_url = 'http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&s_from=input&_sug_=n&_sug_type_=' % quote(
keywords)
# Step 1:GET請求到搜狗微信引擎,以微信公眾號英文名稱(chēng)作為查詢(xún)關(guān)鍵字
log(u'開(kāi)始獲取,微信公眾號英文名為:%s' % keywords)
log(u'開(kāi)始調用sougou搜索引擎')
sougou_search_html = get_search_result_by_keywords(sogou_search_url)
# Step 2:從搜索結果頁(yè)中解析出公眾號主頁(yè)鏈接
log(u'獲取sougou_search_html成功,開(kāi)始抓取公眾號對應的主頁(yè)wx_url')
wx_url = get_wx_url_by_sougou_search_html(sougou_search_html)
log(u'獲取wx_url成功,%s' % wx_url)
# Step 3:Selenium+PhantomJs獲取js異步加載渲染后的html
log(u'開(kāi)始調用selenium渲染html')
selenium_html = get_selenium_js_html(wx_url)
# Step 4: 檢測目標網(wǎng)站是否進(jìn)行了封鎖
if need_verify(selenium_html):
log(u'爬蟲(chóng)被目標網(wǎng)站封鎖,請稍后再試')
else:
# Step 5: 使用PyQuery,從Step 3獲取的html中解析出公眾號文章列表的數據
log(u'調用selenium渲染html完成,開(kāi)始解析公眾號文章')
articles = parse_wx_articles_by_html(selenium_html)
log(u'抓取到微信文章%d篇' % len(articles))
# Step 6: 把微信文章數據封裝成字典的list
log(u'開(kāi)始整合微信文章數據為字典')
articles_list = switch_arctiles_to_list(articles)
return [content['title'] for content in articles_list]
```
main入口函數:
```python
# coding: utf8
import spider_weixun_by_sogou
if __name__ == '__main__':
gongzhonghao = raw_input(u'input weixin gongzhonghao:')
if not gongzhonghao:
gongzhonghao = 'spider'
text = " ".join(spider_weixun_by_sogou.run(gongzhonghao))
print text
  ```
<p>直接運行main方法,然后在控制臺中輸入要爬網(wǎng)的公共帳戶(hù)的英文名稱(chēng). 中文搜索可能不止一個(gè). 此處所做的只是對精確搜索的搜索. 只需檢查電話(huà)并檢查公共帳戶(hù)號的英文,請單擊公共帳戶(hù),然后查看公共帳戶(hù)信息以查看以下與“ mask5}爬網(wǎng)的爬蟲(chóng)結果相關(guān)的信息. 您可以通過(guò)在代碼中調用webdriver.py來(lái)檢索文章的特定內容. 查看全部

  [Python]搶到微信官方賬號文章
  
  我目前正在開(kāi)發(fā)自己的項目,該項目涉及文章,該項目需要通過(guò)python抓取微信官方帳戶(hù). 由于微信的獨特方法,不可能直接爬網(wǎng). 研究了一些文章之后,我可能會(huì )有想法. 目前,Internet可以毫無(wú)問(wèn)題地搜索提議的解決方案,但是由于第三方庫中的某些更改,內部代碼基本上無(wú)法使用. 本文是為需要爬網(wǎng)公共帳戶(hù)文章的朋友而寫(xiě)的. 最后還將提供python源代碼下載.
  ##公共帳戶(hù)捕獲方法
  當前有兩種主流的公共帳戶(hù)爬網(wǎng)解決方案. 一種是搜索搜狗的微信官方帳戶(hù)頁(yè)面,找到文章地址,然后獲取特定的文章內容. 第二種方法是注冊一個(gè)公共帳戶(hù),然后通過(guò)官方帳戶(hù)的搜索界面可以查詢(xún)產(chǎn)品地址,然后根據該地址獲取產(chǎn)品內容.
  這兩種方案各有優(yōu)缺點(diǎn). 搜狗搜索的核心思想是通過(guò)請求模擬搜狗搜索公共賬號,然后解析搜索結果頁(yè)面,然后根據公共賬號的首頁(yè)地址對抓取工具進(jìn)行爬網(wǎng). }已捕獲詳細信息. 由于搜狗與騰訊之間的協(xié)議,只能顯示最新的10個(gè)文章,但無(wú)法獲取所有文章. 如果要獲取所有文章,則朋友可能必須使用第二種方法. 第二種方法的缺點(diǎn)是通過(guò)騰訊身份驗證注冊公共帳戶(hù). 這個(gè)過(guò)程比較麻煩. 您可以通過(guò)調用該界面的公共帳戶(hù)查詢(xún)界面進(jìn)行查詢(xún),但是您需要使用硒來(lái)模擬滑動(dòng)頁(yè)面翻頁(yè)操作. 整個(gè)過(guò)程仍然很麻煩. 是. 因為我的項目不需要歷史記錄文章,所以我使用搜狗搜索功能來(lái)檢索公共帳戶(hù).
  檢索最近的10個(gè)公共帳戶(hù)文章
  Python需要依賴(lài)的第三方庫如下:
  
  urllib,pyquery,請求,硒
  具體邏輯寫(xiě)在注釋中,沒(méi)有什么特別復雜的.
  核心爬蟲(chóng)課程
  ```python
  #! / usr / bin / python
  #代碼: utf-8
  
  [Python]純文本視圖復制代碼
  import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from urllib import quote
from pyquery import PyQuery as pq
import requests
import time
import re
import os
from selenium.webdriver import Chrome
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.wait import WebDriverWait
# 搜索入口地址,以公眾為關(guān)鍵字搜索該公眾號
def get_search_result_by_keywords(sogou_search_url):
# 爬蟲(chóng)偽裝頭部設置
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0'}
# 設置操作超時(shí)時(shí)長(cháng)
timeout = 5
# 爬蟲(chóng)模擬在一個(gè)request.session中完成
s = requests.Session()
log(u'搜索地址為:%s' % sogou_search_url)
return s.get(sogou_search_url, headers=headers, timeout=timeout).content
# 獲得公眾號主頁(yè)地址
def get_wx_url_by_sougou_search_html(sougou_search_html):
doc = pq(sougou_search_html)
return doc('div[class=txt-box]')('p[class=tit]')('a').attr('href')
# 使用webdriver 加載公眾號主頁(yè)內容,主要是js渲染的部分
def get_selenium_js_html(url):
options = Options()
options.add_argument('-headless') # 無(wú)頭參數
driver = Chrome(executable_path='chromedriver', chrome_options=options)
wait = WebDriverWait(driver, timeout=10)
driver.get(url)
time.sleep(3)
# 執行js得到整個(gè)頁(yè)面內容
html = driver.execute_script("return document.documentElement.outerHTML")
driver.close()
return html
# 獲取公眾號文章內容
def parse_wx_articles_by_html(selenium_html):
doc = pq(selenium_html)
return doc('div[class="weui_media_box appmsg"]')
# 將獲取到的文章轉換為字典
def switch_arctiles_to_list(articles):
# 定義存貯變量
articles_list = []
i = 1
# 遍歷找到的文章,解析里面的內容
if articles:
for article in articles.items():
log(u'開(kāi)始整合(%d/%d)' % (i, len(articles)))
# 處理單個(gè)文章
articles_list.append(parse_one_article(article))
i += 1
return articles_list
# 解析單篇文章
def parse_one_article(article):
article_dict = {}
# 獲取標題
title = article('h4[class="weui_media_title"]').text().strip()
###log(u'標題是: %s' % title)
# 獲取標題對應的地址
url = 'http://mp.weixin.qq.com' + article('h4[class="weui_media_title"]').attr('hrefs')
log(u'地址為: %s' % url)
# 獲取概要內容
summary = article('.weui_media_desc').text()
log(u'文章簡(jiǎn)述: %s' % summary)
# 獲取文章發(fā)表時(shí)間
date = article('.weui_media_extra_info').text().strip()
log(u'發(fā)表時(shí)間為: %s' % date)
# 獲取封面圖片
pic = parse_cover_pic(article)
# 返回字典數據
return {
'title': title,
'url': url,
'summary': summary,
'date': date,
'pic': pic
}
# 查找封面圖片,獲取封面圖片地址
def parse_cover_pic(article):
pic = article('.weui_media_hd').attr('style')
p = re.compile(r'background-image:url\((.*?)\)')
rs = p.findall(pic)
log(u'封面圖片是:%s ' % rs[0] if len(rs) > 0 else '')
return rs[0] if len(rs) > 0 else ''
# 自定義log函數,主要是加上時(shí)間
def log(msg):
print u'%s: %s' % (time.strftime('%Y-%m-%d_%H-%M-%S'), msg)
# 驗證函數
def need_verify(selenium_html):
' 有時(shí)候對方會(huì )封鎖ip,這里做一下判斷,檢測html中是否包含id=verify_change的標簽,有的話(huà),代表被重定向了,提醒過(guò)一陣子重試 '
return pq(selenium_html)('#verify_change').text() != ''
# 創(chuàng )建公眾號命名的文件夾
def create_dir(keywords):
if not os.path.exists(keywords):
os.makedirs(keywords)
# 爬蟲(chóng)主函數
def run(keywords):
' 爬蟲(chóng)入口函數 '
# Step 0 : 創(chuàng )建公眾號命名的文件夾
create_dir(keywords)
# 搜狐微信搜索鏈接入口
sogou_search_url = 'http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&s_from=input&_sug_=n&_sug_type_=' % quote(
keywords)
# Step 1:GET請求到搜狗微信引擎,以微信公眾號英文名稱(chēng)作為查詢(xún)關(guān)鍵字
log(u'開(kāi)始獲取,微信公眾號英文名為:%s' % keywords)
log(u'開(kāi)始調用sougou搜索引擎')
sougou_search_html = get_search_result_by_keywords(sogou_search_url)
# Step 2:從搜索結果頁(yè)中解析出公眾號主頁(yè)鏈接
log(u'獲取sougou_search_html成功,開(kāi)始抓取公眾號對應的主頁(yè)wx_url')
wx_url = get_wx_url_by_sougou_search_html(sougou_search_html)
log(u'獲取wx_url成功,%s' % wx_url)
# Step 3:Selenium+PhantomJs獲取js異步加載渲染后的html
log(u'開(kāi)始調用selenium渲染html')
selenium_html = get_selenium_js_html(wx_url)
# Step 4: 檢測目標網(wǎng)站是否進(jìn)行了封鎖
if need_verify(selenium_html):
log(u'爬蟲(chóng)被目標網(wǎng)站封鎖,請稍后再試')
else:
# Step 5: 使用PyQuery,從Step 3獲取的html中解析出公眾號文章列表的數據
log(u'調用selenium渲染html完成,開(kāi)始解析公眾號文章')
articles = parse_wx_articles_by_html(selenium_html)
log(u'抓取到微信文章%d篇' % len(articles))
# Step 6: 把微信文章數據封裝成字典的list
log(u'開(kāi)始整合微信文章數據為字典')
articles_list = switch_arctiles_to_list(articles)
return [content['title'] for content in articles_list]
```
main入口函數:
```python
# coding: utf8
import spider_weixun_by_sogou
if __name__ == '__main__':
gongzhonghao = raw_input(u'input weixin gongzhonghao:')
if not gongzhonghao:
gongzhonghao = 'spider'
text = " ".join(spider_weixun_by_sogou.run(gongzhonghao))
print text
  ```
<p>直接運行main方法,然后在控制臺中輸入要爬網(wǎng)的公共帳戶(hù)的英文名稱(chēng). 中文搜索可能不止一個(gè). 此處所做的只是對精確搜索的搜索. 只需檢查電話(huà)并檢查公共帳戶(hù)號的英文,請單擊公共帳戶(hù),然后查看公共帳戶(hù)信息以查看以下與“ mask5}爬網(wǎng)的爬蟲(chóng)結果相關(guān)的信息. 您可以通過(guò)在代碼中調用webdriver.py來(lái)檢索文章的特定內容.

干貨內容:Python入門(mén)學(xué)習教程:50行Python代碼,教你獲取公眾號全部文章

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

  Python入門(mén)學(xué)習教程: 50行Python代碼,教您獲得所有正式帳戶(hù)的文章
  今天的Python入門(mén)學(xué)習教程主要告訴您如何獲取官方帳戶(hù)的所有文章!
  在閱讀官方帳戶(hù)的文章時(shí),我們通常會(huì )遇到一個(gè)問(wèn)題-閱讀歷史文章的經(jīng)驗不好.
  我們知道,有兩種常見(jiàn)的爬網(wǎng)官方帳戶(hù)的方法: 通過(guò)搜狗搜索獲得它. 缺點(diǎn)是只能獲取最新的十篇文章. 通過(guò)微信官方賬號的物料管理獲取官方賬號. 缺點(diǎn)是您需要申請自己的官方帳戶(hù).
  
  今天,我們將介紹一種通過(guò)在PC端捕獲微信來(lái)獲取官方帳戶(hù)文章的方法. 與其他方法相比,它非常方便.
  
  
  如上圖所示,我們通過(guò)數據包捕獲工具獲得了微信網(wǎng)絡(luò )信息請求. 我們發(fā)現,每次下拉列表中的文章時(shí),我們都會(huì )請求/ mp / xxx(官方帳戶(hù)不允許添加首頁(yè)鏈接,xxx表示profile_ext).
  經(jīng)過(guò)多次測試和分析,使用了以下參數
  數據如下
  {
"ret": 0,
"errmsg": "ok", # 請求狀態(tài)
"msg_count": 10, # 信息條數
"can_msg_continue": 1, # 是否還可以繼續獲取,1代表可以。0代表不可以,也就是最后一頁(yè)
"general_msg_list": "{"list":[]}", # 公眾號文本信息
"next_offset": 20,
"video_count": 1,
"use_video_tab": 1,
"real_type": 0,
"home_page_list": []
}
  部分代碼如下
   params = {
'__biz': biz,
'uin': uin,
'key': key,
'offset': offset,
'count': count,
'action': 'getmsg',
'f': 'json'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
response = requests.get(url=url, params=params, headers=headers)
resp_json = response.json()
if resp_json.get('errmsg') == 'ok':
resp_json = response.json()
# 是否還有分頁(yè)數據, 用于判斷return的值
can_msg_continue = resp_json['can_msg_continue']
# 當前分頁(yè)文章數
msg_count = resp_json['msg_count']
general_msg_list = json.loads(resp_json['general_msg_list'])
list = general_msg_list.get('list')
print(list, "**************")
  最后打印的列表是官方帳戶(hù)的文章信息詳細信息. 包括標題(標題),摘要(摘要),文章地址(content_url),閱讀源地址(source_url),封面圖像(封面),作者(作者)等...
  輸出結果如下:
  [{
"comm_msg_info": {
"id": 1000000038,
"type": 49,
"datetime": 1560474000,
"fakeid": "3881067844",
"status": 2,
"content": ""
},
"app_msg_ext_info": {
"title": "入門(mén)爬蟲(chóng),這一篇就夠了?。?!",
"digest": "入門(mén)爬蟲(chóng),這一篇就夠了?。?!",
"content": "",
"fileid": 0,
"content_url": "http:XXXXXX",
"source_url": "",
"cover": "I5kME6BVXeLibZDUhsiaEYiaX7zOoibxa9sb4stIwrfuqID5ttmiaoVAFyxKF6IjOCyl22vg8n2NPv98ibow\\/0?wx_fmt=jpeg",
"subtype": 9,
"is_multi": 0,
"multi_app_msg_item_list": [],
"author": "Python3X",
"copyright_stat": 11,
"duration": 0,
"del_flag": 1,
"item_show_type": 0,
"audio_fileid": 0,
"play_url": "",
"malicious_title_reason_id": 0,
"malicious_content_type": 0
}
},{...},{...},{...},{...},{...},{...},{...},{...},{...}]
  獲取數據后,可以將其保存在數據庫中或將文章保存在PDF中.
  1,保存在Mongo中
  # Mongo配置
conn = MongoClient('127.0.0.1', 27017)
db = conn.wx #連接wx數據庫,沒(méi)有則自動(dòng)創(chuàng )建
mongo_wx = db.article #使用article集合,沒(méi)有則自動(dòng)創(chuàng )建
for i in list:
app_msg_ext_info = i['app_msg_ext_info']
# 標題
title = app_msg_ext_info['title']
# 文章地址
content_url = app_msg_ext_info['content_url']
# 封面圖
cover = app_msg_ext_info['cover']
# 發(fā)布時(shí)間
datetime = i['comm_msg_info']['datetime']
datetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(datetime))
mongo_wx.insert({
'title': title,
'content_url': content_url,
'cover': cover,
'datetime': datetime
})
  結果如下
  
  2. 導入PDF文件
  在Python3中處理PDF的常用庫包括python-pdf和pdfkit. 我使用pdfkit模塊導出pdf文件.
  pdfkit是Wkhtmltopdf工具包的軟件包類(lèi),因此需要安裝Wkhtmltopdf才能使用它.
  有權下載與操作系統匹配的工具包.
  
  實(shí)現代碼也相對簡(jiǎn)單,只需要傳入導入文件的URL即可.
  安裝pdfkit庫
  pip3 install pdfkit -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
  import pdfkit
pdfkit.from_url('公眾號文章地址', 'out.pdf')
  運行后成功導出pdf文件.
  
  完整代碼 查看全部

  Python入門(mén)學(xué)習教程: 50行Python代碼,教您獲得所有正式帳戶(hù)的文章
  今天的Python入門(mén)學(xué)習教程主要告訴您如何獲取官方帳戶(hù)的所有文章!
  在閱讀官方帳戶(hù)的文章時(shí),我們通常會(huì )遇到一個(gè)問(wèn)題-閱讀歷史文章的經(jīng)驗不好.
  我們知道,有兩種常見(jiàn)的爬網(wǎng)官方帳戶(hù)的方法: 通過(guò)搜狗搜索獲得它. 缺點(diǎn)是只能獲取最新的十篇文章. 通過(guò)微信官方賬號的物料管理獲取官方賬號. 缺點(diǎn)是您需要申請自己的官方帳戶(hù).
  
  今天,我們將介紹一種通過(guò)在PC端捕獲微信來(lái)獲取官方帳戶(hù)文章的方法. 與其他方法相比,它非常方便.
  
  
  如上圖所示,我們通過(guò)數據包捕獲工具獲得了微信網(wǎng)絡(luò )信息請求. 我們發(fā)現,每次下拉列表中的文章時(shí),我們都會(huì )請求/ mp / xxx(官方帳戶(hù)不允許添加首頁(yè)鏈接,xxx表示profile_ext).
  經(jīng)過(guò)多次測試和分析,使用了以下參數
  數據如下
  {
"ret": 0,
"errmsg": "ok", # 請求狀態(tài)
"msg_count": 10, # 信息條數
"can_msg_continue": 1, # 是否還可以繼續獲取,1代表可以。0代表不可以,也就是最后一頁(yè)
"general_msg_list": "{"list":[]}", # 公眾號文本信息
"next_offset": 20,
"video_count": 1,
"use_video_tab": 1,
"real_type": 0,
"home_page_list": []
}
  部分代碼如下
   params = {
'__biz': biz,
'uin': uin,
'key': key,
'offset': offset,
'count': count,
'action': 'getmsg',
'f': 'json'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
response = requests.get(url=url, params=params, headers=headers)
resp_json = response.json()
if resp_json.get('errmsg') == 'ok':
resp_json = response.json()
# 是否還有分頁(yè)數據, 用于判斷return的值
can_msg_continue = resp_json['can_msg_continue']
# 當前分頁(yè)文章數
msg_count = resp_json['msg_count']
general_msg_list = json.loads(resp_json['general_msg_list'])
list = general_msg_list.get('list')
print(list, "**************")
  最后打印的列表是官方帳戶(hù)的文章信息詳細信息. 包括標題(標題),摘要(摘要),文章地址(content_url),閱讀源地址(source_url),封面圖像(封面),作者(作者)等...
  輸出結果如下:
  [{
"comm_msg_info": {
"id": 1000000038,
"type": 49,
"datetime": 1560474000,
"fakeid": "3881067844",
"status": 2,
"content": ""
},
"app_msg_ext_info": {
"title": "入門(mén)爬蟲(chóng),這一篇就夠了?。?!",
"digest": "入門(mén)爬蟲(chóng),這一篇就夠了?。?!",
"content": "",
"fileid": 0,
"content_url": "http:XXXXXX",
"source_url": "",
"cover": "I5kME6BVXeLibZDUhsiaEYiaX7zOoibxa9sb4stIwrfuqID5ttmiaoVAFyxKF6IjOCyl22vg8n2NPv98ibow\\/0?wx_fmt=jpeg",
"subtype": 9,
"is_multi": 0,
"multi_app_msg_item_list": [],
"author": "Python3X",
"copyright_stat": 11,
"duration": 0,
"del_flag": 1,
"item_show_type": 0,
"audio_fileid": 0,
"play_url": "",
"malicious_title_reason_id": 0,
"malicious_content_type": 0
}
},{...},{...},{...},{...},{...},{...},{...},{...},{...}]
  獲取數據后,可以將其保存在數據庫中或將文章保存在PDF中.
  1,保存在Mongo中
  # Mongo配置
conn = MongoClient('127.0.0.1', 27017)
db = conn.wx #連接wx數據庫,沒(méi)有則自動(dòng)創(chuàng )建
mongo_wx = db.article #使用article集合,沒(méi)有則自動(dòng)創(chuàng )建
for i in list:
app_msg_ext_info = i['app_msg_ext_info']
# 標題
title = app_msg_ext_info['title']
# 文章地址
content_url = app_msg_ext_info['content_url']
# 封面圖
cover = app_msg_ext_info['cover']
# 發(fā)布時(shí)間
datetime = i['comm_msg_info']['datetime']
datetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(datetime))
mongo_wx.insert({
'title': title,
'content_url': content_url,
'cover': cover,
'datetime': datetime
})
  結果如下
  
  2. 導入PDF文件
  在Python3中處理PDF的常用庫包括python-pdf和pdfkit. 我使用pdfkit模塊導出pdf文件.
  pdfkit是Wkhtmltopdf工具包的軟件包類(lèi),因此需要安裝Wkhtmltopdf才能使用它.
  有權下載與操作系統匹配的工具包.
  
  實(shí)現代碼也相對簡(jiǎn)單,只需要傳入導入文件的URL即可.
  安裝pdfkit庫
  pip3 install pdfkit -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
  import pdfkit
pdfkit.from_url('公眾號文章地址', 'out.pdf')
  運行后成功導出pdf文件.
  
  完整代碼

福利:微信公眾號文章“號內搜”新功能玩法

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

  微信公眾號文章“號碼搜索”新功能玩法
  
  01官方帳戶(hù)文章增加了“搜索”組件功能
  從今天開(kāi)始的Xida Puben,用戶(hù)可以直接在文章中搜索官方帳戶(hù)歷史記錄新聞!什么也不要說(shuō),只看圖片即可.
  
  
  如圖所示,官方帳戶(hù)文章可以具有內置的“搜索”組件. 該組件的左上角標有正式帳戶(hù)的頭像和指導詞“推薦的正式帳戶(hù)搜索”. 單擊后,用戶(hù)將進(jìn)入搜索界面.
  正式帳戶(hù)“推薦的搜索關(guān)鍵字”顯示在搜索框下方. 用戶(hù)可以根據需要在搜索框中輸入任何關(guān)鍵字,也可以單擊推薦的關(guān)鍵字進(jìn)行搜索.
  通常,此新功能可以幫助用戶(hù)快速檢索帳戶(hù)中的相關(guān)內容,這等效于內置在官方帳戶(hù)歷史記錄頁(yè)面中的“在帳戶(hù)中搜索”條目. 不同之處在于該路徑要淺得多. 更方便.
  畢竟,此功能如何工作?
  打開(kāi)官方帳戶(hù)后臺編輯器頁(yè)面,您將在頁(yè)面頂部的菜單欄中看到新添加的“搜索”組件,單擊以插入設置.
  
  只能為一篇文章創(chuàng )建一個(gè)搜索組件. 您最多可以設置6個(gè)搜索關(guān)鍵字. 拖放最右邊的“三欄”圖標以對關(guān)鍵字進(jìn)行排序. 具體效果可在左側視圖的“圖案預覽”中找到.
  
  此外,先前設置的“歷史搜索字詞”將顯示在關(guān)鍵字組下,以幫助操作員更好地設置它們. 點(diǎn)擊“放大鏡”圖標以查看關(guān)鍵字搜索結果的預覽.
  經(jīng)過(guò)全面的體驗,果醬女孩只想大聲說(shuō): 這次微信終于不乏味了! (這就像一個(gè)夢(mèng),當我醒來(lái)時(shí)我仍然感動(dòng)……)
  除了在文章中添加了新的“搜索”組件外,歷史消息頁(yè)面上隱藏的“數字內搜索”條目也已更改.
  1. “搜索范圍”選項已添加到搜索內容中,下面有兩個(gè)“無(wú)限”和“最近閱讀”范圍;
  2. 除了“按時(shí)間排序”之外,搜索結果還按“按閱讀量排序”排序.
  02官方帳戶(hù)搜索優(yōu)化有什么影響?
  事實(shí)上,早在2017年,在最新版本的ios 6.5.6中,“帳戶(hù)內搜索”功能已在官方帳戶(hù)歷史記錄消息頁(yè)面上啟動(dòng),但由于入口不明顯,實(shí)際上許多用戶(hù)不知道該操作仍然可用.
  運營(yíng)商不太可能希望增加用戶(hù)對過(guò)去文章的瀏覽. 但是新功能的出現是另一種說(shuō)法.
  1. 它有助于培養用戶(hù)對官方帳戶(hù)的搜索習慣
  現在,您可以為每個(gè)文章添加一個(gè)搜索框,條目會(huì )變淺,并且用戶(hù)的操作路徑也會(huì )縮短. 經(jīng)過(guò)一段時(shí)間的指導,用戶(hù)可以養成獨立單擊和搜索的習慣,這有助于他們更方便地獲取所需的信息,另一方面,這也有助于增加官方帳戶(hù)的粘性.
  目前,官方帳戶(hù)背景不提供已設置關(guān)鍵字的點(diǎn)擊數據. 將來(lái)會(huì )有相關(guān)數據來(lái)幫助運營(yíng)商更好地計劃主題選擇嗎?值得期待.
  2,幫助官方帳戶(hù)整理內容
  文章中的搜索框最多可以收錄6個(gè)關(guān)鍵字,這意味著(zhù)操作員需要從他們最感興趣或對讀者最感興趣的內容中提取關(guān)鍵字.
  如果您通常對內容指導有計劃,這并不困難;如果您害怕編寫(xiě)所有內容,那么可能很難考慮關(guān)鍵字.
  如果您想突出顯示自己的產(chǎn)品或服務(wù),還可以設置關(guān)鍵字作為指導以加深用戶(hù)的印象. 這樣看來(lái),新添加的搜索框是一個(gè)不錯的廣告牌. 裝飾方式取決于個(gè)人.
  03操作員應如何充分利用此入口?
  1. 把它放在文章的開(kāi)頭,以吸引用戶(hù)點(diǎn)擊
  最高位置始終是最引人注目的,尤其是這是一項新功能. 應該注意的是,頂部的橫幅圖像不應太復雜,否則可能會(huì )使搜索框的光線(xiàn)模糊. 換句話(huà)說(shuō),它就像一個(gè)導航欄.
  如果您不知道要設置什么關(guān)鍵字,則可以參考后臺的[Message Analysis]-[Message Keyword]數據,此數據分析將計算用戶(hù)在后臺答復的關(guān)鍵字頻率TOP200. 查看全部

  微信公眾號文章“號碼搜索”新功能玩法
  
  01官方帳戶(hù)文章增加了“搜索”組件功能
  從今天開(kāi)始的Xida Puben,用戶(hù)可以直接在文章中搜索官方帳戶(hù)歷史記錄新聞!什么也不要說(shuō),只看圖片即可.
  
  
  如圖所示,官方帳戶(hù)文章可以具有內置的“搜索”組件. 該組件的左上角標有正式帳戶(hù)的頭像和指導詞“推薦的正式帳戶(hù)搜索”. 單擊后,用戶(hù)將進(jìn)入搜索界面.
  正式帳戶(hù)“推薦的搜索關(guān)鍵字”顯示在搜索框下方. 用戶(hù)可以根據需要在搜索框中輸入任何關(guān)鍵字,也可以單擊推薦的關(guān)鍵字進(jìn)行搜索.
  通常,此新功能可以幫助用戶(hù)快速檢索帳戶(hù)中的相關(guān)內容,這等效于內置在官方帳戶(hù)歷史記錄頁(yè)面中的“在帳戶(hù)中搜索”條目. 不同之處在于該路徑要淺得多. 更方便.
  畢竟,此功能如何工作?
  打開(kāi)官方帳戶(hù)后臺編輯器頁(yè)面,您將在頁(yè)面頂部的菜單欄中看到新添加的“搜索”組件,單擊以插入設置.
  
  只能為一篇文章創(chuàng )建一個(gè)搜索組件. 您最多可以設置6個(gè)搜索關(guān)鍵字. 拖放最右邊的“三欄”圖標以對關(guān)鍵字進(jìn)行排序. 具體效果可在左側視圖的“圖案預覽”中找到.
  
  此外,先前設置的“歷史搜索字詞”將顯示在關(guān)鍵字組下,以幫助操作員更好地設置它們. 點(diǎn)擊“放大鏡”圖標以查看關(guān)鍵字搜索結果的預覽.
  經(jīng)過(guò)全面的體驗,果醬女孩只想大聲說(shuō): 這次微信終于不乏味了! (這就像一個(gè)夢(mèng),當我醒來(lái)時(shí)我仍然感動(dòng)……)
  除了在文章中添加了新的“搜索”組件外,歷史消息頁(yè)面上隱藏的“數字內搜索”條目也已更改.
  1. “搜索范圍”選項已添加到搜索內容中,下面有兩個(gè)“無(wú)限”和“最近閱讀”范圍;
  2. 除了“按時(shí)間排序”之外,搜索結果還按“按閱讀量排序”排序.
  02官方帳戶(hù)搜索優(yōu)化有什么影響?
  事實(shí)上,早在2017年,在最新版本的ios 6.5.6中,“帳戶(hù)內搜索”功能已在官方帳戶(hù)歷史記錄消息頁(yè)面上啟動(dòng),但由于入口不明顯,實(shí)際上許多用戶(hù)不知道該操作仍然可用.
  運營(yíng)商不太可能希望增加用戶(hù)對過(guò)去文章的瀏覽. 但是新功能的出現是另一種說(shuō)法.
  1. 它有助于培養用戶(hù)對官方帳戶(hù)的搜索習慣
  現在,您可以為每個(gè)文章添加一個(gè)搜索框,條目會(huì )變淺,并且用戶(hù)的操作路徑也會(huì )縮短. 經(jīng)過(guò)一段時(shí)間的指導,用戶(hù)可以養成獨立單擊和搜索的習慣,這有助于他們更方便地獲取所需的信息,另一方面,這也有助于增加官方帳戶(hù)的粘性.
  目前,官方帳戶(hù)背景不提供已設置關(guān)鍵字的點(diǎn)擊數據. 將來(lái)會(huì )有相關(guān)數據來(lái)幫助運營(yíng)商更好地計劃主題選擇嗎?值得期待.
  2,幫助官方帳戶(hù)整理內容
  文章中的搜索框最多可以收錄6個(gè)關(guān)鍵字,這意味著(zhù)操作員需要從他們最感興趣或對讀者最感興趣的內容中提取關(guān)鍵字.
  如果您通常對內容指導有計劃,這并不困難;如果您害怕編寫(xiě)所有內容,那么可能很難考慮關(guān)鍵字.
  如果您想突出顯示自己的產(chǎn)品或服務(wù),還可以設置關(guān)鍵字作為指導以加深用戶(hù)的印象. 這樣看來(lái),新添加的搜索框是一個(gè)不錯的廣告牌. 裝飾方式取決于個(gè)人.
  03操作員應如何充分利用此入口?
  1. 把它放在文章的開(kāi)頭,以吸引用戶(hù)點(diǎn)擊
  最高位置始終是最引人注目的,尤其是這是一項新功能. 應該注意的是,頂部的橫幅圖像不應太復雜,否則可能會(huì )使搜索框的光線(xiàn)模糊. 換句話(huà)說(shuō),它就像一個(gè)導航欄.
  如果您不知道要設置什么關(guān)鍵字,則可以參考后臺的[Message Analysis]-[Message Keyword]數據,此數據分析將計算用戶(hù)在后臺答復的關(guān)鍵字頻率TOP200.

微信文章爬蟲(chóng)實(shí)現方式.docx

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

  微信文章爬蟲(chóng)實(shí)現方式.docx
  文檔介紹:
  微信文章爬蟲(chóng)實(shí)現方式
  如今越來(lái)越多的優(yōu)質(zhì)內容發(fā)布在微信公眾號中,對那些內容,有些同事會(huì )有采集下來(lái)的需求,下面為你們介紹使用優(yōu)采云爬蟲(chóng)工具去抓取采集微信文章信息。
  本文將以搜狗陌陌文章為例,介紹使用優(yōu)采云采集網(wǎng)頁(yè)文章正文的技巧。文章正文里通常包括文本和圖片兩種。本文將采集文章正文中的文本+圖片URL。
  將采集以下數組:文章標題、時(shí)間、來(lái)源和正文(正文中的所有文本,將合并到一個(gè)excel單元格中,將使用到“自定義數據合并方法”功能,請你們注意)。同時(shí),采集文章正文中的文本+圖片URL,將用到“判斷條件”,“判斷條件”的使用,有很多須要注意的地方。以下兩個(gè)教程,大家可先熟悉一下。
  “自定義數據合并方法”詳解教程:
  orialdetail-1/zdyhb_7.html
  “判斷條件”詳解教程:
  orialdetail-1/judge.html
  采集網(wǎng)站:
  使用功能點(diǎn):
  分頁(yè)列表信息采集
  orial/fylb-70.aspx?t=1
  Xpath
  rch?query=XPath
  AJAX點(diǎn)擊和翻頁(yè)
  orial/ajaxdjfy_7.aspx?t=1
  判斷條件
  orialdetail-1/judge.html
  AJAX滾動(dòng)
  orialdetail-1/ajgd_7.html
  步驟1:創(chuàng )建采集任務(wù)
  1)進(jìn)入主界面,選擇“自定義模式”
  微信文章爬蟲(chóng)實(shí)現方式步驟1
  2)將要采集的網(wǎng)址URL復制粘貼到網(wǎng)站輸入框中,點(diǎn)擊“保存網(wǎng)址”
  微信文章爬蟲(chóng)實(shí)現方式步驟2
  步驟2:創(chuàng )建翻頁(yè)循環(huán)
  在頁(yè)面右上角,打開(kāi)“流程”,以詮釋出“流程設計器”和“定制當前操作”兩個(gè)藍籌股。網(wǎng)頁(yè)打開(kāi)后,默認顯示“熱門(mén)”文章。下拉頁(yè)面,找到并點(diǎn)擊“加載更多內容”按鈕,在操作提示框中,選擇“更多操作”
  微信文章爬蟲(chóng)實(shí)現方式步驟3
  選擇“循環(huán)點(diǎn)擊單個(gè)元素”,以創(chuàng )建一個(gè)翻頁(yè)循環(huán)
  微信文章爬蟲(chóng)實(shí)現方式步驟4
  由于此網(wǎng)頁(yè)涉及Ajax技術(shù),我們須要進(jìn)行一些中級選項的設置。選中“點(diǎn)擊元素”步驟,打開(kāi)“高級選項”,勾選“Ajax加載數據”,設置時(shí)間為“2秒”
  微信文章爬蟲(chóng)實(shí)現方式步驟5
  注:AJAX即延時(shí)加載、異步更新的一種腳本技術(shù),通過(guò)在后臺與服務(wù)器進(jìn)行少量數據交換,可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對網(wǎng)頁(yè)的某部份進(jìn)行更新。
  表現特點(diǎn):a、點(diǎn)擊網(wǎng)頁(yè)中某個(gè)選項時(shí),大部分網(wǎng)站的網(wǎng)址不會(huì )改變;b、網(wǎng)頁(yè)不是完全加載,只是局部進(jìn)行了數據加載,有所變化。 查看全部

  微信文章爬蟲(chóng)實(shí)現方式.docx
  文檔介紹:
  微信文章爬蟲(chóng)實(shí)現方式
  如今越來(lái)越多的優(yōu)質(zhì)內容發(fā)布在微信公眾號中,對那些內容,有些同事會(huì )有采集下來(lái)的需求,下面為你們介紹使用優(yōu)采云爬蟲(chóng)工具去抓取采集微信文章信息。
  本文將以搜狗陌陌文章為例,介紹使用優(yōu)采云采集網(wǎng)頁(yè)文章正文的技巧。文章正文里通常包括文本和圖片兩種。本文將采集文章正文中的文本+圖片URL。
  將采集以下數組:文章標題、時(shí)間、來(lái)源和正文(正文中的所有文本,將合并到一個(gè)excel單元格中,將使用到“自定義數據合并方法”功能,請你們注意)。同時(shí),采集文章正文中的文本+圖片URL,將用到“判斷條件”,“判斷條件”的使用,有很多須要注意的地方。以下兩個(gè)教程,大家可先熟悉一下。
  “自定義數據合并方法”詳解教程:
  orialdetail-1/zdyhb_7.html
  “判斷條件”詳解教程:
  orialdetail-1/judge.html
  采集網(wǎng)站:
  使用功能點(diǎn):
  分頁(yè)列表信息采集
  orial/fylb-70.aspx?t=1
  Xpath
  rch?query=XPath
  AJAX點(diǎn)擊和翻頁(yè)
  orial/ajaxdjfy_7.aspx?t=1
  判斷條件
  orialdetail-1/judge.html
  AJAX滾動(dòng)
  orialdetail-1/ajgd_7.html
  步驟1:創(chuàng )建采集任務(wù)
  1)進(jìn)入主界面,選擇“自定義模式”
  微信文章爬蟲(chóng)實(shí)現方式步驟1
  2)將要采集的網(wǎng)址URL復制粘貼到網(wǎng)站輸入框中,點(diǎn)擊“保存網(wǎng)址”
  微信文章爬蟲(chóng)實(shí)現方式步驟2
  步驟2:創(chuàng )建翻頁(yè)循環(huán)
  在頁(yè)面右上角,打開(kāi)“流程”,以詮釋出“流程設計器”和“定制當前操作”兩個(gè)藍籌股。網(wǎng)頁(yè)打開(kāi)后,默認顯示“熱門(mén)”文章。下拉頁(yè)面,找到并點(diǎn)擊“加載更多內容”按鈕,在操作提示框中,選擇“更多操作”
  微信文章爬蟲(chóng)實(shí)現方式步驟3
  選擇“循環(huán)點(diǎn)擊單個(gè)元素”,以創(chuàng )建一個(gè)翻頁(yè)循環(huán)
  微信文章爬蟲(chóng)實(shí)現方式步驟4
  由于此網(wǎng)頁(yè)涉及Ajax技術(shù),我們須要進(jìn)行一些中級選項的設置。選中“點(diǎn)擊元素”步驟,打開(kāi)“高級選項”,勾選“Ajax加載數據”,設置時(shí)間為“2秒”
  微信文章爬蟲(chóng)實(shí)現方式步驟5
  注:AJAX即延時(shí)加載、異步更新的一種腳本技術(shù),通過(guò)在后臺與服務(wù)器進(jìn)行少量數據交換,可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對網(wǎng)頁(yè)的某部份進(jìn)行更新。
  表現特點(diǎn):a、點(diǎn)擊網(wǎng)頁(yè)中某個(gè)選項時(shí),大部分網(wǎng)站的網(wǎng)址不會(huì )改變;b、網(wǎng)頁(yè)不是完全加載,只是局部進(jìn)行了數據加載,有所變化。

微信公眾號文章爬取

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

  微信公眾號文章爬取
  哈哈,終于找到一個(gè)可以一鍵獲取所有公眾號上面的文章了,雖然比較笨,但是先湊活著(zhù),畢竟還破解不了登陸。
  參考鏈接:
  第一步:先注冊一個(gè)公眾號
  注冊以后登陸到主頁(yè),找到這個(gè)素材管理
  
  然后你會(huì )看見(jiàn)下邊這個(gè)頁(yè)面
  
  點(diǎn)擊這個(gè)綠色箭頭指向的這個(gè)鏈接
  
  記得打開(kāi)調試工具
  然后搜索你想爬取的公眾號
  
  這個(gè)懇求會(huì )返回我們搜索到的公眾號,我們要的公眾號也在這個(gè)列表上面,假如在第一個(gè)
  
  我們須要這個(gè)fake-id來(lái)標記這個(gè)公眾號
  接下選中,然后點(diǎn)一下
  
  然后文章列表就下來(lái)了
  整個(gè)過(guò)程就須要token,公眾號名子,還有cookie了
  最后直接上代碼了
  # -*- coding: utf-8 -*-
import pymysql as pymysql
from fake_useragent import UserAgent
import requests
import json
from retrying import retry
@retry(stop_max_attempt_number=5)
def get_author_list():
"""
獲取搜索到的公眾號列表
:return:
"""
global s
url = "https://mp.weixin.qq.com/cgi-b ... ry%3D{}&token={}&lang=zh_CN&f=json&ajax=1".format(
name, token)
try:
response = s.get(url, headers=headers, cookies=cookie)
text = json.loads(response.text)
# print('一共查詢(xún)出來(lái){}個(gè)公眾號'.format(text['total']))
return text
except Exception as e:
print(e)
reset_parmas()
@retry(stop_max_attempt_number=5)
def get_first_author_params(text):
"""
獲取單個(gè)公眾號的參數
:param text: 前面搜索獲取的公眾號列表
:return:fake_id公眾號id, text請求公眾號詳情的相應內容
"""
fake_id = text['list'][0] # 一般第一個(gè)就是咱們需要的,所以取第一個(gè)
# print(text['list'][0])
url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin=0&count=5&fakeid={}&type=9&query=&token={}&lang=zh_CN&f=json&ajax=1'.format(fake_id['fakeid'], token)
response = s.get(url, headers=headers, cookies=cookie)
try:
text1 = json.loads(response.text)
return text1, fake_id
except Exception as e:
print(e)
reset_parmas()
@retry(stop_max_attempt_number=5)
def get_title_url(text, fake_id):
"""
得到公眾號的標題和鏈接
:param text:
:param fake_id:
:return:
"""
print(text)
num = int(text['app_msg_cnt'])
if num % 5 > 0:
num = num // 5 + 1
for i in range(num):
# token begin:參數傳入
url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin={}&count=5&fakeid={}&type=9&query=&token={}&lang=zh_CN&f=json&ajax=1'.format(str(i * 5),fake_id['fakeid'], token,)
try:
response = s.get(url, headers=headers, cookies=cookie)
text = json.loads(response.text)
print(text)
artile_list = text['app_msg_list']
for artile in artile_list:
print('標題:{}'.format(artile['title']))
print('標題鏈接:{}'.format(artile['link']))
save_mysql(name, artile['title'], artile['link'])
except Exception as e:
print(e)
reset_parmas()
def save_mysql(name, title, url):
"""
保存數據到數據庫
:param name: 作者名字
:param title:文章標題
:param url: 文章鏈接
:return:
"""
try:
sql = """INSERT INTO title_url(author_name, title, url) values ('{}', '{}', '{}')""".format(name, title, url)
conn.ping(reconnect=False)
cur.execute(sql)
conn.commit()
except Exception as e:
print(e)
def reset_parmas():
"""
失效后重新輸入參數
:return:
"""
global name, token, s, cookie, headers
name = input("請輸入你要查看的公眾號名字: ")
token = input("請輸入你當前登錄自己公眾號的token: ")
cookies = input("請輸入當前頁(yè)面的cookie: ")
s = requests.session()
cookie = {'cookie': cookies}
headers = {
"User-Agent": UserAgent().random,
"Host": "mp.weixin.qq.com",
}
def run():
reset_parmas()
text = get_author_list()
text1, fake_id = get_first_author_params(text)
get_title_url(text1, fake_id)
run()
  需要說(shuō)明一下,數據庫自己連我都不上代碼了
  還有就是似乎插口更新的頻繁,所以你只須要弄懂我的代碼的邏輯就可以了
 ?。希? 查看全部

  微信公眾號文章爬取
  哈哈,終于找到一個(gè)可以一鍵獲取所有公眾號上面的文章了,雖然比較笨,但是先湊活著(zhù),畢竟還破解不了登陸。
  參考鏈接:
  第一步:先注冊一個(gè)公眾號
  注冊以后登陸到主頁(yè),找到這個(gè)素材管理
  
  然后你會(huì )看見(jiàn)下邊這個(gè)頁(yè)面
  
  點(diǎn)擊這個(gè)綠色箭頭指向的這個(gè)鏈接
  
  記得打開(kāi)調試工具
  然后搜索你想爬取的公眾號
  
  這個(gè)懇求會(huì )返回我們搜索到的公眾號,我們要的公眾號也在這個(gè)列表上面,假如在第一個(gè)
  
  我們須要這個(gè)fake-id來(lái)標記這個(gè)公眾號
  接下選中,然后點(diǎn)一下
  
  然后文章列表就下來(lái)了
  整個(gè)過(guò)程就須要token,公眾號名子,還有cookie了
  最后直接上代碼了
  # -*- coding: utf-8 -*-
import pymysql as pymysql
from fake_useragent import UserAgent
import requests
import json
from retrying import retry
@retry(stop_max_attempt_number=5)
def get_author_list():
"""
獲取搜索到的公眾號列表
:return:
"""
global s
url = "https://mp.weixin.qq.com/cgi-b ... ry%3D{}&token={}&lang=zh_CN&f=json&ajax=1".format(
name, token)
try:
response = s.get(url, headers=headers, cookies=cookie)
text = json.loads(response.text)
# print('一共查詢(xún)出來(lái){}個(gè)公眾號'.format(text['total']))
return text
except Exception as e:
print(e)
reset_parmas()
@retry(stop_max_attempt_number=5)
def get_first_author_params(text):
"""
獲取單個(gè)公眾號的參數
:param text: 前面搜索獲取的公眾號列表
:return:fake_id公眾號id, text請求公眾號詳情的相應內容
"""
fake_id = text['list'][0] # 一般第一個(gè)就是咱們需要的,所以取第一個(gè)
# print(text['list'][0])
url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin=0&count=5&fakeid={}&type=9&query=&token={}&lang=zh_CN&f=json&ajax=1'.format(fake_id['fakeid'], token)
response = s.get(url, headers=headers, cookies=cookie)
try:
text1 = json.loads(response.text)
return text1, fake_id
except Exception as e:
print(e)
reset_parmas()
@retry(stop_max_attempt_number=5)
def get_title_url(text, fake_id):
"""
得到公眾號的標題和鏈接
:param text:
:param fake_id:
:return:
"""
print(text)
num = int(text['app_msg_cnt'])
if num % 5 > 0:
num = num // 5 + 1
for i in range(num):
# token begin:參數傳入
url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin={}&count=5&fakeid={}&type=9&query=&token={}&lang=zh_CN&f=json&ajax=1'.format(str(i * 5),fake_id['fakeid'], token,)
try:
response = s.get(url, headers=headers, cookies=cookie)
text = json.loads(response.text)
print(text)
artile_list = text['app_msg_list']
for artile in artile_list:
print('標題:{}'.format(artile['title']))
print('標題鏈接:{}'.format(artile['link']))
save_mysql(name, artile['title'], artile['link'])
except Exception as e:
print(e)
reset_parmas()
def save_mysql(name, title, url):
"""
保存數據到數據庫
:param name: 作者名字
:param title:文章標題
:param url: 文章鏈接
:return:
"""
try:
sql = """INSERT INTO title_url(author_name, title, url) values ('{}', '{}', '{}')""".format(name, title, url)
conn.ping(reconnect=False)
cur.execute(sql)
conn.commit()
except Exception as e:
print(e)
def reset_parmas():
"""
失效后重新輸入參數
:return:
"""
global name, token, s, cookie, headers
name = input("請輸入你要查看的公眾號名字: ")
token = input("請輸入你當前登錄自己公眾號的token: ")
cookies = input("請輸入當前頁(yè)面的cookie: ")
s = requests.session()
cookie = {'cookie': cookies}
headers = {
"User-Agent": UserAgent().random,
"Host": "mp.weixin.qq.com",
}
def run():
reset_parmas()
text = get_author_list()
text1, fake_id = get_first_author_params(text)
get_title_url(text1, fake_id)
run()
  需要說(shuō)明一下,數據庫自己連我都不上代碼了
  還有就是似乎插口更新的頻繁,所以你只須要弄懂我的代碼的邏輯就可以了
 ?。希?

用 Python 進(jìn)行微信公眾號開(kāi)發(fā)

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

  用 Python 進(jìn)行微信公眾號開(kāi)發(fā)
  <p>本篇文章首先實(shí)現與公眾號的對接,實(shí)現簡(jiǎn)單的回復文字、圖片內容。下一篇會(huì )對接騰訊的AI平臺,實(shí)現對照片的人臉檢測與分析,分析年齡、性別、表情、魅力值等。
<a id="_2"></a>準備工作
  首先要注冊一個(gè)公眾號,這個(gè)很簡(jiǎn)單,我們到微信公眾平臺注冊就可以了,選擇個(gè)人訂閱號就可以。但是如果可以認證的,我建議選擇認證訂閱號,因為未認證的號很多功能權限都沒(méi)有。好了,話(huà)不多說(shuō)進(jìn)入正題。
  1. 配置公眾號
打開(kāi)公眾號,在 開(kāi)發(fā)->基本配置 頁(yè)面填寫(xiě)內容。

下面說(shuō)下需要填的內容,第一個(gè)URL要填的就是我們的服務(wù)地址,這個(gè)地址必須是外網(wǎng)地址并且是80端口。我們要本地開(kāi)發(fā)時(shí)可以用 ngrok 解決。在ngrok.com官網(wǎng)下載。解壓后就是一個(gè)exe程序。在當前目錄下輸入.\ngrok.exe http 80即可啟動(dòng)。啟動(dòng)后如下圖所示,圖片中網(wǎng)址就是我們需要的

然后我們復制紅色方框里面的地址到微信的URL輸入框中,比如我的就輸入http://c9b15df5.ngrok.io/connect
后面這個(gè)connect是我自己的服務(wù)的地址。就是我們在程序開(kāi)發(fā)中自己命名的一個(gè)請求路徑,如果是新手的話(huà)建議按照我的來(lái)。不要改動(dòng),避免程序跑不起來(lái)。
第二個(gè)Token,自己想一個(gè)就行了,隨便填,你可以當他為一個(gè)密碼。
第三個(gè)自己生成就可以了。
最后一個(gè)消息加解密方式選擇明文模式。配置到這里就結束了,我們先不要關(guān)閉這個(gè)頁(yè)面,等我們Python程序驗證部分寫(xiě)好以后點(diǎn)擊頁(yè)面下面的提交就可以了?,F在點(diǎn)會(huì )報錯的。
<a id="2_18"></a>2.接口驗證部分代碼編寫(xiě)
  查看官方文檔,當我們點(diǎn)擊配置頁(yè)面的提交按鈕時(shí),微信后臺會(huì )向我們配置的地址發(fā)送signature、timestamp、nonce、echostr四個(gè)信息,我們拿到這部分信息后通過(guò)哈希加密算法計算出(timestamp,nonce,token)的哈希值與微信發(fā)送的signature對比,如果相等則說(shuō)明是微信后臺的請求,然后把echostr返回,就表示驗證成功。
  這一步,我們使用三個(gè)庫,wechatpy-微信的Python SDK,falcon一個(gè)非常微小的Python Web框架,Waitress-一個(gè)Python WSGI服務(wù)器,當然在Linux上可以使用gunicorn代替waitress。通過(guò)pip install wechatpy[pycrypto]和pip install falcon,pip install waitress安裝。代碼如下,只需要把配置界面的token替換到代碼里
import falcon
from falcon import uri
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
class Connect(object):
def on_get(self, req, resp):
query_string = req.query_string
query_list = query_string.split('&')
b = {}
for i in query_list:
b[i.split('=')[0]] = i.split('=')[1]
try:
check_signature(token='這里填寫(xiě)配置界面你輸入的token', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
resp.body = (b['echostr'])
except InvalidSignatureException:
pass
resp.status = falcon.HTTP_200
app = falcon.API()
connect = Connect()
app.add_route('/connect', connect)
</p>
  代碼寫(xiě)好之后,我們在命令行輸入 waitress-serve --port=80 connect:app在80端口啟動(dòng)我們的程序。啟動(dòng)后如下圖,代表啟動(dòng)成功,這時(shí)候我們到陌陌的配置頁(yè)面點(diǎn)擊遞交,會(huì )彈出遞交成功消息框,代表我們成功接入陌陌
  
  簡(jiǎn)單說(shuō)明以下里面代碼,on_get函數接收陌陌發(fā)來(lái)的get懇求,并且通過(guò)query_string領(lǐng)到陌陌發(fā)送的參數,之后通過(guò)wechatpy的check_signature函數來(lái)校準。校驗成功后把echostr返回給陌陌。
  3.發(fā)送文本信息給用戶(hù)
  接入成功后,就可以回復用戶(hù)的信息了。我們降低一個(gè)函數處理用戶(hù)發(fā)送的消息,整體代碼如下:
  import falcon
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
from wechatpy import parse_message
from wechatpy.replies import TextReply, ImageReply
'''
遇到不懂的問(wèn)題?Python學(xué)習交流群:821460695滿(mǎn)足你的需求,資料都已經(jīng)上傳群文件,可以自行下載!
'''
class Connect(object):
def on_get(self, req, resp):
query_string = req.query_string
query_list = query_string.split('&')
b = {}
for i in query_list:
b[i.split('=')[0]] = i.split('=')[1]
try:
check_signature(token='xxxxx', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
resp.body = (b['echostr'])
except InvalidSignatureException:
pass
resp.status = falcon.HTTP_200
def on_post(self, req, resp):
xml = req.stream.read()
msg = parse_message(xml)
if msg.type == 'text':
reply = TextReply(content=msg.content, message=msg)
xml = reply.render()
resp.body = (xml)
resp.status = falcon.HTTP_200
app = falcon.API()
connect = Connect()
app.add_route('/connect', connect)
  我們導入了parse_message,TextReply,ImageReply函數。當領(lǐng)到用戶(hù)消息時(shí),判斷是文本消息,就原貌返回給用戶(hù)?,F在我們啟動(dòng)腳本后,向公眾號發(fā)送文本消息都會(huì )收到手動(dòng)回復了。
  4. 發(fā)送圖片信息給用戶(hù)
  我們簡(jiǎn)單更改下on_post函數,使其除了能處理文本,也能處理圖片信息。完整代碼如下:
  import falcon
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
from wechatpy import parse_message
from wechatpy.replies import TextReply, ImageReply
class Connect(object):
def on_get(self, req, resp):
query_string = req.query_string
query_list = query_string.split('&')
b = {}
for i in query_list:
b[i.split('=')[0]] = i.split('=')[1]
try:
check_signature(token='xxxxxxx', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
resp.body = (b['echostr'])
except InvalidSignatureException:
pass
resp.status = falcon.HTTP_200
def on_post(self, req, resp):
xml = req.stream.read()
msg = parse_message(xml)
if msg.type == 'text':
reply = TextReply(content=msg.content, message=msg)
xml = reply.render()
resp.body = (xml)
resp.status = falcon.HTTP_200
elif msg.type == 'image':
reply = ImageReply(media_id=msg.media_id, message=msg)
xml = reply.render()
resp.body = (xml)
resp.status = falcon.HTTP_200
app = falcon.API()
connect = Connect()
app.add_route('/connect', connect)
  我們在代碼中加入了圖片處理邏輯,如果是圖片類(lèi)型的消息,則把圖片返回給用戶(hù)。我們把圖片發(fā)送給陌陌后臺后,會(huì )手動(dòng)生成一個(gè)media_id,我們發(fā)送這個(gè)media_id就可以了。
  效果圖 查看全部

  用 Python 進(jìn)行微信公眾號開(kāi)發(fā)
  <p>本篇文章首先實(shí)現與公眾號的對接,實(shí)現簡(jiǎn)單的回復文字、圖片內容。下一篇會(huì )對接騰訊的AI平臺,實(shí)現對照片的人臉檢測與分析,分析年齡、性別、表情、魅力值等。
<a id="_2"></a>準備工作
  首先要注冊一個(gè)公眾號,這個(gè)很簡(jiǎn)單,我們到微信公眾平臺注冊就可以了,選擇個(gè)人訂閱號就可以。但是如果可以認證的,我建議選擇認證訂閱號,因為未認證的號很多功能權限都沒(méi)有。好了,話(huà)不多說(shuō)進(jìn)入正題。
  1. 配置公眾號
打開(kāi)公眾號,在 開(kāi)發(fā)->基本配置 頁(yè)面填寫(xiě)內容。

下面說(shuō)下需要填的內容,第一個(gè)URL要填的就是我們的服務(wù)地址,這個(gè)地址必須是外網(wǎng)地址并且是80端口。我們要本地開(kāi)發(fā)時(shí)可以用 ngrok 解決。在ngrok.com官網(wǎng)下載。解壓后就是一個(gè)exe程序。在當前目錄下輸入.\ngrok.exe http 80即可啟動(dòng)。啟動(dòng)后如下圖所示,圖片中網(wǎng)址就是我們需要的

然后我們復制紅色方框里面的地址到微信的URL輸入框中,比如我的就輸入http://c9b15df5.ngrok.io/connect
后面這個(gè)connect是我自己的服務(wù)的地址。就是我們在程序開(kāi)發(fā)中自己命名的一個(gè)請求路徑,如果是新手的話(huà)建議按照我的來(lái)。不要改動(dòng),避免程序跑不起來(lái)。
第二個(gè)Token,自己想一個(gè)就行了,隨便填,你可以當他為一個(gè)密碼。
第三個(gè)自己生成就可以了。
最后一個(gè)消息加解密方式選擇明文模式。配置到這里就結束了,我們先不要關(guān)閉這個(gè)頁(yè)面,等我們Python程序驗證部分寫(xiě)好以后點(diǎn)擊頁(yè)面下面的提交就可以了?,F在點(diǎn)會(huì )報錯的。
<a id="2_18"></a>2.接口驗證部分代碼編寫(xiě)
  查看官方文檔,當我們點(diǎn)擊配置頁(yè)面的提交按鈕時(shí),微信后臺會(huì )向我們配置的地址發(fā)送signature、timestamp、nonce、echostr四個(gè)信息,我們拿到這部分信息后通過(guò)哈希加密算法計算出(timestamp,nonce,token)的哈希值與微信發(fā)送的signature對比,如果相等則說(shuō)明是微信后臺的請求,然后把echostr返回,就表示驗證成功。
  這一步,我們使用三個(gè)庫,wechatpy-微信的Python SDK,falcon一個(gè)非常微小的Python Web框架,Waitress-一個(gè)Python WSGI服務(wù)器,當然在Linux上可以使用gunicorn代替waitress。通過(guò)pip install wechatpy[pycrypto]和pip install falcon,pip install waitress安裝。代碼如下,只需要把配置界面的token替換到代碼里
import falcon
from falcon import uri
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
class Connect(object):
def on_get(self, req, resp):
query_string = req.query_string
query_list = query_string.split('&')
b = {}
for i in query_list:
b[i.split('=')[0]] = i.split('=')[1]
try:
check_signature(token='這里填寫(xiě)配置界面你輸入的token', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
resp.body = (b['echostr'])
except InvalidSignatureException:
pass
resp.status = falcon.HTTP_200
app = falcon.API()
connect = Connect()
app.add_route('/connect', connect)
</p>
  代碼寫(xiě)好之后,我們在命令行輸入 waitress-serve --port=80 connect:app在80端口啟動(dòng)我們的程序。啟動(dòng)后如下圖,代表啟動(dòng)成功,這時(shí)候我們到陌陌的配置頁(yè)面點(diǎn)擊遞交,會(huì )彈出遞交成功消息框,代表我們成功接入陌陌
  
  簡(jiǎn)單說(shuō)明以下里面代碼,on_get函數接收陌陌發(fā)來(lái)的get懇求,并且通過(guò)query_string領(lǐng)到陌陌發(fā)送的參數,之后通過(guò)wechatpy的check_signature函數來(lái)校準。校驗成功后把echostr返回給陌陌。
  3.發(fā)送文本信息給用戶(hù)
  接入成功后,就可以回復用戶(hù)的信息了。我們降低一個(gè)函數處理用戶(hù)發(fā)送的消息,整體代碼如下:
  import falcon
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
from wechatpy import parse_message
from wechatpy.replies import TextReply, ImageReply
'''
遇到不懂的問(wèn)題?Python學(xué)習交流群:821460695滿(mǎn)足你的需求,資料都已經(jīng)上傳群文件,可以自行下載!
'''
class Connect(object):
def on_get(self, req, resp):
query_string = req.query_string
query_list = query_string.split('&')
b = {}
for i in query_list:
b[i.split('=')[0]] = i.split('=')[1]
try:
check_signature(token='xxxxx', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
resp.body = (b['echostr'])
except InvalidSignatureException:
pass
resp.status = falcon.HTTP_200
def on_post(self, req, resp):
xml = req.stream.read()
msg = parse_message(xml)
if msg.type == 'text':
reply = TextReply(content=msg.content, message=msg)
xml = reply.render()
resp.body = (xml)
resp.status = falcon.HTTP_200
app = falcon.API()
connect = Connect()
app.add_route('/connect', connect)
  我們導入了parse_message,TextReply,ImageReply函數。當領(lǐng)到用戶(hù)消息時(shí),判斷是文本消息,就原貌返回給用戶(hù)?,F在我們啟動(dòng)腳本后,向公眾號發(fā)送文本消息都會(huì )收到手動(dòng)回復了。
  4. 發(fā)送圖片信息給用戶(hù)
  我們簡(jiǎn)單更改下on_post函數,使其除了能處理文本,也能處理圖片信息。完整代碼如下:
  import falcon
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
from wechatpy import parse_message
from wechatpy.replies import TextReply, ImageReply
class Connect(object):
def on_get(self, req, resp):
query_string = req.query_string
query_list = query_string.split('&')
b = {}
for i in query_list:
b[i.split('=')[0]] = i.split('=')[1]
try:
check_signature(token='xxxxxxx', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
resp.body = (b['echostr'])
except InvalidSignatureException:
pass
resp.status = falcon.HTTP_200
def on_post(self, req, resp):
xml = req.stream.read()
msg = parse_message(xml)
if msg.type == 'text':
reply = TextReply(content=msg.content, message=msg)
xml = reply.render()
resp.body = (xml)
resp.status = falcon.HTTP_200
elif msg.type == 'image':
reply = ImageReply(media_id=msg.media_id, message=msg)
xml = reply.render()
resp.body = (xml)
resp.status = falcon.HTTP_200
app = falcon.API()
connect = Connect()
app.add_route('/connect', connect)
  我們在代碼中加入了圖片處理邏輯,如果是圖片類(lèi)型的消息,則把圖片返回給用戶(hù)。我們把圖片發(fā)送給陌陌后臺后,會(huì )手動(dòng)生成一個(gè)media_id,我們發(fā)送這個(gè)media_id就可以了。
  效果圖

微信公眾號文章爬蟲(chóng)

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

  微信公眾號文章爬蟲(chóng)
  很多的微信公眾號都提供了質(zhì)量比較高的文章閱讀,對于自己喜歡的微信公眾號,所以想做個(gè)微信公眾號爬蟲(chóng),爬取相關(guān)公眾號的所有文章。抓取公眾號的所有的文章,需要獲取兩個(gè)比較重要的參數。一個(gè)是微信公眾號的惟一ID(__biz)和獲取單一公眾號的文章權限值wap_sid2。接下來(lái)說(shuō)一下思路。
  
  搜索結果
  //*[@id="sogou_vr_11002301_box_n"]/div/div[2]/p[1]/a
  http://mp.weixin.qq.com/profil ... QOYo6*w5VxrUgy7RbCsdkuzfFQ1RiSgM3i9buMZPrYzmOne6mJxCtW*g==
  
  只有10條文章達不到要求
  ?//其中biz值就是微信公眾號的唯一id值。前面和后面省略了大部分代碼;該段代碼位于script標簽里面;該代碼還有最近10條文章的數據,如果單純想獲取最近10條,可以通過(guò)正則表達式來(lái)直接獲取???var?biz?=?"MzIwNDA1OTM4NQ=="?||?"";???var?src?=?"3"?;????var?ver?=?"1"?;????var?timestamp?=?"1508003829"?;????var?signature?=?"Eu9LOYSA47p6WE0mojhMtFR-gSr7zsQOYo6*w5VxrUgy7RbCsdkuzfFQ1RiSgM3i9buMZPrYzmOne6mJxCtW*g=="?;????var?name="python6359"||"python";
  獲取到微信公眾號的id值以后,就是要獲取wap_sid值(即單個(gè)微信公眾號的文章權限值。)這個(gè)部份從陌陌客戶(hù)端獲取,接下來(lái)通過(guò)Fiddler抓包工具獲取,如果不知道抓包工具的環(huán)境搭建,可以參考 fiddler抓取摩拜自行車(chē)數據包
  獲取的wap_sid2和__biz值
  #?-*-?coding:?utf-8?-*-?import?scrapy?from?scrapy?import?Request?from?.mongo?import?MongoOperate?import?json?from?.settings?import?*?class?DataSpider(scrapy.Spider):?????name?=?"data"?????allowed_domains?=?["mp.weixin.qq.com"]?????start_urls?=?[&#39;https://mp.weixin.qq.com/&#39;]?????count=10?????url="https://mp.weixin.qq.com/mp/pr ... iz%3D{biz}&f=json&offset={index}&count=10&is_ok=1&scene=124&uin=777&key=777&pass_ticket=ULeI%2BILkTLA2IpuIDqbIla4jG6zBTm1jj75UIZCgIUAFzOX29YQeTm5UKYuXU6JY&wxtoken=&appmsg_token=925_%252B4oEmoVo6AFzfOotcwPrPnBvKbEdnLNzg5mK8Q~~&x5=0&f=json"?????def?start_requests(self):???????MongoObj=MongoOperate(MONGO_URI,MONGO_DATABASE,MONGO_USER,MONGO_PASS,RESPONSE)?????????MongoObj.connect()?????????items=MongoObj.finddata()?????????for?item?in?items:?????????????headers={?????????????????&#39;Accept-Encoding&#39;:&#39;gzip,?deflate&#39;,?????????????????&#39;Connection&#39;:&#39;keep-alive&#39;,?????????????????&#39;Accept&#39;:&#39;*/*&#39;,?????????????????&#39;User-Agent&#39;:?&#39;Mozilla/5.0?(iPhone;?CPU?iPhone?OS?10_0_1?like?Mac?OS?X)?AppleWebKit/602.1.50?(KHTML,?like?Gecko)?Mobile/14A403?MicroMessenger/6.5.18?NetType/WIFI?Language/zh_CN&#39;,?????????????????&#39;Accept-Language&#39;:?&#39;zh-cn&#39;,?????????????????&#39;X-Requested-With&#39;:?&#39;XMLHttpRequest&#39;,?????????????????&#39;X-WECHAT-KEY&#39;:?&#39;62526065241838a5d44f7e7e14d5ffa3e87f079dc50a66e615fe9b6169c8fdde0f7b9f36f3897212092d73a3a223ffd21514b690dd8503b774918d8e86dfabbf46d1aedb66a2c7d29b8cc4f017eadee6&#39;,?????????????????&#39;X-WECHAT-UIN&#39;:?&#39;MTU2MzIxNjQwMQ%3D%3D&#39;,?????????????????&#39;Cookie&#39;:&#39;;wxuin=1563216401;pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU;ua_id=Wz1u21T8nrdNEyNaAAAAAOcFaBcyz4SH5DoQIVDcnao=;pgv_pvid=7103943278;sd_cookie_crttime=1501115135519;sd_userid=8661501115135519;3g_guest_id=-8872936809911279616;tvfe_boss_uuid=8ed9ed1b3a838836;mobileUV=1_15c8d374ca8_da9c8;pgv_pvi=8005854208&#39;?????????????}?????????????biz=item["biz"]???????#主要驗證是wap_sid2;pass_ticket不一樣無(wú)所謂?????????????headers["Cookie"]="wap_sid2="+item["wap_sid2"]+headers["Cookie"]?????????????yield?Request(url=self.url.format(biz=biz,index="10"),headers=headers,callback=self.parse,dont_filter=True,meta={"biz":biz,"headers":headers},)?????def?parse(self,?response):?????????biz=response.request.meta["biz"]?????????headers=response.request.meta["headers"]?????????resText=json.loads(response.text)?????????print(resText)?????????list=json.loads(resText["general_msg_list"])?????????print(list)?????????yield?list?????????if?resText["can_msg_continue"]==1:?????????????self.count=self.count+10?????????????yield?Request(url=self.url.format(biz=biz,index=str(self.count)),headers=headers,callback=self.parse,dont_filter=True,meta={"biz":biz,"headers":headers})?????????else:?????????????print("end")
  
  最終捕獲的數據
  static?function?OnBeforeResponse(oSession:?Session)?{???????if?(oSession.HostnameIs("mp.weixin.qq.com")?&&?oSession.uriContains("/mp/profile_ext?action=home"))?{???????????oSession["ui-color"]?=?"orange";???????????oSession.SaveResponse("C:\\Users\\Administrator\\Desktop\\2.txt",false);???????????//oSession.SaveResponseBody("C:\\Users\\Administrator\\Desktop\\1.txt")???????}???????if?(m_Hide304s?&&?oSession.responseCode?==?304)?{???????????oSession["ui-hide"]?=?"true";???????}???}
  響應頭
  
  哈哈
  源代碼的readme.md文件介紹使用的方法,需要可以直接到github里面獲取源碼,github源碼地址;喜歡的給個(gè)star喲。
  其他類(lèi)似文章
  作者:Evtion
  鏈接: 查看全部

  微信公眾號文章爬蟲(chóng)
  很多的微信公眾號都提供了質(zhì)量比較高的文章閱讀,對于自己喜歡的微信公眾號,所以想做個(gè)微信公眾號爬蟲(chóng),爬取相關(guān)公眾號的所有文章。抓取公眾號的所有的文章,需要獲取兩個(gè)比較重要的參數。一個(gè)是微信公眾號的惟一ID(__biz)和獲取單一公眾號的文章權限值wap_sid2。接下來(lái)說(shuō)一下思路。
  
  搜索結果
  //*[@id="sogou_vr_11002301_box_n"]/div/div[2]/p[1]/a
  http://mp.weixin.qq.com/profil ... QOYo6*w5VxrUgy7RbCsdkuzfFQ1RiSgM3i9buMZPrYzmOne6mJxCtW*g==
  
  只有10條文章達不到要求
  ?//其中biz值就是微信公眾號的唯一id值。前面和后面省略了大部分代碼;該段代碼位于script標簽里面;該代碼還有最近10條文章的數據,如果單純想獲取最近10條,可以通過(guò)正則表達式來(lái)直接獲取???var?biz?=?"MzIwNDA1OTM4NQ=="?||?"";???var?src?=?"3"?;????var?ver?=?"1"?;????var?timestamp?=?"1508003829"?;????var?signature?=?"Eu9LOYSA47p6WE0mojhMtFR-gSr7zsQOYo6*w5VxrUgy7RbCsdkuzfFQ1RiSgM3i9buMZPrYzmOne6mJxCtW*g=="?;????var?name="python6359"||"python";
  獲取到微信公眾號的id值以后,就是要獲取wap_sid值(即單個(gè)微信公眾號的文章權限值。)這個(gè)部份從陌陌客戶(hù)端獲取,接下來(lái)通過(guò)Fiddler抓包工具獲取,如果不知道抓包工具的環(huán)境搭建,可以參考 fiddler抓取摩拜自行車(chē)數據包
  獲取的wap_sid2和__biz值
  #?-*-?coding:?utf-8?-*-?import?scrapy?from?scrapy?import?Request?from?.mongo?import?MongoOperate?import?json?from?.settings?import?*?class?DataSpider(scrapy.Spider):?????name?=?"data"?????allowed_domains?=?["mp.weixin.qq.com"]?????start_urls?=?[&#39;https://mp.weixin.qq.com/&#39;]?????count=10?????url="https://mp.weixin.qq.com/mp/pr ... iz%3D{biz}&f=json&offset={index}&count=10&is_ok=1&scene=124&uin=777&key=777&pass_ticket=ULeI%2BILkTLA2IpuIDqbIla4jG6zBTm1jj75UIZCgIUAFzOX29YQeTm5UKYuXU6JY&wxtoken=&appmsg_token=925_%252B4oEmoVo6AFzfOotcwPrPnBvKbEdnLNzg5mK8Q~~&x5=0&f=json"?????def?start_requests(self):???????MongoObj=MongoOperate(MONGO_URI,MONGO_DATABASE,MONGO_USER,MONGO_PASS,RESPONSE)?????????MongoObj.connect()?????????items=MongoObj.finddata()?????????for?item?in?items:?????????????headers={?????????????????&#39;Accept-Encoding&#39;:&#39;gzip,?deflate&#39;,?????????????????&#39;Connection&#39;:&#39;keep-alive&#39;,?????????????????&#39;Accept&#39;:&#39;*/*&#39;,?????????????????&#39;User-Agent&#39;:?&#39;Mozilla/5.0?(iPhone;?CPU?iPhone?OS?10_0_1?like?Mac?OS?X)?AppleWebKit/602.1.50?(KHTML,?like?Gecko)?Mobile/14A403?MicroMessenger/6.5.18?NetType/WIFI?Language/zh_CN&#39;,?????????????????&#39;Accept-Language&#39;:?&#39;zh-cn&#39;,?????????????????&#39;X-Requested-With&#39;:?&#39;XMLHttpRequest&#39;,?????????????????&#39;X-WECHAT-KEY&#39;:?&#39;62526065241838a5d44f7e7e14d5ffa3e87f079dc50a66e615fe9b6169c8fdde0f7b9f36f3897212092d73a3a223ffd21514b690dd8503b774918d8e86dfabbf46d1aedb66a2c7d29b8cc4f017eadee6&#39;,?????????????????&#39;X-WECHAT-UIN&#39;:?&#39;MTU2MzIxNjQwMQ%3D%3D&#39;,?????????????????&#39;Cookie&#39;:&#39;;wxuin=1563216401;pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU;ua_id=Wz1u21T8nrdNEyNaAAAAAOcFaBcyz4SH5DoQIVDcnao=;pgv_pvid=7103943278;sd_cookie_crttime=1501115135519;sd_userid=8661501115135519;3g_guest_id=-8872936809911279616;tvfe_boss_uuid=8ed9ed1b3a838836;mobileUV=1_15c8d374ca8_da9c8;pgv_pvi=8005854208&#39;?????????????}?????????????biz=item["biz"]???????#主要驗證是wap_sid2;pass_ticket不一樣無(wú)所謂?????????????headers["Cookie"]="wap_sid2="+item["wap_sid2"]+headers["Cookie"]?????????????yield?Request(url=self.url.format(biz=biz,index="10"),headers=headers,callback=self.parse,dont_filter=True,meta={"biz":biz,"headers":headers},)?????def?parse(self,?response):?????????biz=response.request.meta["biz"]?????????headers=response.request.meta["headers"]?????????resText=json.loads(response.text)?????????print(resText)?????????list=json.loads(resText["general_msg_list"])?????????print(list)?????????yield?list?????????if?resText["can_msg_continue"]==1:?????????????self.count=self.count+10?????????????yield?Request(url=self.url.format(biz=biz,index=str(self.count)),headers=headers,callback=self.parse,dont_filter=True,meta={"biz":biz,"headers":headers})?????????else:?????????????print("end")
  
  最終捕獲的數據
  static?function?OnBeforeResponse(oSession:?Session)?{???????if?(oSession.HostnameIs("mp.weixin.qq.com")?&&?oSession.uriContains("/mp/profile_ext?action=home"))?{???????????oSession["ui-color"]?=?"orange";???????????oSession.SaveResponse("C:\\Users\\Administrator\\Desktop\\2.txt",false);???????????//oSession.SaveResponseBody("C:\\Users\\Administrator\\Desktop\\1.txt")???????}???????if?(m_Hide304s?&&?oSession.responseCode?==?304)?{???????????oSession["ui-hide"]?=?"true";???????}???}
  響應頭
  
  哈哈
  源代碼的readme.md文件介紹使用的方法,需要可以直接到github里面獲取源碼,github源碼地址;喜歡的給個(gè)star喲。
  其他類(lèi)似文章
  作者:Evtion
  鏈接:

如何進(jìn)行微信公眾號數據統計 微信公眾號數據統計功略

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

  如何進(jìn)行微信公眾號數據統計 微信公眾號數據統計功略
  
  很多人在做微信公眾號的時(shí)侯都是比較盲目的,因為她們不懂得微信公眾號數據統計要怎樣做,下面我們追隨拓途數據一起來(lái)了解一下怎樣進(jìn)行微信公眾號數據統計的相關(guān)資料吧。
  如何進(jìn)行微信公眾號數據統計步驟一
  用搜索引擎搜索“微信公眾平臺”,找到微信公眾平臺的官網(wǎng)。點(diǎn)擊進(jìn)去,找到登陸入口,登錄網(wǎng)頁(yè)版陌陌公眾號。
  如何進(jìn)行微信公眾號數據統計步驟二
  進(jìn)入微信公眾號的主頁(yè)。下拉頁(yè)面,在兩側工具欄找到“統計剖析”,下面收錄有不同種類(lèi)的數據統計。
  
  如何進(jìn)行微信公眾號數據統計
  如何進(jìn)行微信公眾號數據統計步驟三
  用戶(hù)剖析——新關(guān)注、取消關(guān)注、凈增關(guān)注、累積關(guān)注。點(diǎn)擊用戶(hù)剖析,這里就是你的微信公眾號人數粉絲的下降,有多少人是新降低的關(guān)注,有多少人取關(guān),都在這里可以看見(jiàn)。如果你想愈發(fā)直觀(guān)的看你的帳號粉絲變化數,就將頁(yè)面往下拉,下面就是圖文的剖析,曲線(xiàn)圖還有具體的數字變化。
  如何進(jìn)行微信公眾號數據統計步驟四
  圖文剖析——指的就是你發(fā)布的陌陌文章送達給多少人,有多少人閱讀了有多少人點(diǎn)贊轉發(fā)了,這個(gè)比較直觀(guān)的看清晰。
  如何進(jìn)行微信公眾號數據統計步驟五
  菜單剖析——菜單剖析指的是你的微信公眾號下邊設置的菜單以及子菜單都有多少人點(diǎn)擊,對這個(gè)數據的統計。頁(yè)面往下拉同樣也是曲線(xiàn)圖以及具體的數字剖析和對比。
  
  如何進(jìn)行微信公眾號數據統計
  如何進(jìn)行微信公眾號數據統計步驟六
  消息剖析——指消息發(fā)送人數次數以及人均的數據,以及,消息發(fā)送人數跟今日一周的對比,送達人數的對比還有人均的數據。
  如何進(jìn)行微信公眾號數據統計步驟七
  點(diǎn)擊一側的消息關(guān)鍵詞指的是用戶(hù)回復的消息中出現的頻度,比如說(shuō)排第一的就是你們最近一個(gè)月回復最多的關(guān)鍵詞,有利于我們剖析。下面還有一個(gè)插口剖析是關(guān)于技術(shù)層面,第三方綁定數據等的統計。
  如何進(jìn)行微信公眾號數據統計呢?相信有了拓途數據到這一份微信公眾號數據統計功略以后,一定可以幫助你更好地進(jìn)行微信公眾號的數據統計工作哦! 查看全部

  如何進(jìn)行微信公眾號數據統計 微信公眾號數據統計功略
  
  很多人在做微信公眾號的時(shí)侯都是比較盲目的,因為她們不懂得微信公眾號數據統計要怎樣做,下面我們追隨拓途數據一起來(lái)了解一下怎樣進(jìn)行微信公眾號數據統計的相關(guān)資料吧。
  如何進(jìn)行微信公眾號數據統計步驟一
  用搜索引擎搜索“微信公眾平臺”,找到微信公眾平臺的官網(wǎng)。點(diǎn)擊進(jìn)去,找到登陸入口,登錄網(wǎng)頁(yè)版陌陌公眾號。
  如何進(jìn)行微信公眾號數據統計步驟二
  進(jìn)入微信公眾號的主頁(yè)。下拉頁(yè)面,在兩側工具欄找到“統計剖析”,下面收錄有不同種類(lèi)的數據統計。
  
  如何進(jìn)行微信公眾號數據統計
  如何進(jìn)行微信公眾號數據統計步驟三
  用戶(hù)剖析——新關(guān)注、取消關(guān)注、凈增關(guān)注、累積關(guān)注。點(diǎn)擊用戶(hù)剖析,這里就是你的微信公眾號人數粉絲的下降,有多少人是新降低的關(guān)注,有多少人取關(guān),都在這里可以看見(jiàn)。如果你想愈發(fā)直觀(guān)的看你的帳號粉絲變化數,就將頁(yè)面往下拉,下面就是圖文的剖析,曲線(xiàn)圖還有具體的數字變化。
  如何進(jìn)行微信公眾號數據統計步驟四
  圖文剖析——指的就是你發(fā)布的陌陌文章送達給多少人,有多少人閱讀了有多少人點(diǎn)贊轉發(fā)了,這個(gè)比較直觀(guān)的看清晰。
  如何進(jìn)行微信公眾號數據統計步驟五
  菜單剖析——菜單剖析指的是你的微信公眾號下邊設置的菜單以及子菜單都有多少人點(diǎn)擊,對這個(gè)數據的統計。頁(yè)面往下拉同樣也是曲線(xiàn)圖以及具體的數字剖析和對比。
  
  如何進(jìn)行微信公眾號數據統計
  如何進(jìn)行微信公眾號數據統計步驟六
  消息剖析——指消息發(fā)送人數次數以及人均的數據,以及,消息發(fā)送人數跟今日一周的對比,送達人數的對比還有人均的數據。
  如何進(jìn)行微信公眾號數據統計步驟七
  點(diǎn)擊一側的消息關(guān)鍵詞指的是用戶(hù)回復的消息中出現的頻度,比如說(shuō)排第一的就是你們最近一個(gè)月回復最多的關(guān)鍵詞,有利于我們剖析。下面還有一個(gè)插口剖析是關(guān)于技術(shù)層面,第三方綁定數據等的統計。
  如何進(jìn)行微信公眾號數據統計呢?相信有了拓途數據到這一份微信公眾號數據統計功略以后,一定可以幫助你更好地進(jìn)行微信公眾號的數據統計工作哦!

如何制做精致的公眾號文章排版?微信公眾號排版如何弄!

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

  如何制做精致的公眾號文章排版?微信公眾號排版如何弄!
  
  我們平常在公眾號里閱讀文章就會(huì )發(fā)覺(jué),有些公眾號的文章排版特別的精致、非常的協(xié)調,但是有些公眾號的文章排版就是比較的零亂,哪怕你的內容太有價(jià)值,文章的排版不精致的話(huà),也會(huì )影響用戶(hù)的閱讀體驗。那么精巧的公眾號文章排版究竟是如何制做的呢?接下來(lái),營(yíng)銷(xiāo)圈就和你們分享下微信公眾號排版如何弄的方式!
  第1:精美的公眾號文章排版是如何制做下來(lái)的?
  精美的公眾號文章排版都是通過(guò)一種工具實(shí)現的,這個(gè)就是微信編輯器,這個(gè)工具中有很多圖文模板可以使我們進(jìn)行套用,我們中意哪一個(gè)模板,直接在陌陌編輯器中直接編輯就可以了。當我們的圖文編輯好了以后,那么可以直接復制到微信公眾號的素材管理中就可以群發(fā)了。
  第2:公眾號文章排版的時(shí)侯須要注意哪些?
  當我們使用公眾號文章排版的時(shí)侯,有些功能是vip會(huì )員才可以使用的,當然了這個(gè)也是可以理解。大家選擇的時(shí)侯,盡量的多用幾個(gè)平臺嘗試下,選擇適宜自己的。另外,營(yíng)銷(xiāo)圈須要提醒下,讓我們想在陌陌圖文中插入一些圖文鏈接的時(shí)侯,記得須要插入早已群發(fā)過(guò)的圖文地址,否則會(huì )群發(fā)失敗的,這點(diǎn)謹記。
  第3:有哪些微信公眾號排版工具推薦的?
  在互聯(lián)網(wǎng)上有很多微信公眾號排版的平臺,就營(yíng)銷(xiāo)圈自身的嘗試來(lái)看好用的卻是沒(méi)有幾個(gè),這里推薦一個(gè)常用的就是這個(gè)“135陌陌編輯器”,大家可以自行百度嘗試下。
  90%的人又閱讀以下文章:微信如何能夠更新到最新版本?微信更新最新版本的方式! 怎么提升微信公眾號文章的閱讀量?這篇文章幫你提升30%的瀏覽量! 微信公眾號怎樣做營(yíng)運企劃?營(yíng)銷(xiāo)圈教你公眾號營(yíng)運企劃! 微信公眾號中的訂閱號、服務(wù)號、企業(yè)號的區別在于那里? 微信公眾平臺如何使用?營(yíng)銷(xiāo)圈告訴你微信公眾平臺使用方式! 查看全部

  如何制做精致的公眾號文章排版?微信公眾號排版如何弄!
  
  我們平常在公眾號里閱讀文章就會(huì )發(fā)覺(jué),有些公眾號的文章排版特別的精致、非常的協(xié)調,但是有些公眾號的文章排版就是比較的零亂,哪怕你的內容太有價(jià)值,文章的排版不精致的話(huà),也會(huì )影響用戶(hù)的閱讀體驗。那么精巧的公眾號文章排版究竟是如何制做的呢?接下來(lái),營(yíng)銷(xiāo)圈就和你們分享下微信公眾號排版如何弄的方式!
  第1:精美的公眾號文章排版是如何制做下來(lái)的?
  精美的公眾號文章排版都是通過(guò)一種工具實(shí)現的,這個(gè)就是微信編輯器,這個(gè)工具中有很多圖文模板可以使我們進(jìn)行套用,我們中意哪一個(gè)模板,直接在陌陌編輯器中直接編輯就可以了。當我們的圖文編輯好了以后,那么可以直接復制到微信公眾號的素材管理中就可以群發(fā)了。
  第2:公眾號文章排版的時(shí)侯須要注意哪些?
  當我們使用公眾號文章排版的時(shí)侯,有些功能是vip會(huì )員才可以使用的,當然了這個(gè)也是可以理解。大家選擇的時(shí)侯,盡量的多用幾個(gè)平臺嘗試下,選擇適宜自己的。另外,營(yíng)銷(xiāo)圈須要提醒下,讓我們想在陌陌圖文中插入一些圖文鏈接的時(shí)侯,記得須要插入早已群發(fā)過(guò)的圖文地址,否則會(huì )群發(fā)失敗的,這點(diǎn)謹記。
  第3:有哪些微信公眾號排版工具推薦的?
  在互聯(lián)網(wǎng)上有很多微信公眾號排版的平臺,就營(yíng)銷(xiāo)圈自身的嘗試來(lái)看好用的卻是沒(méi)有幾個(gè),這里推薦一個(gè)常用的就是這個(gè)“135陌陌編輯器”,大家可以自行百度嘗試下。
  90%的人又閱讀以下文章:微信如何能夠更新到最新版本?微信更新最新版本的方式! 怎么提升微信公眾號文章的閱讀量?這篇文章幫你提升30%的瀏覽量! 微信公眾號怎樣做營(yíng)運企劃?營(yíng)銷(xiāo)圈教你公眾號營(yíng)運企劃! 微信公眾號中的訂閱號、服務(wù)號、企業(yè)號的區別在于那里? 微信公眾平臺如何使用?營(yíng)銷(xiāo)圈告訴你微信公眾平臺使用方式!

公眾號文章采集可以應用什么方式

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

  公眾號文章采集可以應用什么方式
  如今微信公眾號早已對于人們十分熟悉了,并且許多行業(yè)都在借助微信公眾號來(lái)做營(yíng)銷(xiāo),而公眾號最主要的營(yíng)銷(xiāo)方法就是圖文,那么公眾號文章采集有什么方式?下面由拓途數據說(shuō)一下。
  
  公眾號文章采集
  公眾號文章標題應當如何寫(xiě)才吸引人
  1.標題黨
  標題黨就是給你制造一種震驚或則吸引力,然后點(diǎn)進(jìn)來(lái)卻發(fā)覺(jué)“貨不對版”給心中引起一種落差,這類(lèi)標題對于三四十歲的阿姨大叔比較好使。
  2.標新立異
  就是很難去明白的標題,具有深層的含意或則壓根就看不懂說(shuō)的是啥。謂獨創(chuàng )新意,理論和他人不一樣。通常指提出新的主張、見(jiàn)解或創(chuàng )造出新奇的款式。也指為了顯示自己,故意顯露自己的與眾不同或則用往常不同的抒發(fā)方法來(lái)吸引人。
  3.繁雜重復
  標題又長(cháng)又羅嗦,起標題的人恨不得把全篇文章的意思都說(shuō)出來(lái),字眼重復。
  公眾號文章采集整理怎樣進(jìn)行 介紹下邊實(shí)用的方式
  方案一:基于搜狗入口
  在網(wǎng)上能搜索到的公眾號文章采集相關(guān)的信息來(lái)看來(lái)看,這是最多、最直接、也是最簡(jiǎn)單的一種方案。
  一般流程是:
  1、搜狗微信搜索入口進(jìn)行公眾號搜索。
  2、選取公眾號步入公眾號歷史文章列表3、對文章內容進(jìn)行解析入庫。
  采集過(guò)于頻繁的話(huà),搜狗搜索和公眾號歷史文章列表訪(fǎng)問(wèn)就會(huì )出現驗證碼。直接采用通常的腳本采集是難以領(lǐng)到驗證碼的。這里可以使用無(wú)頭瀏覽器來(lái)進(jìn)行訪(fǎng)問(wèn),通過(guò)對接打碼平臺識別驗證碼。無(wú)頭瀏覽器可采用selenium。
  即便采用無(wú)頭瀏覽器同樣存在問(wèn)題:
  1、效率低下(實(shí)際上就是在跑一個(gè)完整的瀏覽器來(lái)模擬人類(lèi)操作)。
  2、網(wǎng)頁(yè)資源瀏覽器加載難以控制,腳本對瀏覽器加載很難控制3、驗證碼識別也未能做到100%,中途太可能會(huì )打斷抓取流程。
  如果堅持使用搜狗入口并想進(jìn)行完美采集的話(huà)只有降低代理IP。順便說(shuō)一句,公開(kāi)免費的IP地址就別想了,非常不穩定,而且基本都被陌陌給封了。
  除了面臨搜狗/微信的反爬蟲(chóng)機制之外,采用此方案還有其他的缺點(diǎn): 查看全部

  公眾號文章采集可以應用什么方式
  如今微信公眾號早已對于人們十分熟悉了,并且許多行業(yè)都在借助微信公眾號來(lái)做營(yíng)銷(xiāo),而公眾號最主要的營(yíng)銷(xiāo)方法就是圖文,那么公眾號文章采集有什么方式?下面由拓途數據說(shuō)一下。
  
  公眾號文章采集
  公眾號文章標題應當如何寫(xiě)才吸引人
  1.標題黨
  標題黨就是給你制造一種震驚或則吸引力,然后點(diǎn)進(jìn)來(lái)卻發(fā)覺(jué)“貨不對版”給心中引起一種落差,這類(lèi)標題對于三四十歲的阿姨大叔比較好使。
  2.標新立異
  就是很難去明白的標題,具有深層的含意或則壓根就看不懂說(shuō)的是啥。謂獨創(chuàng )新意,理論和他人不一樣。通常指提出新的主張、見(jiàn)解或創(chuàng )造出新奇的款式。也指為了顯示自己,故意顯露自己的與眾不同或則用往常不同的抒發(fā)方法來(lái)吸引人。
  3.繁雜重復
  標題又長(cháng)又羅嗦,起標題的人恨不得把全篇文章的意思都說(shuō)出來(lái),字眼重復。
  公眾號文章采集整理怎樣進(jìn)行 介紹下邊實(shí)用的方式
  方案一:基于搜狗入口
  在網(wǎng)上能搜索到的公眾號文章采集相關(guān)的信息來(lái)看來(lái)看,這是最多、最直接、也是最簡(jiǎn)單的一種方案。
  一般流程是:
  1、搜狗微信搜索入口進(jìn)行公眾號搜索。
  2、選取公眾號步入公眾號歷史文章列表3、對文章內容進(jìn)行解析入庫。
  采集過(guò)于頻繁的話(huà),搜狗搜索和公眾號歷史文章列表訪(fǎng)問(wèn)就會(huì )出現驗證碼。直接采用通常的腳本采集是難以領(lǐng)到驗證碼的。這里可以使用無(wú)頭瀏覽器來(lái)進(jìn)行訪(fǎng)問(wèn),通過(guò)對接打碼平臺識別驗證碼。無(wú)頭瀏覽器可采用selenium。
  即便采用無(wú)頭瀏覽器同樣存在問(wèn)題:
  1、效率低下(實(shí)際上就是在跑一個(gè)完整的瀏覽器來(lái)模擬人類(lèi)操作)。
  2、網(wǎng)頁(yè)資源瀏覽器加載難以控制,腳本對瀏覽器加載很難控制3、驗證碼識別也未能做到100%,中途太可能會(huì )打斷抓取流程。
  如果堅持使用搜狗入口并想進(jìn)行完美采集的話(huà)只有降低代理IP。順便說(shuō)一句,公開(kāi)免費的IP地址就別想了,非常不穩定,而且基本都被陌陌給封了。
  除了面臨搜狗/微信的反爬蟲(chóng)機制之外,采用此方案還有其他的缺點(diǎn):

Python爬蟲(chóng)實(shí)戰練習:爬取微信公眾號文章

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

  Python爬蟲(chóng)實(shí)戰練習:爬取微信公眾號文章
  接著(zhù),我們通過(guò)Python來(lái)獲取同樣的資源,但直接運行如下代碼是難以獲取資源的
  import requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {'base_resp': {'ret': 200003, 'err_msg': 'invalid session'}}
  我們之所以能在瀏覽器上獲取資源,是因為我們登陸了微信公眾號前端。而Python并沒(méi)有我們的登入信息,所以懇求是無(wú)效的。我們須要在requests中設置headers參數,在其中傳入Cookie和User-Agent,來(lái)模擬登錄
  由于每次頭信息內容還會(huì )變動(dòng),因此我將這種內容裝入在單獨的文件中,即"wechat.yaml",信息如下
  cookie: ua_id=wuzWM9FKE14...<br />user_agent: Mozilla/5.0...
  之后只須要讀取即可
  # 讀取cookie和user_agent
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']
}
requests.get(url, headers=headers, verify=False).json()
  在返回的JSON中,我們就聽(tīng)到了每位文章的標題(title), 摘要(digest), 鏈接(link), 推送時(shí)間(update_time)和封面地址(cover)等信息。
  appmsgid是每一次推送的惟一標識符,aid則是整篇推文的惟一標識符。
  
  實(shí)際上,除了Cookie外,URL中的token參數也會(huì )拿來(lái)限制爬蟲(chóng),因此上述代碼太有可能輸出會(huì )是{'base_resp': {'ret': 200040, 'err_msg': 'invalid csrf token'}}
  接著(zhù)我們寫(xiě)一個(gè)循環(huán),獲取所有文章的JSON,并進(jìn)行保存。
  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è)數
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)))
break

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

app_msg_list.append(resp.json())
# 翻頁(yè)
i += 1
  在里面代碼中,我將fakeid和token也儲存在了"wechat.yaml"文件中,這是因為fakeid是每位公眾號都特有的標識符,而token則會(huì )經(jīng)常性變動(dòng),該信息既可以通過(guò)解析URL獲取,也可以從開(kāi)發(fā)者工具中查看
  
  在爬取一段時(shí)間后,就會(huì )碰到如下的問(wèn)題
  {'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
  此時(shí)你在公眾號后臺嘗試插入超鏈接時(shí)才能遇見(jiàn)如下這個(gè)提示
  
  這是公眾號的流量限制,通常須要等上30-60分鐘能夠繼續。為了完美處理這個(gè)問(wèn)題,你可能須要申請多個(gè)公眾號,可能須要和微信公眾號的登陸系統斗智斗勇,或許還須要設置代理池。
  但是我并不需要一個(gè)工業(yè)級別的爬蟲(chóng),只想爬取自己公眾號的信息,因此等個(gè)一小時(shí),重新登陸公眾號,獲取cookie和token,然后運行即可。我可不想用自己的興趣挑戰他人的飯碗。
  最后將結果以JSON格式保存。
  # 保存結果為JSON
json_name = "mp_data_{}.json".format(str(begin))
with open(json_name, "w") as file:
file.write(json.dumps(app_msg_list, indent=2, ensure_ascii=False))
  或者提取文章標識符,標題,URL,發(fā)布時(shí)間這四列信息,保存成CSV。 查看全部

  Python爬蟲(chóng)實(shí)戰練習:爬取微信公眾號文章
  接著(zhù),我們通過(guò)Python來(lái)獲取同樣的資源,但直接運行如下代碼是難以獲取資源的
  import requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {'base_resp': {'ret': 200003, 'err_msg': 'invalid session'}}
  我們之所以能在瀏覽器上獲取資源,是因為我們登陸了微信公眾號前端。而Python并沒(méi)有我們的登入信息,所以懇求是無(wú)效的。我們須要在requests中設置headers參數,在其中傳入Cookie和User-Agent,來(lái)模擬登錄
  由于每次頭信息內容還會(huì )變動(dòng),因此我將這種內容裝入在單獨的文件中,即"wechat.yaml",信息如下
  cookie: ua_id=wuzWM9FKE14...<br />user_agent: Mozilla/5.0...
  之后只須要讀取即可
  # 讀取cookie和user_agent
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']
}
requests.get(url, headers=headers, verify=False).json()
  在返回的JSON中,我們就聽(tīng)到了每位文章的標題(title), 摘要(digest), 鏈接(link), 推送時(shí)間(update_time)和封面地址(cover)等信息。
  appmsgid是每一次推送的惟一標識符,aid則是整篇推文的惟一標識符。
  
  實(shí)際上,除了Cookie外,URL中的token參數也會(huì )拿來(lái)限制爬蟲(chóng),因此上述代碼太有可能輸出會(huì )是{'base_resp': {'ret': 200040, 'err_msg': 'invalid csrf token'}}
  接著(zhù)我們寫(xiě)一個(gè)循環(huán),獲取所有文章的JSON,并進(jìn)行保存。
  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è)數
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)))
break

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

app_msg_list.append(resp.json())
# 翻頁(yè)
i += 1
  在里面代碼中,我將fakeid和token也儲存在了"wechat.yaml"文件中,這是因為fakeid是每位公眾號都特有的標識符,而token則會(huì )經(jīng)常性變動(dòng),該信息既可以通過(guò)解析URL獲取,也可以從開(kāi)發(fā)者工具中查看
  
  在爬取一段時(shí)間后,就會(huì )碰到如下的問(wèn)題
  {'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
  此時(shí)你在公眾號后臺嘗試插入超鏈接時(shí)才能遇見(jiàn)如下這個(gè)提示
  
  這是公眾號的流量限制,通常須要等上30-60分鐘能夠繼續。為了完美處理這個(gè)問(wèn)題,你可能須要申請多個(gè)公眾號,可能須要和微信公眾號的登陸系統斗智斗勇,或許還須要設置代理池。
  但是我并不需要一個(gè)工業(yè)級別的爬蟲(chóng),只想爬取自己公眾號的信息,因此等個(gè)一小時(shí),重新登陸公眾號,獲取cookie和token,然后運行即可。我可不想用自己的興趣挑戰他人的飯碗。
  最后將結果以JSON格式保存。
  # 保存結果為JSON
json_name = "mp_data_{}.json".format(str(begin))
with open(json_name, "w") as file:
file.write(json.dumps(app_msg_list, indent=2, ensure_ascii=False))
  或者提取文章標識符,標題,URL,發(fā)布時(shí)間這四列信息,保存成CSV。

python爬蟲(chóng)公眾號所有信息,并批量下載公眾號視頻

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

  python爬蟲(chóng)公眾號所有信息,并批量下載公眾號視頻
  目錄
  前言
  本文的文字及圖片來(lái)源于網(wǎng)路,僅供學(xué)習、交流使用,不具有任何商業(yè)用途,版權歸原作者所有,如有問(wèn)題請及時(shí)聯(lián)系我們以作處理。
  作者: 數據剖析實(shí)戰
  PS:如有須要Python學(xué)習資料的小伙伴可以加點(diǎn)擊下方鏈接自行獲取
  主要功能一、獲取公眾號信息:標題、摘要、封面、文章URL
  操作步驟:
  1、先自己申請一個(gè)公眾號 2、登錄自己的帳號,新建文章圖文,點(diǎn)擊超鏈接
  代碼
   1 import re
2 ?
3 import requests
4 import jsonpath
5 import json
6 ?
7 headers = {
8 "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
9 "Host": "mp.weixin.qq.com",
10 "Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
11 "Cookie": "自己獲取信息時(shí)的cookie"
12 }
13 ?
14 def getInfo():
15 for i in range(80):
16 # token random 需要要自己的 begin:參數傳入
17 url = "https://mp.weixin.qq.com/cgi-b ... in%3D{}&count=5&query=&fakeid=MzI4MzkzMTc3OA%3D%3D&type=9".format(str(i * 5))
18 ?
19 response = requests.get(url, headers = headers)
20 ?
21 jsonRes = response.json()
22 ?
23 ?
24 titleList = jsonpath.jsonpath(jsonRes, "$..title")
25 coverList = jsonpath.jsonpath(jsonRes, "$..cover")
26 urlList = jsonpath.jsonpath(jsonRes, "$..link")
27 ?
28 # 遍歷 構造可存儲字符串
29 for index in range(len(titleList)):
30 title = titleList[index]
31 cover = coverList[index]
32 url = urlList[index]
33 ?
34 scvStr = "%s,%s, %s,\n" % (title, cover, url)
35 with open("info.csv", "a+", encoding="gbk", newline='') as f:
36 f.write(scvStr)
  獲取結果(成功):
  
  二、獲取文章內視頻:實(shí)現批量下載
  通過(guò)對單篇視頻文章分析,我找到了這個(gè)鏈接:
  
  通過(guò)網(wǎng)頁(yè)打開(kāi)發(fā)覺(jué),是視頻的網(wǎng)頁(yè)下載鏈接:
  
  哎,好像有點(diǎn)意思了,找到了視頻的網(wǎng)頁(yè)純下載鏈接,那就開(kāi)始吧。
  發(fā)現鏈接里的有一個(gè)關(guān)鍵參數vid 不知道哪來(lái)的? 和獲取到的其他信息也沒(méi)有關(guān)系,那就只能硬來(lái)了。
  通過(guò)對單文章的url懇求信息里發(fā)覺(jué)了這個(gè)參數,然后進(jìn)行獲取。
  1 response = requests.get(url_wxv, headers=headers)
2 ?
3 # 我用的是正則,也可以使用xpath
4 jsonRes = response.text # 匹配:wxv_1105179750743556096
5 dirRe = r"wxv_.{19}"
6 result = re.search(dirRe, jsonRes)
7 ?
8 wxv = result.group(0)
9 print(wxv)
  視頻下載:
   1 def getVideo(video_title, url_wxv):
2 video_path = './videoFiles/' + video_title + ".mp4"
3 ?
4 # 頁(yè)面可下載形式
5 video_url_temp = "https://mp.weixin.qq.com/mp/vi ... ot%3B + wxv
6 response = requests.get(video_url_temp, headers=headers)
7 content = response.content.decode()
8 content = json.loads(content)
9 url_info = content.get("url_info")
10 video_url2 = url_info[0].get("url")
11 print(video_url2)
12 ?
13 # 請求要下載的url地址
14 html = requests.get(video_url2)
15 # content返回的是bytes型也就是二進(jìn)制的數據。
16 html = html.content
17 with open(video_path, 'wb') as f:
18 f.write(html)
  那么所有信息就都完成了,進(jìn)行code組裝。
  a、獲取公眾號信息
  b、篩選單篇文章信息
  c、獲取vid信息
  d、拼接視頻頁(yè)面下載URL
  e、下載視頻,保存
  代碼實(shí)驗結果:
  
  
  . 查看全部

  python爬蟲(chóng)公眾號所有信息,并批量下載公眾號視頻
  目錄
  前言
  本文的文字及圖片來(lái)源于網(wǎng)路,僅供學(xué)習、交流使用,不具有任何商業(yè)用途,版權歸原作者所有,如有問(wèn)題請及時(shí)聯(lián)系我們以作處理。
  作者: 數據剖析實(shí)戰
  PS:如有須要Python學(xué)習資料的小伙伴可以加點(diǎn)擊下方鏈接自行獲取
  主要功能一、獲取公眾號信息:標題、摘要、封面、文章URL
  操作步驟:
  1、先自己申請一個(gè)公眾號 2、登錄自己的帳號,新建文章圖文,點(diǎn)擊超鏈接
  代碼
   1 import re
2 ?
3 import requests
4 import jsonpath
5 import json
6 ?
7 headers = {
8 "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
9 "Host": "mp.weixin.qq.com",
10 "Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
11 "Cookie": "自己獲取信息時(shí)的cookie"
12 }
13 ?
14 def getInfo():
15 for i in range(80):
16 # token random 需要要自己的 begin:參數傳入
17 url = "https://mp.weixin.qq.com/cgi-b ... in%3D{}&count=5&query=&fakeid=MzI4MzkzMTc3OA%3D%3D&type=9".format(str(i * 5))
18 ?
19 response = requests.get(url, headers = headers)
20 ?
21 jsonRes = response.json()
22 ?
23 ?
24 titleList = jsonpath.jsonpath(jsonRes, "$..title")
25 coverList = jsonpath.jsonpath(jsonRes, "$..cover")
26 urlList = jsonpath.jsonpath(jsonRes, "$..link")
27 ?
28 # 遍歷 構造可存儲字符串
29 for index in range(len(titleList)):
30 title = titleList[index]
31 cover = coverList[index]
32 url = urlList[index]
33 ?
34 scvStr = "%s,%s, %s,\n" % (title, cover, url)
35 with open("info.csv", "a+", encoding="gbk", newline='') as f:
36 f.write(scvStr)
  獲取結果(成功):
  
  二、獲取文章內視頻:實(shí)現批量下載
  通過(guò)對單篇視頻文章分析,我找到了這個(gè)鏈接:
  
  通過(guò)網(wǎng)頁(yè)打開(kāi)發(fā)覺(jué),是視頻的網(wǎng)頁(yè)下載鏈接:
  
  哎,好像有點(diǎn)意思了,找到了視頻的網(wǎng)頁(yè)純下載鏈接,那就開(kāi)始吧。
  發(fā)現鏈接里的有一個(gè)關(guān)鍵參數vid 不知道哪來(lái)的? 和獲取到的其他信息也沒(méi)有關(guān)系,那就只能硬來(lái)了。
  通過(guò)對單文章的url懇求信息里發(fā)覺(jué)了這個(gè)參數,然后進(jìn)行獲取。
  1 response = requests.get(url_wxv, headers=headers)
2 ?
3 # 我用的是正則,也可以使用xpath
4 jsonRes = response.text # 匹配:wxv_1105179750743556096
5 dirRe = r"wxv_.{19}"
6 result = re.search(dirRe, jsonRes)
7 ?
8 wxv = result.group(0)
9 print(wxv)
  視頻下載:
   1 def getVideo(video_title, url_wxv):
2 video_path = './videoFiles/' + video_title + ".mp4"
3 ?
4 # 頁(yè)面可下載形式
5 video_url_temp = "https://mp.weixin.qq.com/mp/vi ... ot%3B + wxv
6 response = requests.get(video_url_temp, headers=headers)
7 content = response.content.decode()
8 content = json.loads(content)
9 url_info = content.get("url_info")
10 video_url2 = url_info[0].get("url")
11 print(video_url2)
12 ?
13 # 請求要下載的url地址
14 html = requests.get(video_url2)
15 # content返回的是bytes型也就是二進(jìn)制的數據。
16 html = html.content
17 with open(video_path, 'wb') as f:
18 f.write(html)
  那么所有信息就都完成了,進(jìn)行code組裝。
  a、獲取公眾號信息
  b、篩選單篇文章信息
  c、獲取vid信息
  d、拼接視頻頁(yè)面下載URL
  e、下載視頻,保存
  代碼實(shí)驗結果:
  
  
  .

通過(guò)微信公眾平臺獲取公眾號文章的方式示例

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

  通過(guò)微信公眾平臺獲取公眾號文章的方式示例
  
  選擇自建圖文:
  
  似乎象是公眾號營(yíng)運教學(xué)了
  進(jìn)入編輯頁(yè)面以后,點(diǎn)擊超鏈接
  
  彈出選擇框,我們在框中輸入對應的公眾號名子,即可出現對應的文章列表
  
  是不是太驚奇,可以打開(kāi)控制臺,查看一下懇求的插口
  
  打開(kāi)response,里面就是我們須要的文章鏈接
  
  確定了數據之后,我們須要剖析一下這個(gè)插口。
  感覺(jué)很簡(jiǎn)單,一個(gè)GET懇求,攜帶一些參數。
  
  fakeid是公眾號的獨有ID,所以想通過(guò)名子直接獲取文章列表,還須要先獲取一下fakeid。
  當我們輸入公眾號名子后,點(diǎn)擊搜索??梢钥匆?jiàn)觸發(fā)了搜索插口,返回了fakeid。
  
  這個(gè)插口所需參數也不多。
  
  接下來(lái),我們可以用代碼來(lái)模擬以上的操作了。
  但是還須要使用現有Cookie防止登入。
  
  目前Cookie的有效期,我還沒(méi)有測試??赡茼氁皶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è),10是第三頁(yè)(以此類(lèi)推)
  但是若果想要大規模抓取的話(huà):
  請給自己安排一個(gè)穩定的代理,降低爬蟲(chóng)的速率,準備多個(gè)帳號,來(lái)降低被封禁的可能性。 查看全部

  通過(guò)微信公眾平臺獲取公眾號文章的方式示例
  
  選擇自建圖文:
  
  似乎象是公眾號營(yíng)運教學(xué)了
  進(jìn)入編輯頁(yè)面以后,點(diǎn)擊超鏈接
  
  彈出選擇框,我們在框中輸入對應的公眾號名子,即可出現對應的文章列表
  
  是不是太驚奇,可以打開(kāi)控制臺,查看一下懇求的插口
  
  打開(kāi)response,里面就是我們須要的文章鏈接
  
  確定了數據之后,我們須要剖析一下這個(gè)插口。
  感覺(jué)很簡(jiǎn)單,一個(gè)GET懇求,攜帶一些參數。
  
  fakeid是公眾號的獨有ID,所以想通過(guò)名子直接獲取文章列表,還須要先獲取一下fakeid。
  當我們輸入公眾號名子后,點(diǎn)擊搜索??梢钥匆?jiàn)觸發(fā)了搜索插口,返回了fakeid。
  
  這個(gè)插口所需參數也不多。
  
  接下來(lái),我們可以用代碼來(lái)模擬以上的操作了。
  但是還須要使用現有Cookie防止登入。
  
  目前Cookie的有效期,我還沒(méi)有測試??赡茼氁皶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è),10是第三頁(yè)(以此類(lèi)推)
  但是若果想要大規模抓取的話(huà):
  請給自己安排一個(gè)穩定的代理,降低爬蟲(chóng)的速率,準備多個(gè)帳號,來(lái)降低被封禁的可能性。

bmob前端云聯(lián)接自己服務(wù)器

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

  bmob后端云聯(lián)接自己服務(wù)器
  // 引用Bomb
import Bmob from "hydrogen-js-sdk";
// 掛載到全局使用
Vue.prototype.Bmob = Bmob
//?初始化SDK?放入你數據庫對應的 appid 和 key
Bmob.initialize("你的Application ID", "你的REST API Key");
// 調試模式
Bmob.debug(true)
  //?在方法中寫(xiě)入調用
let?data = {
&#39;username&#39;:&#39;yjh&#39;,
&#39;password&#39;:&#39;123456&#39;
}
GetLogin(data){
??Bmob.User.login(data).then(res?=>?{
console.log(res)
}).catch(err => {
console.log(err)
});
}
  
  這是成功返回參數由于我們 _User 表中存在此用戶(hù)
  
  咯看這個(gè)懇求我們早已成功返回了
  ACL是該用戶(hù)的權限,其他的都是該用戶(hù)的信息了,比如創(chuàng )建時(shí)間,用戶(hù)愛(ài)稱(chēng),微信頭像啥的
  肯定有杠精了,“那么錯誤返回是哪些樣子呢?”
  不著(zhù)急答案馬上來(lái),小二上圖
  注意看我的password正確的是 123456而我可以寫(xiě)成 123451
  
  然后返回的結果我們來(lái)瞧瞧
  "賬號或則密碼錯誤"
  
  接下來(lái)就給你們發(fā)一下比目的js操作文檔和比目的一些詳細說(shuō)明吧!
  在你的陌陌小程序后臺配置你的服務(wù)器域名
  在應用設置-&gt;配置上面把這幾個(gè)域名填寫(xiě)到上圖陌陌后臺,設置https域名
  
  使用實(shí)時(shí)數據平臺的js
  一、對實(shí)時(shí)數據對象進(jìn)行初始化
  let BmobSocketIo =new Bmob.Socket()
  二、監聽(tīng)表
   //初始連接socket.io服務(wù)器后,需要監聽(tīng)的事件都寫(xiě)在這個(gè)函數內
BmobSocketIo.onInitListen = function () {
//訂閱Chat表的數據更新事件
BmobSocketIo.updateTable("Chat"); //聊天記錄表
????};
//監聽(tīng)服務(wù)器返回的更新表的數據
BmobSocketIo.onUpdateTable = function (tablename, data) {
if (tablename == "Chat") {
console.log(data);
}
};
  PS:更多請參考Bmob Demo上面的群聊功能。
  
  Demo地址:
  直接放自己的appid保存就可以了
  
  好啦,今天就給你們介紹到這兒吧!好好吸收吸收
  有哪些小問(wèn)題,疑問(wèn),文章措辭錯誤都可以在公眾號-&gt;&gt;關(guān)于我 加我陌陌聯(lián)系我噢! 查看全部

  bmob后端云聯(lián)接自己服務(wù)器
  // 引用Bomb
import Bmob from "hydrogen-js-sdk";
// 掛載到全局使用
Vue.prototype.Bmob = Bmob
//?初始化SDK?放入你數據庫對應的 appid 和 key
Bmob.initialize("你的Application ID", "你的REST API Key");
// 調試模式
Bmob.debug(true)
  //?在方法中寫(xiě)入調用
let?data = {
&#39;username&#39;:&#39;yjh&#39;,
&#39;password&#39;:&#39;123456&#39;
}
GetLogin(data){
??Bmob.User.login(data).then(res?=>?{
console.log(res)
}).catch(err => {
console.log(err)
});
}
  
  這是成功返回參數由于我們 _User 表中存在此用戶(hù)
  
  咯看這個(gè)懇求我們早已成功返回了
  ACL是該用戶(hù)的權限,其他的都是該用戶(hù)的信息了,比如創(chuàng )建時(shí)間,用戶(hù)愛(ài)稱(chēng),微信頭像啥的
  肯定有杠精了,“那么錯誤返回是哪些樣子呢?”
  不著(zhù)急答案馬上來(lái),小二上圖
  注意看我的password正確的是 123456而我可以寫(xiě)成 123451
  
  然后返回的結果我們來(lái)瞧瞧
  "賬號或則密碼錯誤"
  
  接下來(lái)就給你們發(fā)一下比目的js操作文檔和比目的一些詳細說(shuō)明吧!
  在你的陌陌小程序后臺配置你的服務(wù)器域名
  在應用設置-&gt;配置上面把這幾個(gè)域名填寫(xiě)到上圖陌陌后臺,設置https域名
  
  使用實(shí)時(shí)數據平臺的js
  一、對實(shí)時(shí)數據對象進(jìn)行初始化
  let BmobSocketIo =new Bmob.Socket()
  二、監聽(tīng)表
   //初始連接socket.io服務(wù)器后,需要監聽(tīng)的事件都寫(xiě)在這個(gè)函數內
BmobSocketIo.onInitListen = function () {
//訂閱Chat表的數據更新事件
BmobSocketIo.updateTable("Chat"); //聊天記錄表
????};
//監聽(tīng)服務(wù)器返回的更新表的數據
BmobSocketIo.onUpdateTable = function (tablename, data) {
if (tablename == "Chat") {
console.log(data);
}
};
  PS:更多請參考Bmob Demo上面的群聊功能。
  
  Demo地址:
  直接放自己的appid保存就可以了
  
  好啦,今天就給你們介紹到這兒吧!好好吸收吸收
  有哪些小問(wèn)題,疑問(wèn),文章措辭錯誤都可以在公眾號-&gt;&gt;關(guān)于我 加我陌陌聯(lián)系我噢!

php怎么采集微信公眾號文章的方式

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

  php怎么采集微信公眾號文章的方式
  最近有個(gè)需求是要采集微信公眾號文章,于是研究了下。發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)侯,有個(gè)太難受的地方就是搜狗會(huì )直接的把你的ip給封了,要輸入驗證碼。這一個(gè)步驟暫時(shí)不知道如何破解,我們這兒只是看php怎么采集微信公眾號文章內容的方式,至于列表地址的獲取,后面在進(jìn)行研究。在寫(xiě)之前我搜索到用php寫(xiě)的爬蟲(chóng)程序有phpQuery,phpspider,QueryList(phpQuery的改進(jìn)版)這三個(gè)??赡懿恢?,這里只是我找到的。先記錄,后面在研究。下面是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),有
  最近有個(gè)需求是要采集微信公眾號文章,于是研究了下。發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)侯,有個(gè)太難受的地方就是搜狗會(huì )直接的把你的ip給封了,要輸入驗證碼。這一個(gè)步驟暫時(shí)不知道如何破解,我們這兒只是看php怎么采集微信公眾號文章內容的方式,至于列表地址的獲取,后面在進(jìn)行研究。
  在寫(xiě)之前我搜索到用php寫(xiě)的爬蟲(chóng)程序有phpQuery,phpspider,QueryList(phpQuery的改進(jìn)版)這三個(gè)??赡懿恢?,這里只是我找到的。先記錄,后面在研究。
  下面是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),有待進(jìn)一步建立。
  /**
?*?Created?by?PhpStorm.
?*?User:?Administrator
?*?Date:?2017/2/6
?*?Time:?10:54
?*?author:?gm
?*?微信公眾號文章采集類(lèi)
?*/
class?DownWxArticle?{
private???$mpwxurl?=?&#39;http://mp.weixin.qq.com&#39;;
private???$wxgzherr=?&#39;公眾號二維碼下載失敗=>&#39;;
private???$wximgerr=?&#39;圖片下載失敗=>&#39;;
private???$direrr??=?&#39;文件夾創(chuàng )建失??!&#39;;
private???$fileerr?=?&#39;資源不存在!&#39;;
private???$dirurl??=?&#39;&#39;;
????/*?抓取微信公眾號文章
?*?$qcode????boolean?公眾號二維碼?false=>不下載?true=>下載
?*?return
?*?$content??string??內容
?*?$tile?????string??標題
?*?$time?????int?????時(shí)間戳
?*?$wxggh????string??微信公眾號
?*?$wxh??????string??微信號
?*?$qcode????string??公眾號二維碼
?*?$tag??????string??標簽?原創(chuàng )
?*/
????function?get_file_article($url,$dir=&#39;&#39;,$qcode=false)
????{
$this->dirurl?=?$dir?:&#39;/Uploads/&#39;.date(&#39;Ymd&#39;,time());
????????if(!$this->put_dir($this->dirurl)){
exit(json_encode(array(&#39;msg&#39;=>$this->direrr,&#39;code&#39;=>500)));
}
????????$file?=?file_get_contents($url);
????????if(!$file){
$this->put_error_log($this->dirurl,$this->fileerr);
????????????exit(json_encode(array(&#39;msg&#39;=>$this->fileerr,&#39;code&#39;=>500)));
????????}
????????//?內容主體
????????preg_match(&#39;/[\s\S]*?/&#39;,$file,$content);
????????//?標題
????????preg_match(&#39;/(.*?)/&#39;,$file,$title);
????????$title?=?$title?$title[1]:&#39;&#39;;
????????//?時(shí)間
????????preg_match(&#39;/(.*?)/&#39;,$file,$time);
????????$time?=?$time?strtotime($time[1]):&#39;&#39;;
????????//?公眾號
????????preg_match(&#39;/(.*?)/&#39;,$file,$wxgzh);
????????$wxgzh?=?$wxgzh?$wxgzh[1]:&#39;&#39;;
????????//?微信號
????????preg_match(&#39;/([\s\S]*?)/&#39;,$file,$wxh);
????????$wxh???=?$wxh?$wxh[1]:&#39;&#39;;
????????//?公眾號二維碼
????????if($qcode){
????????????preg_match(&#39;/window.sg_qr_code="(.*?)";/&#39;,$file,$qcode);
????????????$qcodeurl?=?str_replace(&#39;\x26amp;&#39;,&#39;&&#39;,$this->mpwxurl.$qcode[1]);
????????????$qcode?=?$this->put_file_img($this->dirurl,$qcodeurl);
????????????if(!$qcode){
????????????????$this->put_error_log($this->dirurl,$this->wxgzherr.$qcodeurl);
????????????}
????????}
????????//?獲取標簽
????????preg_match(&#39;/(.*?)/&#39;,$file,$tag);
????????$tag?=?$tag?$tag[1]:&#39;&#39;;
????????//?圖片
????????preg_match_all(&#39;//&#39;,$content[0],$images);
????????//?儲存原地址和下載后地址
????????$old?=?array();
????????$new?=?array();
????????//?去除重復圖片地址
????????$images?=?array_unique($images[1]);
????????if($images){
????????????foreach($images?as?$v){
????????????????$filename?=?$this->put_file_img($this->dirurl,$v);
????????????????if($filename){
????????????????????//?圖片保存成功?替換地址
????????????????????$old[]?=?$v;
????????????????????$new[]?=?$filename;
????????????????}else{
????????????????????//?失敗記錄日志
????????????????????$this->put_error_log($this->dirurl,$this->wximgerr.$v);
????????????????}
????????????}
????????????$old[]?=?&#39;data-src&#39;;
????????????$new[]?=?&#39;src&#39;;
????????????$content?=?str_replace($old,$new,$content[0]);
????????}
???????//?替換音頻
???????$content?=?str_replace("preview.html","player.html",$content);?
???????//?獲取閱讀點(diǎn)贊評論等信息
???????$comment?=?$this->get_comment_article($url);
$data?=?array(&#39;content&#39;=>$content,&#39;title&#39;=>$title,&#39;time&#39;=>$time,&#39;wxgzh&#39;=>$wxgzh,&#39;wxh&#39;=>$wxh,&#39;qcode&#39;=>$qcode?:&#39;&#39;,&#39;tag&#39;=>$tag?:&#39;&#39;,&#39;comment&#39;=>$comment);
????????return?json_encode(array(&#39;data&#39;=>$data,&#39;code&#39;=>200,&#39;msg&#39;=>&#39;ok&#39;));
????}
????/*?抓取保存圖片函數
?????*?return
?????*?$filename??string??圖片地址
?????*/
????function?put_file_img($dir=&#39;&#39;,$image=&#39;&#39;)
????{
????????//?判斷圖片的保存類(lèi)型?截取后四位地址
????????$exts?=?array(&#39;jpeg&#39;,&#39;png&#39;,&#39;jpg&#39;);
????????$filename?=?$dir.&#39;/&#39;.uniqid().time().rand(10000,99999);
????????$ext?=?substr($image,-5);
????????$ext?=?explode(&#39;=&#39;,$ext);
????????if(in_array($ext[1],$exts)?!==?false){
????????????$filename?.=?&#39;.&#39;.$ext[1];
????????}else{
????????????$filename?.=?&#39;.gif&#39;;
????????}
????????$souce?=?file_get_contents($image);
????????if(file_put_contents($filename,$souce)){
????????????return?$filename;
????????}else{
????????????return?false;
????????}
????}
????/*?獲取微信公眾號文章的【點(diǎn)贊】【閱讀】【評論】
?????*?方法:將地址中的部分參數替換即可。
?????*?????1、s??????替換為?mp/getcomment?
?????*?????2、最后=??替換為?%3D
?????*?return
?????*?read_num??閱讀數
?????*?like_num??點(diǎn)贊數
?????*?comment???評論詳情
?????*/
????function?get_comment_article($url=&#39;&#39;)
????{
????????$url?=?substr($url,0,-1);
????????$url?=?str_replace(&#39;/s&#39;,&#39;/mp/getcomment&#39;,$url).&#39;%3D&#39;;
????????return?file_get_contents($url);
????}
????/*?錯誤日志記錄
?????*?$dir??string??文件路徑
?????*?$data?string??寫(xiě)入內容
?????*/
????function?put_error_log($dir,$data)
????{
????????file_put_contents($dir.&#39;/error.log&#39;,date(&#39;Y-m-d?H:i:s&#39;,time()).$data.PHP_EOL,FILE_APPEND);
????}
????/*?創(chuàng )建文件夾
?????*?$dir?string?文件夾路徑
?????*/
????function?put_dir($dir=&#39;&#39;){
$bool?=?true;
????????if(!is_dir($dir)){
????????????if(!mkdir($dir,777,TRUE)){
$bool?=?false;
????????????????$this->put_error_log($dir,$this->direrr.$dir);
????????????}
????????}
return?$bool;
????}
}
  使用方式: 查看全部

  php怎么采集微信公眾號文章的方式
  最近有個(gè)需求是要采集微信公眾號文章,于是研究了下。發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)侯,有個(gè)太難受的地方就是搜狗會(huì )直接的把你的ip給封了,要輸入驗證碼。這一個(gè)步驟暫時(shí)不知道如何破解,我們這兒只是看php怎么采集微信公眾號文章內容的方式,至于列表地址的獲取,后面在進(jìn)行研究。在寫(xiě)之前我搜索到用php寫(xiě)的爬蟲(chóng)程序有phpQuery,phpspider,QueryList(phpQuery的改進(jìn)版)這三個(gè)??赡懿恢?,這里只是我找到的。先記錄,后面在研究。下面是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),有
  最近有個(gè)需求是要采集微信公眾號文章,于是研究了下。發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)侯,有個(gè)太難受的地方就是搜狗會(huì )直接的把你的ip給封了,要輸入驗證碼。這一個(gè)步驟暫時(shí)不知道如何破解,我們這兒只是看php怎么采集微信公眾號文章內容的方式,至于列表地址的獲取,后面在進(jìn)行研究。
  在寫(xiě)之前我搜索到用php寫(xiě)的爬蟲(chóng)程序有phpQuery,phpspider,QueryList(phpQuery的改進(jìn)版)這三個(gè)??赡懿恢?,這里只是我找到的。先記錄,后面在研究。
  下面是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),有待進(jìn)一步建立。
  /**
?*?Created?by?PhpStorm.
?*?User:?Administrator
?*?Date:?2017/2/6
?*?Time:?10:54
?*?author:?gm
?*?微信公眾號文章采集類(lèi)
?*/
class?DownWxArticle?{
private???$mpwxurl?=?&#39;http://mp.weixin.qq.com&#39;;
private???$wxgzherr=?&#39;公眾號二維碼下載失敗=>&#39;;
private???$wximgerr=?&#39;圖片下載失敗=>&#39;;
private???$direrr??=?&#39;文件夾創(chuàng )建失??!&#39;;
private???$fileerr?=?&#39;資源不存在!&#39;;
private???$dirurl??=?&#39;&#39;;
????/*?抓取微信公眾號文章
?*?$qcode????boolean?公眾號二維碼?false=>不下載?true=>下載
?*?return
?*?$content??string??內容
?*?$tile?????string??標題
?*?$time?????int?????時(shí)間戳
?*?$wxggh????string??微信公眾號
?*?$wxh??????string??微信號
?*?$qcode????string??公眾號二維碼
?*?$tag??????string??標簽?原創(chuàng )
?*/
????function?get_file_article($url,$dir=&#39;&#39;,$qcode=false)
????{
$this->dirurl?=?$dir?:&#39;/Uploads/&#39;.date(&#39;Ymd&#39;,time());
????????if(!$this->put_dir($this->dirurl)){
exit(json_encode(array(&#39;msg&#39;=>$this->direrr,&#39;code&#39;=>500)));
}
????????$file?=?file_get_contents($url);
????????if(!$file){
$this->put_error_log($this->dirurl,$this->fileerr);
????????????exit(json_encode(array(&#39;msg&#39;=>$this->fileerr,&#39;code&#39;=>500)));
????????}
????????//?內容主體
????????preg_match(&#39;/[\s\S]*?/&#39;,$file,$content);
????????//?標題
????????preg_match(&#39;/(.*?)/&#39;,$file,$title);
????????$title?=?$title?$title[1]:&#39;&#39;;
????????//?時(shí)間
????????preg_match(&#39;/(.*?)/&#39;,$file,$time);
????????$time?=?$time?strtotime($time[1]):&#39;&#39;;
????????//?公眾號
????????preg_match(&#39;/(.*?)/&#39;,$file,$wxgzh);
????????$wxgzh?=?$wxgzh?$wxgzh[1]:&#39;&#39;;
????????//?微信號
????????preg_match(&#39;/([\s\S]*?)/&#39;,$file,$wxh);
????????$wxh???=?$wxh?$wxh[1]:&#39;&#39;;
????????//?公眾號二維碼
????????if($qcode){
????????????preg_match(&#39;/window.sg_qr_code="(.*?)";/&#39;,$file,$qcode);
????????????$qcodeurl?=?str_replace(&#39;\x26amp;&#39;,&#39;&&#39;,$this->mpwxurl.$qcode[1]);
????????????$qcode?=?$this->put_file_img($this->dirurl,$qcodeurl);
????????????if(!$qcode){
????????????????$this->put_error_log($this->dirurl,$this->wxgzherr.$qcodeurl);
????????????}
????????}
????????//?獲取標簽
????????preg_match(&#39;/(.*?)/&#39;,$file,$tag);
????????$tag?=?$tag?$tag[1]:&#39;&#39;;
????????//?圖片
????????preg_match_all(&#39;//&#39;,$content[0],$images);
????????//?儲存原地址和下載后地址
????????$old?=?array();
????????$new?=?array();
????????//?去除重復圖片地址
????????$images?=?array_unique($images[1]);
????????if($images){
????????????foreach($images?as?$v){
????????????????$filename?=?$this->put_file_img($this->dirurl,$v);
????????????????if($filename){
????????????????????//?圖片保存成功?替換地址
????????????????????$old[]?=?$v;
????????????????????$new[]?=?$filename;
????????????????}else{
????????????????????//?失敗記錄日志
????????????????????$this->put_error_log($this->dirurl,$this->wximgerr.$v);
????????????????}
????????????}
????????????$old[]?=?&#39;data-src&#39;;
????????????$new[]?=?&#39;src&#39;;
????????????$content?=?str_replace($old,$new,$content[0]);
????????}
???????//?替換音頻
???????$content?=?str_replace("preview.html","player.html",$content);?
???????//?獲取閱讀點(diǎn)贊評論等信息
???????$comment?=?$this->get_comment_article($url);
$data?=?array(&#39;content&#39;=>$content,&#39;title&#39;=>$title,&#39;time&#39;=>$time,&#39;wxgzh&#39;=>$wxgzh,&#39;wxh&#39;=>$wxh,&#39;qcode&#39;=>$qcode?:&#39;&#39;,&#39;tag&#39;=>$tag?:&#39;&#39;,&#39;comment&#39;=>$comment);
????????return?json_encode(array(&#39;data&#39;=>$data,&#39;code&#39;=>200,&#39;msg&#39;=>&#39;ok&#39;));
????}
????/*?抓取保存圖片函數
?????*?return
?????*?$filename??string??圖片地址
?????*/
????function?put_file_img($dir=&#39;&#39;,$image=&#39;&#39;)
????{
????????//?判斷圖片的保存類(lèi)型?截取后四位地址
????????$exts?=?array(&#39;jpeg&#39;,&#39;png&#39;,&#39;jpg&#39;);
????????$filename?=?$dir.&#39;/&#39;.uniqid().time().rand(10000,99999);
????????$ext?=?substr($image,-5);
????????$ext?=?explode(&#39;=&#39;,$ext);
????????if(in_array($ext[1],$exts)?!==?false){
????????????$filename?.=?&#39;.&#39;.$ext[1];
????????}else{
????????????$filename?.=?&#39;.gif&#39;;
????????}
????????$souce?=?file_get_contents($image);
????????if(file_put_contents($filename,$souce)){
????????????return?$filename;
????????}else{
????????????return?false;
????????}
????}
????/*?獲取微信公眾號文章的【點(diǎn)贊】【閱讀】【評論】
?????*?方法:將地址中的部分參數替換即可。
?????*?????1、s??????替換為?mp/getcomment?
?????*?????2、最后=??替換為?%3D
?????*?return
?????*?read_num??閱讀數
?????*?like_num??點(diǎn)贊數
?????*?comment???評論詳情
?????*/
????function?get_comment_article($url=&#39;&#39;)
????{
????????$url?=?substr($url,0,-1);
????????$url?=?str_replace(&#39;/s&#39;,&#39;/mp/getcomment&#39;,$url).&#39;%3D&#39;;
????????return?file_get_contents($url);
????}
????/*?錯誤日志記錄
?????*?$dir??string??文件路徑
?????*?$data?string??寫(xiě)入內容
?????*/
????function?put_error_log($dir,$data)
????{
????????file_put_contents($dir.&#39;/error.log&#39;,date(&#39;Y-m-d?H:i:s&#39;,time()).$data.PHP_EOL,FILE_APPEND);
????}
????/*?創(chuàng )建文件夾
?????*?$dir?string?文件夾路徑
?????*/
????function?put_dir($dir=&#39;&#39;){
$bool?=?true;
????????if(!is_dir($dir)){
????????????if(!mkdir($dir,777,TRUE)){
$bool?=?false;
????????????????$this->put_error_log($dir,$this->direrr.$dir);
????????????}
????????}
return?$bool;
????}
}
  使用方式:

分享文章:通過(guò)微信公眾平臺獲取公眾號文章的方法示例

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

  如何通過(guò)微信公眾平臺獲取官方帳戶(hù)文章的示例
  我以前自己維護過(guò)一個(gè)官方帳戶(hù),但是由于我的個(gè)人關(guān)系很長(cháng)時(shí)間沒(méi)有更新,所以我今天起身去記住它,但是偶然發(fā)現了一種獲取微信官方帳戶(hù)的方法文章。
  以前有很多方法可以獲取它,并且可以通過(guò)搜狗,青博,網(wǎng)絡(luò ),客戶(hù)端等來(lái)獲取。這可能并不出色,但是操作簡(jiǎn)單易懂。
  因此,首先您需要擁有一個(gè)微信公眾平臺帳戶(hù)
  微信公眾平臺:
  
  登錄后,轉到主頁(yè),然后單擊“新建論壇帖子”。
  
  選擇自己創(chuàng )建的圖形:
  
  似乎是官方帳戶(hù)操作教學(xué)
  進(jìn)入編輯頁(yè)面后,單擊超鏈接
  
  彈出一個(gè)選擇框,我們在框中輸入相應的正式帳戶(hù)名稱(chēng),并出現相應的文章列表
  
  您感到驚訝嗎?您可以打開(kāi)控制臺以檢查請求的界面
  
  打開(kāi)響應,我們需要文章鏈接
  
  確認數據后,我們需要分析此界面。
  感覺(jué)很簡(jiǎn)單。 GET請求帶有一些參數。
  
  Fakeid是官方帳戶(hù)的唯一ID,因此,如果您想直接通過(guò)名稱(chēng)獲取文章列表,則還需要先獲取偽造品。
  輸入官方帳戶(hù)名后,單擊“搜索”。您會(huì )看到搜索界面已觸發(fā),并返回了假冒的商品。
  
  此界面不需要很多參數。
  
  接下來(lái),我們可以使用代碼來(lái)模擬上述操作。
  但是您還需要使用現有的cookie以避免登錄。
  
  我尚未測試當前cookie的有效期。 Cookies可能需要及時(shí)更新。
  測試代碼:
  
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篇文章文章。如果要獲取更多歷史記錄文章,則可以修改數據中的“開(kāi)始”參數,0是第一頁(yè),5是第二頁(yè),10是第三頁(yè)(依此類(lèi)推)
  但是,如果您想進(jìn)行大規模爬網(wǎng):
  請為自己和履帶的速度安排一個(gè)穩定的代理人,并為可能被阻止的情況準備多個(gè)帳戶(hù)。
  以上是本文的全部?jì)热?,希望對大家的學(xué)習有所幫助,希望大家都支持Ian。 查看全部

  如何通過(guò)微信公眾平臺獲取官方帳戶(hù)文章的示例
  我以前自己維護過(guò)一個(gè)官方帳戶(hù),但是由于我的個(gè)人關(guān)系很長(cháng)時(shí)間沒(méi)有更新,所以我今天起身去記住它,但是偶然發(fā)現了一種獲取微信官方帳戶(hù)的方法文章。
  以前有很多方法可以獲取它,并且可以通過(guò)搜狗,青博,網(wǎng)絡(luò ),客戶(hù)端等來(lái)獲取。這可能并不出色,但是操作簡(jiǎn)單易懂。
  因此,首先您需要擁有一個(gè)微信公眾平臺帳戶(hù)
  微信公眾平臺:
  
  登錄后,轉到主頁(yè),然后單擊“新建論壇帖子”。
  
  選擇自己創(chuàng )建的圖形:
  
  似乎是官方帳戶(hù)操作教學(xué)
  進(jìn)入編輯頁(yè)面后,單擊超鏈接
  
  彈出一個(gè)選擇框,我們在框中輸入相應的正式帳戶(hù)名稱(chēng),并出現相應的文章列表
  
  您感到驚訝嗎?您可以打開(kāi)控制臺以檢查請求的界面
  
  打開(kāi)響應,我們需要文章鏈接
  
  確認數據后,我們需要分析此界面。
  感覺(jué)很簡(jiǎn)單。 GET請求帶有一些參數。
  
  Fakeid是官方帳戶(hù)的唯一ID,因此,如果您想直接通過(guò)名稱(chēng)獲取文章列表,則還需要先獲取偽造品。
  輸入官方帳戶(hù)名后,單擊“搜索”。您會(huì )看到搜索界面已觸發(fā),并返回了假冒的商品。
  
  此界面不需要很多參數。
  
  接下來(lái),我們可以使用代碼來(lái)模擬上述操作。
  但是您還需要使用現有的cookie以避免登錄。
  
  我尚未測試當前cookie的有效期。 Cookies可能需要及時(shí)更新。
  測試代碼:
  
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篇文章文章。如果要獲取更多歷史記錄文章,則可以修改數據中的“開(kāi)始”參數,0是第一頁(yè),5是第二頁(yè),10是第三頁(yè)(依此類(lèi)推)
  但是,如果您想進(jìn)行大規模爬網(wǎng):
  請為自己和履帶的速度安排一個(gè)穩定的代理人,并為可能被阻止的情況準備多個(gè)帳戶(hù)。
  以上是本文的全部?jì)热?,希望對大家的學(xué)習有所幫助,希望大家都支持Ian。

分享方法:爬蟲(chóng)如何爬取微信公眾號文章

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

  爬蟲(chóng)如何抓取微信公眾號文章
  第二部分文章:python爬蟲(chóng)如何抓取微信官方帳戶(hù)文章(二)
  下一篇文章是如何連接python爬蟲(chóng)以實(shí)現每天抓取微信公眾號的推送文章
  由于我最近在法庭上執業(yè),因此我需要一些官方帳戶(hù)數據,然后將其放入網(wǎng)頁(yè)中以進(jìn)行顯示以便于查看。我之前寫(xiě)過(guò)一些爬蟲(chóng),但是它們都對網(wǎng)站數據進(jìn)行爬蟲(chóng)。這次我認為這很容易,但是遇到了很多麻煩,在這里與您分享。
  1、使用采集器搜尋數據的最基本也是最重要的事情是找到目標網(wǎng)站的url地址,然后遍歷該地址以一個(gè)或多個(gè)線(xiàn)程對其進(jìn)行搜尋。通常,后續的爬網(wǎng)地址主要是通過(guò)兩種方式獲得的,一種是基于頁(yè)面分頁(yè)來(lái)計算URL地址的規律,通常后跟參數page = num,另一種是過(guò)濾出當前地址的標簽。頁(yè)面,然后將該URL作為后續的抓取地址。不幸的是,這兩種方法都不能在微信公眾號中使用,因為官方帳號的文章地址之間沒(méi)有關(guān)聯(lián),并且不可能通過(guò)一個(gè)文章地址找到所有文章地址
  2、那么我們如何獲得官方帳戶(hù)的歷史文章地址?一種方法是通過(guò)搜狗微信網(wǎng)站搜索目標官方帳戶(hù),您可以看到最新的文章文章,但這僅僅是最新的一篇無(wú)法獲取歷史記錄文章。如果要每天進(jìn)行爬網(wǎng),則可以使用此方法每天進(jìn)行爬網(wǎng)。圖片是這樣的:
  
  3、當然,我們需要很多結果,因此我們仍然必須找到一種方法來(lái)獲取所有歷史文本,少說(shuō)廢話(huà),然后直達主題:
<p>4、找到歷史記錄文章后,我們如何編寫(xiě)程序以獲取所有URL地址? ,首先讓我們分析一下瀏覽器在單擊官方帳戶(hù)名,調出檢查頁(yè)面,單擊網(wǎng)絡(luò ),首先清除所有數據,然后單擊目標官方帳戶(hù)時(shí)的行為,您可以看到以下界面: 查看全部

  爬蟲(chóng)如何抓取微信公眾號文章
  第二部分文章:python爬蟲(chóng)如何抓取微信官方帳戶(hù)文章(二)
  下一篇文章是如何連接python爬蟲(chóng)以實(shí)現每天抓取微信公眾號的推送文章
  由于我最近在法庭上執業(yè),因此我需要一些官方帳戶(hù)數據,然后將其放入網(wǎng)頁(yè)中以進(jìn)行顯示以便于查看。我之前寫(xiě)過(guò)一些爬蟲(chóng),但是它們都對網(wǎng)站數據進(jìn)行爬蟲(chóng)。這次我認為這很容易,但是遇到了很多麻煩,在這里與您分享。
  1、使用采集器搜尋數據的最基本也是最重要的事情是找到目標網(wǎng)站的url地址,然后遍歷該地址以一個(gè)或多個(gè)線(xiàn)程對其進(jìn)行搜尋。通常,后續的爬網(wǎng)地址主要是通過(guò)兩種方式獲得的,一種是基于頁(yè)面分頁(yè)來(lái)計算URL地址的規律,通常后跟參數page = num,另一種是過(guò)濾出當前地址的標簽。頁(yè)面,然后將該URL作為后續的抓取地址。不幸的是,這兩種方法都不能在微信公眾號中使用,因為官方帳號的文章地址之間沒(méi)有關(guān)聯(lián),并且不可能通過(guò)一個(gè)文章地址找到所有文章地址
  2、那么我們如何獲得官方帳戶(hù)的歷史文章地址?一種方法是通過(guò)搜狗微信網(wǎng)站搜索目標官方帳戶(hù),您可以看到最新的文章文章,但這僅僅是最新的一篇無(wú)法獲取歷史記錄文章。如果要每天進(jìn)行爬網(wǎng),則可以使用此方法每天進(jìn)行爬網(wǎng)。圖片是這樣的:
  
  3、當然,我們需要很多結果,因此我們仍然必須找到一種方法來(lái)獲取所有歷史文本,少說(shuō)廢話(huà),然后直達主題:
<p>4、找到歷史記錄文章后,我們如何編寫(xiě)程序以獲取所有URL地址? ,首先讓我們分析一下瀏覽器在單擊官方帳戶(hù)名,調出檢查頁(yè)面,單擊網(wǎng)絡(luò ),首先清除所有數據,然后單擊目標官方帳戶(hù)時(shí)的行為,您可以看到以下界面:

解密:python批量爬取公眾號文章

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

  Python批量抓取公共帳戶(hù)文章
  轉載:
  Python檢索官方帳戶(hù)文章
  
  PS:如果您需要Python學(xué)習資料,可以單擊下面的鏈接自行獲得/ A6Zvjdun
  有多種爬網(wǎng)方式。今天,我將與您分享一個(gè)更簡(jiǎn)單的方法,即通過(guò)微信公眾號背景的“超鏈接”功能進(jìn)行爬網(wǎng)。也許有些朋友沒(méi)有聯(lián)系到微信公眾號的后臺,這是一張供大家理解的圖片
  
  這里的一些朋友可能會(huì )說(shuō),我無(wú)法登錄到正式帳戶(hù),該怎么辦? ? ?
  沒(méi)關(guān)系,盡管每個(gè)爬蟲(chóng)的目的都是為了獲得我們想要的結果,但這并不是我們學(xué)習的重點(diǎn)。我們學(xué)習的重點(diǎn)在于抓取過(guò)程,如何獲取目標數據,因此我們無(wú)法登錄到公眾文章閱讀此內容文章之后,后臺的朋友可能無(wú)法獲得最終的抓取結果,但閱讀此文章后,您也會(huì )有所收獲。
  一、初步準備
  選擇要爬網(wǎng)的目標官方帳戶(hù)
  單擊超鏈接-進(jìn)入編輯超鏈接界面-進(jìn)入我們需要抓取的搜索目標官方帳戶(hù)
  今天我們將以“數據分析”官方帳戶(hù)的抓取為例,供大家介紹
  
  單擊官方帳戶(hù)以查看每個(gè)文章對應的標題信息
  
  這次抓取工具的目標是獲得文章標題和相應的鏈接。
  二、開(kāi)始抓取
  爬行的三個(gè)步驟:
  1、請求頁(yè)面
  首先導入我們需要使用此采集器的第三方庫
  import re#用來(lái)解析網(wǎng)頁(yè)
import requests#用來(lái)請求網(wǎng)頁(yè)
import csv#用來(lái)保存數據
import time#用來(lái)設置每次爬取間隔的時(shí)間
  找到我們抓取的目標數據的位置,單擊通過(guò)搜索獲得的包,然后獲取目標URL和請求標頭信息
  
  請求網(wǎng)頁(yè)
  headers={
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36&#39;,
&#39;cookie&#39;: &#39;pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15&#39;
}#請求頭信息,這里cookie信息必須添加,否則得不到網(wǎng)頁(yè)信息
url=&#39;https://mp.weixin.qq.com/cgi-b ... 39%3B
response=requests.get(url,headers=headers)#得到響應內容
response.encoding=&#39;utf-8&#39;#設置響應內容為utf-8格式
html=response.text#得到網(wǎng)頁(yè)的文本形式
print(html)
  此處的請求標頭信息必須添加cookie信息,否則無(wú)法獲取網(wǎng)頁(yè)信息
  網(wǎng)頁(yè)的請求結果如下圖所示。紅色框標記了我們需要的文章標題和文章鏈接。
  
  2、分析網(wǎng)頁(yè)
  從網(wǎng)頁(yè)響應結果中我們可以看到,每個(gè)文章的標題和鏈接都位于“ title”標簽和“ cover”標簽的后面,因此我們可以使用正則表達式直接對其進(jìn)行解析
  title=re.findall(&#39;"title":"(.*?)"&#39;,html)#得到文章標題
cover=re.findall(&#39;"cover":"(.*?)"&#39;,html)#得到文章鏈接
all=zip(title,cover)#利用zip方法,將兩個(gè)列表中的數據一一對應
print(list(all))#list是對zip方法得到的數據進(jìn)行解壓
  解析后的結果如下
  
  3、保存數據
  for data in all:#for循環(huán)遍歷列表
time.sleep(3)#每爬取一篇文章間隔3秒,以防觸發(fā)反爬
with open(&#39;C:\\Users\\Administrator\\Desktop\\爬取公眾號文章.csv&#39;,&#39;a&#39;,encoding=&#39;utf-8-sig&#39;) as file:
#將數據保存到桌面
write=csv.writer(file)
write.writerow(data)
  到目前為止,該抓取工具已經(jīng)完成,讓我們看一下最終結果
  
  完整代碼 查看全部

  Python批量抓取公共帳戶(hù)文章
  轉載:
  Python檢索官方帳戶(hù)文章
  
  PS:如果您需要Python學(xué)習資料,可以單擊下面的鏈接自行獲得/ A6Zvjdun
  有多種爬網(wǎng)方式。今天,我將與您分享一個(gè)更簡(jiǎn)單的方法,即通過(guò)微信公眾號背景的“超鏈接”功能進(jìn)行爬網(wǎng)。也許有些朋友沒(méi)有聯(lián)系到微信公眾號的后臺,這是一張供大家理解的圖片
  
  這里的一些朋友可能會(huì )說(shuō),我無(wú)法登錄到正式帳戶(hù),該怎么辦? ? ?
  沒(méi)關(guān)系,盡管每個(gè)爬蟲(chóng)的目的都是為了獲得我們想要的結果,但這并不是我們學(xué)習的重點(diǎn)。我們學(xué)習的重點(diǎn)在于抓取過(guò)程,如何獲取目標數據,因此我們無(wú)法登錄到公眾文章閱讀此內容文章之后,后臺的朋友可能無(wú)法獲得最終的抓取結果,但閱讀此文章后,您也會(huì )有所收獲。
  一、初步準備
  選擇要爬網(wǎng)的目標官方帳戶(hù)
  單擊超鏈接-進(jìn)入編輯超鏈接界面-進(jìn)入我們需要抓取的搜索目標官方帳戶(hù)
  今天我們將以“數據分析”官方帳戶(hù)的抓取為例,供大家介紹
  
  單擊官方帳戶(hù)以查看每個(gè)文章對應的標題信息
  
  這次抓取工具的目標是獲得文章標題和相應的鏈接。
  二、開(kāi)始抓取
  爬行的三個(gè)步驟:
  1、請求頁(yè)面
  首先導入我們需要使用此采集器的第三方庫
  import re#用來(lái)解析網(wǎng)頁(yè)
import requests#用來(lái)請求網(wǎng)頁(yè)
import csv#用來(lái)保存數據
import time#用來(lái)設置每次爬取間隔的時(shí)間
  找到我們抓取的目標數據的位置,單擊通過(guò)搜索獲得的包,然后獲取目標URL和請求標頭信息
  
  請求網(wǎng)頁(yè)
  headers={
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36&#39;,
&#39;cookie&#39;: &#39;pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15&#39;
}#請求頭信息,這里cookie信息必須添加,否則得不到網(wǎng)頁(yè)信息
url=&#39;https://mp.weixin.qq.com/cgi-b ... 39%3B
response=requests.get(url,headers=headers)#得到響應內容
response.encoding=&#39;utf-8&#39;#設置響應內容為utf-8格式
html=response.text#得到網(wǎng)頁(yè)的文本形式
print(html)
  此處的請求標頭信息必須添加cookie信息,否則無(wú)法獲取網(wǎng)頁(yè)信息
  網(wǎng)頁(yè)的請求結果如下圖所示。紅色框標記了我們需要的文章標題和文章鏈接。
  
  2、分析網(wǎng)頁(yè)
  從網(wǎng)頁(yè)響應結果中我們可以看到,每個(gè)文章的標題和鏈接都位于“ title”標簽和“ cover”標簽的后面,因此我們可以使用正則表達式直接對其進(jìn)行解析
  title=re.findall(&#39;"title":"(.*?)"&#39;,html)#得到文章標題
cover=re.findall(&#39;"cover":"(.*?)"&#39;,html)#得到文章鏈接
all=zip(title,cover)#利用zip方法,將兩個(gè)列表中的數據一一對應
print(list(all))#list是對zip方法得到的數據進(jìn)行解壓
  解析后的結果如下
  
  3、保存數據
  for data in all:#for循環(huán)遍歷列表
time.sleep(3)#每爬取一篇文章間隔3秒,以防觸發(fā)反爬
with open(&#39;C:\\Users\\Administrator\\Desktop\\爬取公眾號文章.csv&#39;,&#39;a&#39;,encoding=&#39;utf-8-sig&#39;) as file:
#將數據保存到桌面
write=csv.writer(file)
write.writerow(data)
  到目前為止,該抓取工具已經(jīng)完成,讓我們看一下最終結果
  
  完整代碼

免費獲?。何⑿殴娞柵颗廊ava版

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

  微信公眾號批量抓取Java版本
  最近,我們需要抓取微信公眾號的文章信息。我在互聯(lián)網(wǎng)上搜索后發(fā)現,抓取微信官方賬號的困難在于無(wú)法在PC端打開(kāi)官方賬號文章的鏈接。您需要使用WeChat的瀏覽器(獲取WeChat客戶(hù)端的補充參數才能訪(fǎng)問(wèn)其他平臺上的Open),這會(huì )給爬蟲(chóng)程序帶來(lái)很多麻煩。后來(lái),在知乎上,我看到了由一頭大牛用PHP編寫(xiě)的微信官方帳戶(hù)爬網(wǎng)程序,并且根據大佬的想法將其直接制成Java。在轉換過(guò)程中遇到了很多詳細的問(wèn)題,因此請與大家分享。
  系統的基本思想是在A(yíng)ndroid模擬器上運行微信,模擬器設置代理,通過(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,它將被安裝
  互聯(lián)網(wǎng)上只有一個(gè)Android模擬器。
  首先為代理服務(wù)器安裝證書(shū)。默認情況下,Anyproxy不會(huì )解析https鏈接。安裝證書(shū)后,可以解決它。在cmd中執行anyproxy --root將安裝證書(shū),然后必須在模擬器上下載證書(shū)。
  然后輸入anyproxy -i命令打開(kāi)代理服務(wù)。 (請記住要添加參數?。?br />   
  記住該IP和端口,然后Android仿真器的代理將使用此IP和端口?,F在,使用瀏覽器打開(kāi)網(wǎng)頁(yè):: 8002 /這是anyproxy的網(wǎng)絡(luò )界面,用于顯示http傳輸數據。
  
  單擊上方紅色框中的菜單,將顯示QR碼。使用Android模擬器掃描代碼以進(jìn)行識別。仿真器(手機)將下載證書(shū)并安裝。
  現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip是運行anyproxy的計算機的ip,端口為8001
  
  準備工作到此基本完成。在模擬器上打開(kāi)微信并開(kāi)設一個(gè)官方帳戶(hù)文章。您可以從剛打開(kāi)的Web界面中查看anyproxy捕獲的數據:
  
  在上方的紅色框中是微信文章的鏈接,單擊進(jìn)入以查看特定數據。如果響應正文中沒(méi)有任何內容,則證書(shū)安裝可能存在問(wèn)題。
  如果一切都通過(guò)以上,則可以下去。
  在這里,我們依靠代理服務(wù)來(lái)捕獲微信數據,但是我們無(wú)法捕獲數據,而只能自己操作微信。最好手動(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
  文件中有一種稱(chēng)為replaceServerResDataAsync的方法:function(req,res,serverResData,callback)。此方法負責對anyproxy獲得的數據進(jìn)行各種操作。開(kāi)頭應該只有callback(serverResData);此語(yǔ)句意味著(zhù)直接將服務(wù)器響應數據返回給客戶(hù)端。直接刪除此語(yǔ)句,并將其替換為Daniel編寫(xiě)的以下代碼。我在這里沒(méi)有對代碼做任何更改,并且內部的注釋也很清楚地解釋了,只需按照邏輯來(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() !== ""){
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('http');
11 http.get('http://xxx/getWxHis', function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on('data', 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 = \'(.*?)\';/;//定義歷史消息正則匹配規則(和第一種頁(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('http');
36 http.get('xxx/getWxHis', function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on('data', 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('http');
65 http.get('http://xxx/getWxPost', function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on('data', 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)短的解釋。鏈接到微信官方帳戶(hù)歷史新聞頁(yè)面的鏈接有兩種形式:一種以/ mp / getmasssendmsg開(kāi)頭,另一種以/ mp / profile_ext開(kāi)頭。歷史記錄頁(yè)面可以關(guān)閉。如果將其關(guān)閉,則會(huì )觸發(fā)js事件,以發(fā)送請求以獲取json數據(下一頁(yè)內容)。也有指向官方帳戶(hù)文章的鏈接,也有指向文章的閱讀次數和喜歡次數的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷加以區分。這里的問(wèn)題是,如果需要對所有歷史頁(yè)面進(jìn)行爬網(wǎng),該怎么做。我的想法是模擬鼠標在js中向下滑動(dòng),以觸發(fā)提交請求以加載列表的下一部分?;蛘咧苯邮褂胊nyproxy分析滑動(dòng)加載請求,并將請求直接發(fā)送至微信服務(wù)器。但是,如何判斷沒(méi)有剩余數據始終存在問(wèn)題。我正在搜尋最新數據。我暫時(shí)沒(méi)有這個(gè)要求。以后可能需要。如果需要,可以嘗試一下。 查看全部

  微信公眾號批量抓取Java版本
  最近,我們需要抓取微信公眾號的文章信息。我在互聯(lián)網(wǎng)上搜索后發(fā)現,抓取微信官方賬號的困難在于無(wú)法在PC端打開(kāi)官方賬號文章的鏈接。您需要使用WeChat的瀏覽器(獲取WeChat客戶(hù)端的補充參數才能訪(fǎng)問(wèn)其他平臺上的Open),這會(huì )給爬蟲(chóng)程序帶來(lái)很多麻煩。后來(lái),在知乎上,我看到了由一頭大牛用PHP編寫(xiě)的微信官方帳戶(hù)爬網(wǎng)程序,并且根據大佬的想法將其直接制成Java。在轉換過(guò)程中遇到了很多詳細的問(wèn)題,因此請與大家分享。
  系統的基本思想是在A(yíng)ndroid模擬器上運行微信,模擬器設置代理,通過(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,它將被安裝
  互聯(lián)網(wǎng)上只有一個(gè)Android模擬器。
  首先為代理服務(wù)器安裝證書(shū)。默認情況下,Anyproxy不會(huì )解析https鏈接。安裝證書(shū)后,可以解決它。在cmd中執行anyproxy --root將安裝證書(shū),然后必須在模擬器上下載證書(shū)。
  然后輸入anyproxy -i命令打開(kāi)代理服務(wù)。 (請記住要添加參數?。?br />   
  記住該IP和端口,然后Android仿真器的代理將使用此IP和端口?,F在,使用瀏覽器打開(kāi)網(wǎng)頁(yè):: 8002 /這是anyproxy的網(wǎng)絡(luò )界面,用于顯示http傳輸數據。
  
  單擊上方紅色框中的菜單,將顯示QR碼。使用Android模擬器掃描代碼以進(jìn)行識別。仿真器(手機)將下載證書(shū)并安裝。
  現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip是運行anyproxy的計算機的ip,端口為8001
  
  準備工作到此基本完成。在模擬器上打開(kāi)微信并開(kāi)設一個(gè)官方帳戶(hù)文章。您可以從剛打開(kāi)的Web界面中查看anyproxy捕獲的數據:
  
  在上方的紅色框中是微信文章的鏈接,單擊進(jìn)入以查看特定數據。如果響應正文中沒(méi)有任何內容,則證書(shū)安裝可能存在問(wèn)題。
  如果一切都通過(guò)以上,則可以下去。
  在這里,我們依靠代理服務(wù)來(lái)捕獲微信數據,但是我們無(wú)法捕獲數據,而只能自己操作微信。最好手動(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
  文件中有一種稱(chēng)為replaceServerResDataAsync的方法:function(req,res,serverResData,callback)。此方法負責對anyproxy獲得的數據進(jìn)行各種操作。開(kāi)頭應該只有callback(serverResData);此語(yǔ)句意味著(zhù)直接將服務(wù)器響應數據返回給客戶(hù)端。直接刪除此語(yǔ)句,并將其替換為Daniel編寫(xiě)的以下代碼。我在這里沒(méi)有對代碼做任何更改,并且內部的注釋也很清楚地解釋了,只需按照邏輯來(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() !== ""){
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('http');
11 http.get('http://xxx/getWxHis', function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on('data', 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 = \'(.*?)\';/;//定義歷史消息正則匹配規則(和第一種頁(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('http');
36 http.get('xxx/getWxHis', function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on('data', 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('http');
65 http.get('http://xxx/getWxPost', function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on('data', 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)短的解釋。鏈接到微信官方帳戶(hù)歷史新聞頁(yè)面的鏈接有兩種形式:一種以/ mp / getmasssendmsg開(kāi)頭,另一種以/ mp / profile_ext開(kāi)頭。歷史記錄頁(yè)面可以關(guān)閉。如果將其關(guān)閉,則會(huì )觸發(fā)js事件,以發(fā)送請求以獲取json數據(下一頁(yè)內容)。也有指向官方帳戶(hù)文章的鏈接,也有指向文章的閱讀次數和喜歡次數的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷加以區分。這里的問(wèn)題是,如果需要對所有歷史頁(yè)面進(jìn)行爬網(wǎng),該怎么做。我的想法是模擬鼠標在js中向下滑動(dòng),以觸發(fā)提交請求以加載列表的下一部分?;蛘咧苯邮褂胊nyproxy分析滑動(dòng)加載請求,并將請求直接發(fā)送至微信服務(wù)器。但是,如何判斷沒(méi)有剩余數據始終存在問(wèn)題。我正在搜尋最新數據。我暫時(shí)沒(méi)有這個(gè)要求。以后可能需要。如果需要,可以嘗試一下。

內容分享:微信公眾號文章爬取實(shí)戰

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

  微信公眾號文章抓實(shí)戰
  在之前的爬蟲(chóng)實(shí)戰中,我們基于關(guān)鍵詞搜索了相關(guān)的微信公眾號文章,并獲得了一系列相關(guān)的文章標題,鏈接等。找到文章后,我們需要保存,此實(shí)驗的目的是抓取微信公眾號文章文本內容。
  實(shí)驗環(huán)境
  python3
  主要使用的請求pyquery庫
  步驟分析
  本文使用CSDN公共帳戶(hù)的Python來(lái)抓取北京二手房數據,以分析北票人是否負擔得起房屋? 隨附完整的源代碼作為示例,
  在請求此頁(yè)面后,我們獲得文章標題,作者,官方帳戶(hù)信息和文章文本信息。由于我們要顯示文章的內容,因此為了確保文章文本的格式不變,我們提取html格式,最后將所有提取的內容合并為html格式,并通過(guò)瀏覽器保持文章的原創(chuàng )格式。
  應注意,文章中的所有圖片均來(lái)自互聯(lián)網(wǎng)。這些圖片無(wú)法通過(guò)打開(kāi)本地html進(jìn)行解析,因此我們提取了圖片鏈接,然后將其下載并保存到本地,并且html中的圖片鏈接替換了本地位置。
  在實(shí)驗過(guò)程中確定文章標題
  文章標題位于以下位置:
  
  1<br />2<br />
  <br />title = doc.find(&#39;.rich_media_title&#39;).text()<br />
  確認官方帳戶(hù)信息
  作者信息,官方帳戶(hù)的來(lái)源,微信帳戶(hù)以及官方帳戶(hù)的介紹都可以通過(guò)pyquery提?。?br />   
  1<br />2<br />3<br />4<br />
  # 微信公眾號<br />author = doc.find(&#39;#meta_content .rich_media_meta_text&#39;).text()<br />source = doc.find(&#39;#js_name&#39;).text()<br />source_info = doc.find(&#39;.profile_meta_value&#39;).text()<br />
  確認文章的內容
  文章的正文內容無(wú)法通過(guò)text()提取,因為提取的內容只是文本部分,而且缺少格式,因此顯示起來(lái)非常難看,因此我們使用html()保留身體部位的html元素:
  
  1<br />2<br />
  # 正文內容<br />content = doc.find(&#39;.rich_media_content&#39;)<br />
  提取所有圖像鏈接
  所有圖像鏈接都在img元素的data-src屬性中:
  
  1<br />2<br />3<br />4<br />5<br />6<br />
  # 所有圖片鏈接<br />pics_src = content.find(&#39;img&#39;).items()<br />for each in pics_src:<br /> if &#39;=&#39; in each.attr(&#39;data-src&#39;):<br /> pic.append(each.attr(&#39;data-src&#39;))<br />#print(pic)<br />
  下載圖片
  下載文章中的所有圖片并將其保存在本地文件中
  1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />
  def (title,url):<br /> print(url)<br /> pic_name = url.split(&#39;/&#39;)[4]<br /> pic_type = url.split(&#39;=&#39;)[1]<br /> response = requests.get(url,headers=random.choice(headers))<br /> try:<br /> if response.status_code == 200:<br /> file_dir = "{0}/{1}".format(os.getcwd(), title)<br /> if not os.path.isdir(file_dir):<br /> os.mkdir(file_dir)<br /> path = os.path.join(file_dir,pic_name+&#39;.&#39;+pic_type)<br /> if not os.path.exists(path):<br /> with open(path,&#39;wb&#39;) as f:<br /> f.write(response.content)<br /> except:<br /> pass<br />
  替換圖片
  將文本鏈接中的圖像鏈接替換為本地圖像的鏈接,但要注意,我們需要在img元素中添加src屬性,因為實(shí)際的圖像鏈接存儲在此處,然后存儲圖像的位置用作src屬性值。
  1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />
  for item in content.find(&#39;img&#39;).items():<br /> pic_url = item.attr(&#39;data-src&#39;)<br /> if &#39;=&#39; in pic_url:<br /> pic_name = pic_url.split(&#39;/&#39;)[4]<br /> pic_type = pic_url.split(&#39;=&#39;)[1]<br /> image = pic_name + &#39;.&#39; + pic_type<br /> item.add_class(&#39;src&#39;)<br /> item.attr(&#39;src&#39;,image)<br />
  生成index.html
  以html格式添加先前提取的文章標題,作者和官方帳戶(hù)信息以生成index.html,然后將其打開(kāi)以查看微信正文內容。
  1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />
  file_dir = "{0}/{1}".format(os.getcwd(), title)<br />path = os.path.join(file_dir,&#39;index.html&#39;)<br /><br />index = &#39;&#39;+title+&#39;
&#39;<br />index += &#39;&#39;+author+&#39;&#39;+source+&#39;
&#39;<br />index += &#39;&#39;+source_info+&#39;
&#39;<br />index += content<br />with open(path, &#39;wb&#39;) as f:<br /> f.write(index.encode(&#39;utf-8&#39;))<br />
  結果分析與解釋
  有關(guān)完整代碼,請參見(jiàn)微信2. py
  運行代碼:
  1<br />
  python https://mp.weixin.qq.com/s/QAw ... %3Bbr />
  
  檢索到的index.html如下: 查看全部

  微信公眾號文章抓實(shí)戰
  在之前的爬蟲(chóng)實(shí)戰中,我們基于關(guān)鍵詞搜索了相關(guān)的微信公眾號文章,并獲得了一系列相關(guān)的文章標題,鏈接等。找到文章后,我們需要保存,此實(shí)驗的目的是抓取微信公眾號文章文本內容。
  實(shí)驗環(huán)境
  python3
  主要使用的請求pyquery庫
  步驟分析
  本文使用CSDN公共帳戶(hù)的Python來(lái)抓取北京二手房數據,以分析北票人是否負擔得起房屋? 隨附完整的源代碼作為示例,
  在請求此頁(yè)面后,我們獲得文章標題,作者,官方帳戶(hù)信息和文章文本信息。由于我們要顯示文章的內容,因此為了確保文章文本的格式不變,我們提取html格式,最后將所有提取的內容合并為html格式,并通過(guò)瀏覽器保持文章的原創(chuàng )格式。
  應注意,文章中的所有圖片均來(lái)自互聯(lián)網(wǎng)。這些圖片無(wú)法通過(guò)打開(kāi)本地html進(jìn)行解析,因此我們提取了圖片鏈接,然后將其下載并保存到本地,并且html中的圖片鏈接替換了本地位置。
  在實(shí)驗過(guò)程中確定文章標題
  文章標題位于以下位置:
  
  1<br />2<br />
  <br />title = doc.find(&#39;.rich_media_title&#39;).text()<br />
  確認官方帳戶(hù)信息
  作者信息,官方帳戶(hù)的來(lái)源,微信帳戶(hù)以及官方帳戶(hù)的介紹都可以通過(guò)pyquery提?。?br />   
  1<br />2<br />3<br />4<br />
  # 微信公眾號<br />author = doc.find(&#39;#meta_content .rich_media_meta_text&#39;).text()<br />source = doc.find(&#39;#js_name&#39;).text()<br />source_info = doc.find(&#39;.profile_meta_value&#39;).text()<br />
  確認文章的內容
  文章的正文內容無(wú)法通過(guò)text()提取,因為提取的內容只是文本部分,而且缺少格式,因此顯示起來(lái)非常難看,因此我們使用html()保留身體部位的html元素:
  
  1<br />2<br />
  # 正文內容<br />content = doc.find(&#39;.rich_media_content&#39;)<br />
  提取所有圖像鏈接
  所有圖像鏈接都在img元素的data-src屬性中:
  
  1<br />2<br />3<br />4<br />5<br />6<br />
  # 所有圖片鏈接<br />pics_src = content.find(&#39;img&#39;).items()<br />for each in pics_src:<br /> if &#39;=&#39; in each.attr(&#39;data-src&#39;):<br /> pic.append(each.attr(&#39;data-src&#39;))<br />#print(pic)<br />
  下載圖片
  下載文章中的所有圖片并將其保存在本地文件中
  1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />
  def (title,url):<br /> print(url)<br /> pic_name = url.split(&#39;/&#39;)[4]<br /> pic_type = url.split(&#39;=&#39;)[1]<br /> response = requests.get(url,headers=random.choice(headers))<br /> try:<br /> if response.status_code == 200:<br /> file_dir = "{0}/{1}".format(os.getcwd(), title)<br /> if not os.path.isdir(file_dir):<br /> os.mkdir(file_dir)<br /> path = os.path.join(file_dir,pic_name+&#39;.&#39;+pic_type)<br /> if not os.path.exists(path):<br /> with open(path,&#39;wb&#39;) as f:<br /> f.write(response.content)<br /> except:<br /> pass<br />
  替換圖片
  將文本鏈接中的圖像鏈接替換為本地圖像的鏈接,但要注意,我們需要在img元素中添加src屬性,因為實(shí)際的圖像鏈接存儲在此處,然后存儲圖像的位置用作src屬性值。
  1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />
  for item in content.find(&#39;img&#39;).items():<br /> pic_url = item.attr(&#39;data-src&#39;)<br /> if &#39;=&#39; in pic_url:<br /> pic_name = pic_url.split(&#39;/&#39;)[4]<br /> pic_type = pic_url.split(&#39;=&#39;)[1]<br /> image = pic_name + &#39;.&#39; + pic_type<br /> item.add_class(&#39;src&#39;)<br /> item.attr(&#39;src&#39;,image)<br />
  生成index.html
  以html格式添加先前提取的文章標題,作者和官方帳戶(hù)信息以生成index.html,然后將其打開(kāi)以查看微信正文內容。
  1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />
  file_dir = "{0}/{1}".format(os.getcwd(), title)<br />path = os.path.join(file_dir,&#39;index.html&#39;)<br /><br />index = &#39;&#39;+title+&#39;
&#39;<br />index += &#39;&#39;+author+&#39;&#39;+source+&#39;
&#39;<br />index += &#39;&#39;+source_info+&#39;
&#39;<br />index += content<br />with open(path, &#39;wb&#39;) as f:<br /> f.write(index.encode(&#39;utf-8&#39;))<br />
  結果分析與解釋
  有關(guān)完整代碼,請參見(jiàn)微信2. py
  運行代碼:
  1<br />
  python https://mp.weixin.qq.com/s/QAw ... %3Bbr />
  
  檢索到的index.html如下:

干貨內容:[Python]抓取微信公眾號文章

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

  [Python]搶到微信官方賬號文章
  
  我目前正在開(kāi)發(fā)自己的項目,該項目涉及文章,該項目需要通過(guò)python抓取微信官方帳戶(hù). 由于微信的獨特方法,不可能直接爬網(wǎng). 研究了一些文章之后,我可能會(huì )有想法. 目前,Internet可以毫無(wú)問(wèn)題地搜索提議的解決方案,但是由于第三方庫中的某些更改,內部代碼基本上無(wú)法使用. 本文是為需要爬網(wǎng)公共帳戶(hù)文章的朋友而寫(xiě)的. 最后還將提供python源代碼下載.
  ##公共帳戶(hù)捕獲方法
  當前有兩種主流的公共帳戶(hù)爬網(wǎng)解決方案. 一種是搜索搜狗的微信官方帳戶(hù)頁(yè)面,找到文章地址,然后獲取特定的文章內容. 第二種方法是注冊一個(gè)公共帳戶(hù),然后通過(guò)官方帳戶(hù)的搜索界面可以查詢(xún)產(chǎn)品地址,然后根據該地址獲取產(chǎn)品內容.
  這兩種方案各有優(yōu)缺點(diǎn). 搜狗搜索的核心思想是通過(guò)請求模擬搜狗搜索公共賬號,然后解析搜索結果頁(yè)面,然后根據公共賬號的首頁(yè)地址對抓取工具進(jìn)行爬網(wǎng). }已捕獲詳細信息. 由于搜狗與騰訊之間的協(xié)議,只能顯示最新的10個(gè)文章,但無(wú)法獲取所有文章. 如果要獲取所有文章,則朋友可能必須使用第二種方法. 第二種方法的缺點(diǎn)是通過(guò)騰訊身份驗證注冊公共帳戶(hù). 這個(gè)過(guò)程比較麻煩. 您可以通過(guò)調用該界面的公共帳戶(hù)查詢(xún)界面進(jìn)行查詢(xún),但是您需要使用硒來(lái)模擬滑動(dòng)頁(yè)面翻頁(yè)操作. 整個(gè)過(guò)程仍然很麻煩. 是. 因為我的項目不需要歷史記錄文章,所以我使用搜狗搜索功能來(lái)檢索公共帳戶(hù).
  檢索最近的10個(gè)公共帳戶(hù)文章
  Python需要依賴(lài)的第三方庫如下:
  
  urllib,pyquery,請求,硒
  具體邏輯寫(xiě)在注釋中,沒(méi)有什么特別復雜的.
  核心爬蟲(chóng)課程
  ```python
  #! / usr / bin / python
  #代碼: utf-8
  
  [Python]純文本視圖復制代碼
  import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from urllib import quote
from pyquery import PyQuery as pq
import requests
import time
import re
import os
from selenium.webdriver import Chrome
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.wait import WebDriverWait
# 搜索入口地址,以公眾為關(guān)鍵字搜索該公眾號
def get_search_result_by_keywords(sogou_search_url):
# 爬蟲(chóng)偽裝頭部設置
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0'}
# 設置操作超時(shí)時(shí)長(cháng)
timeout = 5
# 爬蟲(chóng)模擬在一個(gè)request.session中完成
s = requests.Session()
log(u'搜索地址為:%s' % sogou_search_url)
return s.get(sogou_search_url, headers=headers, timeout=timeout).content
# 獲得公眾號主頁(yè)地址
def get_wx_url_by_sougou_search_html(sougou_search_html):
doc = pq(sougou_search_html)
return doc('div[class=txt-box]')('p[class=tit]')('a').attr('href')
# 使用webdriver 加載公眾號主頁(yè)內容,主要是js渲染的部分
def get_selenium_js_html(url):
options = Options()
options.add_argument('-headless') # 無(wú)頭參數
driver = Chrome(executable_path='chromedriver', chrome_options=options)
wait = WebDriverWait(driver, timeout=10)
driver.get(url)
time.sleep(3)
# 執行js得到整個(gè)頁(yè)面內容
html = driver.execute_script("return document.documentElement.outerHTML")
driver.close()
return html
# 獲取公眾號文章內容
def parse_wx_articles_by_html(selenium_html):
doc = pq(selenium_html)
return doc('div[class="weui_media_box appmsg"]')
# 將獲取到的文章轉換為字典
def switch_arctiles_to_list(articles):
# 定義存貯變量
articles_list = []
i = 1
# 遍歷找到的文章,解析里面的內容
if articles:
for article in articles.items():
log(u'開(kāi)始整合(%d/%d)' % (i, len(articles)))
# 處理單個(gè)文章
articles_list.append(parse_one_article(article))
i += 1
return articles_list
# 解析單篇文章
def parse_one_article(article):
article_dict = {}
# 獲取標題
title = article('h4[class="weui_media_title"]').text().strip()
###log(u'標題是: %s' % title)
# 獲取標題對應的地址
url = 'http://mp.weixin.qq.com' + article('h4[class="weui_media_title"]').attr('hrefs')
log(u'地址為: %s' % url)
# 獲取概要內容
summary = article('.weui_media_desc').text()
log(u'文章簡(jiǎn)述: %s' % summary)
# 獲取文章發(fā)表時(shí)間
date = article('.weui_media_extra_info').text().strip()
log(u'發(fā)表時(shí)間為: %s' % date)
# 獲取封面圖片
pic = parse_cover_pic(article)
# 返回字典數據
return {
'title': title,
'url': url,
'summary': summary,
'date': date,
'pic': pic
}
# 查找封面圖片,獲取封面圖片地址
def parse_cover_pic(article):
pic = article('.weui_media_hd').attr('style')
p = re.compile(r'background-image:url\((.*?)\)')
rs = p.findall(pic)
log(u'封面圖片是:%s ' % rs[0] if len(rs) > 0 else '')
return rs[0] if len(rs) > 0 else ''
# 自定義log函數,主要是加上時(shí)間
def log(msg):
print u'%s: %s' % (time.strftime('%Y-%m-%d_%H-%M-%S'), msg)
# 驗證函數
def need_verify(selenium_html):
' 有時(shí)候對方會(huì )封鎖ip,這里做一下判斷,檢測html中是否包含id=verify_change的標簽,有的話(huà),代表被重定向了,提醒過(guò)一陣子重試 '
return pq(selenium_html)('#verify_change').text() != ''
# 創(chuàng )建公眾號命名的文件夾
def create_dir(keywords):
if not os.path.exists(keywords):
os.makedirs(keywords)
# 爬蟲(chóng)主函數
def run(keywords):
' 爬蟲(chóng)入口函數 '
# Step 0 : 創(chuàng )建公眾號命名的文件夾
create_dir(keywords)
# 搜狐微信搜索鏈接入口
sogou_search_url = 'http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&s_from=input&_sug_=n&_sug_type_=' % quote(
keywords)
# Step 1:GET請求到搜狗微信引擎,以微信公眾號英文名稱(chēng)作為查詢(xún)關(guān)鍵字
log(u'開(kāi)始獲取,微信公眾號英文名為:%s' % keywords)
log(u'開(kāi)始調用sougou搜索引擎')
sougou_search_html = get_search_result_by_keywords(sogou_search_url)
# Step 2:從搜索結果頁(yè)中解析出公眾號主頁(yè)鏈接
log(u'獲取sougou_search_html成功,開(kāi)始抓取公眾號對應的主頁(yè)wx_url')
wx_url = get_wx_url_by_sougou_search_html(sougou_search_html)
log(u'獲取wx_url成功,%s' % wx_url)
# Step 3:Selenium+PhantomJs獲取js異步加載渲染后的html
log(u'開(kāi)始調用selenium渲染html')
selenium_html = get_selenium_js_html(wx_url)
# Step 4: 檢測目標網(wǎng)站是否進(jìn)行了封鎖
if need_verify(selenium_html):
log(u'爬蟲(chóng)被目標網(wǎng)站封鎖,請稍后再試')
else:
# Step 5: 使用PyQuery,從Step 3獲取的html中解析出公眾號文章列表的數據
log(u'調用selenium渲染html完成,開(kāi)始解析公眾號文章')
articles = parse_wx_articles_by_html(selenium_html)
log(u'抓取到微信文章%d篇' % len(articles))
# Step 6: 把微信文章數據封裝成字典的list
log(u'開(kāi)始整合微信文章數據為字典')
articles_list = switch_arctiles_to_list(articles)
return [content['title'] for content in articles_list]
```
main入口函數:
```python
# coding: utf8
import spider_weixun_by_sogou
if __name__ == '__main__':
gongzhonghao = raw_input(u'input weixin gongzhonghao:')
if not gongzhonghao:
gongzhonghao = 'spider'
text = " ".join(spider_weixun_by_sogou.run(gongzhonghao))
print text
  ```
<p>直接運行main方法,然后在控制臺中輸入要爬網(wǎng)的公共帳戶(hù)的英文名稱(chēng). 中文搜索可能不止一個(gè). 此處所做的只是對精確搜索的搜索. 只需檢查電話(huà)并檢查公共帳戶(hù)號的英文,請單擊公共帳戶(hù),然后查看公共帳戶(hù)信息以查看以下與“ mask5}爬網(wǎng)的爬蟲(chóng)結果相關(guān)的信息. 您可以通過(guò)在代碼中調用webdriver.py來(lái)檢索文章的特定內容. 查看全部

  [Python]搶到微信官方賬號文章
  
  我目前正在開(kāi)發(fā)自己的項目,該項目涉及文章,該項目需要通過(guò)python抓取微信官方帳戶(hù). 由于微信的獨特方法,不可能直接爬網(wǎng). 研究了一些文章之后,我可能會(huì )有想法. 目前,Internet可以毫無(wú)問(wèn)題地搜索提議的解決方案,但是由于第三方庫中的某些更改,內部代碼基本上無(wú)法使用. 本文是為需要爬網(wǎng)公共帳戶(hù)文章的朋友而寫(xiě)的. 最后還將提供python源代碼下載.
  ##公共帳戶(hù)捕獲方法
  當前有兩種主流的公共帳戶(hù)爬網(wǎng)解決方案. 一種是搜索搜狗的微信官方帳戶(hù)頁(yè)面,找到文章地址,然后獲取特定的文章內容. 第二種方法是注冊一個(gè)公共帳戶(hù),然后通過(guò)官方帳戶(hù)的搜索界面可以查詢(xún)產(chǎn)品地址,然后根據該地址獲取產(chǎn)品內容.
  這兩種方案各有優(yōu)缺點(diǎn). 搜狗搜索的核心思想是通過(guò)請求模擬搜狗搜索公共賬號,然后解析搜索結果頁(yè)面,然后根據公共賬號的首頁(yè)地址對抓取工具進(jìn)行爬網(wǎng). }已捕獲詳細信息. 由于搜狗與騰訊之間的協(xié)議,只能顯示最新的10個(gè)文章,但無(wú)法獲取所有文章. 如果要獲取所有文章,則朋友可能必須使用第二種方法. 第二種方法的缺點(diǎn)是通過(guò)騰訊身份驗證注冊公共帳戶(hù). 這個(gè)過(guò)程比較麻煩. 您可以通過(guò)調用該界面的公共帳戶(hù)查詢(xún)界面進(jìn)行查詢(xún),但是您需要使用硒來(lái)模擬滑動(dòng)頁(yè)面翻頁(yè)操作. 整個(gè)過(guò)程仍然很麻煩. 是. 因為我的項目不需要歷史記錄文章,所以我使用搜狗搜索功能來(lái)檢索公共帳戶(hù).
  檢索最近的10個(gè)公共帳戶(hù)文章
  Python需要依賴(lài)的第三方庫如下:
  
  urllib,pyquery,請求,硒
  具體邏輯寫(xiě)在注釋中,沒(méi)有什么特別復雜的.
  核心爬蟲(chóng)課程
  ```python
  #! / usr / bin / python
  #代碼: utf-8
  
  [Python]純文本視圖復制代碼
  import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from urllib import quote
from pyquery import PyQuery as pq
import requests
import time
import re
import os
from selenium.webdriver import Chrome
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.wait import WebDriverWait
# 搜索入口地址,以公眾為關(guān)鍵字搜索該公眾號
def get_search_result_by_keywords(sogou_search_url):
# 爬蟲(chóng)偽裝頭部設置
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0'}
# 設置操作超時(shí)時(shí)長(cháng)
timeout = 5
# 爬蟲(chóng)模擬在一個(gè)request.session中完成
s = requests.Session()
log(u'搜索地址為:%s' % sogou_search_url)
return s.get(sogou_search_url, headers=headers, timeout=timeout).content
# 獲得公眾號主頁(yè)地址
def get_wx_url_by_sougou_search_html(sougou_search_html):
doc = pq(sougou_search_html)
return doc('div[class=txt-box]')('p[class=tit]')('a').attr('href')
# 使用webdriver 加載公眾號主頁(yè)內容,主要是js渲染的部分
def get_selenium_js_html(url):
options = Options()
options.add_argument('-headless') # 無(wú)頭參數
driver = Chrome(executable_path='chromedriver', chrome_options=options)
wait = WebDriverWait(driver, timeout=10)
driver.get(url)
time.sleep(3)
# 執行js得到整個(gè)頁(yè)面內容
html = driver.execute_script("return document.documentElement.outerHTML")
driver.close()
return html
# 獲取公眾號文章內容
def parse_wx_articles_by_html(selenium_html):
doc = pq(selenium_html)
return doc('div[class="weui_media_box appmsg"]')
# 將獲取到的文章轉換為字典
def switch_arctiles_to_list(articles):
# 定義存貯變量
articles_list = []
i = 1
# 遍歷找到的文章,解析里面的內容
if articles:
for article in articles.items():
log(u'開(kāi)始整合(%d/%d)' % (i, len(articles)))
# 處理單個(gè)文章
articles_list.append(parse_one_article(article))
i += 1
return articles_list
# 解析單篇文章
def parse_one_article(article):
article_dict = {}
# 獲取標題
title = article('h4[class="weui_media_title"]').text().strip()
###log(u'標題是: %s' % title)
# 獲取標題對應的地址
url = 'http://mp.weixin.qq.com' + article('h4[class="weui_media_title"]').attr('hrefs')
log(u'地址為: %s' % url)
# 獲取概要內容
summary = article('.weui_media_desc').text()
log(u'文章簡(jiǎn)述: %s' % summary)
# 獲取文章發(fā)表時(shí)間
date = article('.weui_media_extra_info').text().strip()
log(u'發(fā)表時(shí)間為: %s' % date)
# 獲取封面圖片
pic = parse_cover_pic(article)
# 返回字典數據
return {
'title': title,
'url': url,
'summary': summary,
'date': date,
'pic': pic
}
# 查找封面圖片,獲取封面圖片地址
def parse_cover_pic(article):
pic = article('.weui_media_hd').attr('style')
p = re.compile(r'background-image:url\((.*?)\)')
rs = p.findall(pic)
log(u'封面圖片是:%s ' % rs[0] if len(rs) > 0 else '')
return rs[0] if len(rs) > 0 else ''
# 自定義log函數,主要是加上時(shí)間
def log(msg):
print u'%s: %s' % (time.strftime('%Y-%m-%d_%H-%M-%S'), msg)
# 驗證函數
def need_verify(selenium_html):
' 有時(shí)候對方會(huì )封鎖ip,這里做一下判斷,檢測html中是否包含id=verify_change的標簽,有的話(huà),代表被重定向了,提醒過(guò)一陣子重試 '
return pq(selenium_html)('#verify_change').text() != ''
# 創(chuàng )建公眾號命名的文件夾
def create_dir(keywords):
if not os.path.exists(keywords):
os.makedirs(keywords)
# 爬蟲(chóng)主函數
def run(keywords):
' 爬蟲(chóng)入口函數 '
# Step 0 : 創(chuàng )建公眾號命名的文件夾
create_dir(keywords)
# 搜狐微信搜索鏈接入口
sogou_search_url = 'http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&s_from=input&_sug_=n&_sug_type_=' % quote(
keywords)
# Step 1:GET請求到搜狗微信引擎,以微信公眾號英文名稱(chēng)作為查詢(xún)關(guān)鍵字
log(u'開(kāi)始獲取,微信公眾號英文名為:%s' % keywords)
log(u'開(kāi)始調用sougou搜索引擎')
sougou_search_html = get_search_result_by_keywords(sogou_search_url)
# Step 2:從搜索結果頁(yè)中解析出公眾號主頁(yè)鏈接
log(u'獲取sougou_search_html成功,開(kāi)始抓取公眾號對應的主頁(yè)wx_url')
wx_url = get_wx_url_by_sougou_search_html(sougou_search_html)
log(u'獲取wx_url成功,%s' % wx_url)
# Step 3:Selenium+PhantomJs獲取js異步加載渲染后的html
log(u'開(kāi)始調用selenium渲染html')
selenium_html = get_selenium_js_html(wx_url)
# Step 4: 檢測目標網(wǎng)站是否進(jìn)行了封鎖
if need_verify(selenium_html):
log(u'爬蟲(chóng)被目標網(wǎng)站封鎖,請稍后再試')
else:
# Step 5: 使用PyQuery,從Step 3獲取的html中解析出公眾號文章列表的數據
log(u'調用selenium渲染html完成,開(kāi)始解析公眾號文章')
articles = parse_wx_articles_by_html(selenium_html)
log(u'抓取到微信文章%d篇' % len(articles))
# Step 6: 把微信文章數據封裝成字典的list
log(u'開(kāi)始整合微信文章數據為字典')
articles_list = switch_arctiles_to_list(articles)
return [content['title'] for content in articles_list]
```
main入口函數:
```python
# coding: utf8
import spider_weixun_by_sogou
if __name__ == '__main__':
gongzhonghao = raw_input(u'input weixin gongzhonghao:')
if not gongzhonghao:
gongzhonghao = 'spider'
text = " ".join(spider_weixun_by_sogou.run(gongzhonghao))
print text
  ```
<p>直接運行main方法,然后在控制臺中輸入要爬網(wǎng)的公共帳戶(hù)的英文名稱(chēng). 中文搜索可能不止一個(gè). 此處所做的只是對精確搜索的搜索. 只需檢查電話(huà)并檢查公共帳戶(hù)號的英文,請單擊公共帳戶(hù),然后查看公共帳戶(hù)信息以查看以下與“ mask5}爬網(wǎng)的爬蟲(chóng)結果相關(guān)的信息. 您可以通過(guò)在代碼中調用webdriver.py來(lái)檢索文章的特定內容.

干貨內容:Python入門(mén)學(xué)習教程:50行Python代碼,教你獲取公眾號全部文章

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

  Python入門(mén)學(xué)習教程: 50行Python代碼,教您獲得所有正式帳戶(hù)的文章
  今天的Python入門(mén)學(xué)習教程主要告訴您如何獲取官方帳戶(hù)的所有文章!
  在閱讀官方帳戶(hù)的文章時(shí),我們通常會(huì )遇到一個(gè)問(wèn)題-閱讀歷史文章的經(jīng)驗不好.
  我們知道,有兩種常見(jiàn)的爬網(wǎng)官方帳戶(hù)的方法: 通過(guò)搜狗搜索獲得它. 缺點(diǎn)是只能獲取最新的十篇文章. 通過(guò)微信官方賬號的物料管理獲取官方賬號. 缺點(diǎn)是您需要申請自己的官方帳戶(hù).
  
  今天,我們將介紹一種通過(guò)在PC端捕獲微信來(lái)獲取官方帳戶(hù)文章的方法. 與其他方法相比,它非常方便.
  
  
  如上圖所示,我們通過(guò)數據包捕獲工具獲得了微信網(wǎng)絡(luò )信息請求. 我們發(fā)現,每次下拉列表中的文章時(shí),我們都會(huì )請求/ mp / xxx(官方帳戶(hù)不允許添加首頁(yè)鏈接,xxx表示profile_ext).
  經(jīng)過(guò)多次測試和分析,使用了以下參數
  數據如下
  {
"ret": 0,
"errmsg": "ok", # 請求狀態(tài)
"msg_count": 10, # 信息條數
"can_msg_continue": 1, # 是否還可以繼續獲取,1代表可以。0代表不可以,也就是最后一頁(yè)
"general_msg_list": "{"list":[]}", # 公眾號文本信息
"next_offset": 20,
"video_count": 1,
"use_video_tab": 1,
"real_type": 0,
"home_page_list": []
}
  部分代碼如下
   params = {
'__biz': biz,
'uin': uin,
'key': key,
'offset': offset,
'count': count,
'action': 'getmsg',
'f': 'json'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
response = requests.get(url=url, params=params, headers=headers)
resp_json = response.json()
if resp_json.get('errmsg') == 'ok':
resp_json = response.json()
# 是否還有分頁(yè)數據, 用于判斷return的值
can_msg_continue = resp_json['can_msg_continue']
# 當前分頁(yè)文章數
msg_count = resp_json['msg_count']
general_msg_list = json.loads(resp_json['general_msg_list'])
list = general_msg_list.get('list')
print(list, "**************")
  最后打印的列表是官方帳戶(hù)的文章信息詳細信息. 包括標題(標題),摘要(摘要),文章地址(content_url),閱讀源地址(source_url),封面圖像(封面),作者(作者)等...
  輸出結果如下:
  [{
"comm_msg_info": {
"id": 1000000038,
"type": 49,
"datetime": 1560474000,
"fakeid": "3881067844",
"status": 2,
"content": ""
},
"app_msg_ext_info": {
"title": "入門(mén)爬蟲(chóng),這一篇就夠了?。?!",
"digest": "入門(mén)爬蟲(chóng),這一篇就夠了?。?!",
"content": "",
"fileid": 0,
"content_url": "http:XXXXXX",
"source_url": "",
"cover": "I5kME6BVXeLibZDUhsiaEYiaX7zOoibxa9sb4stIwrfuqID5ttmiaoVAFyxKF6IjOCyl22vg8n2NPv98ibow\\/0?wx_fmt=jpeg",
"subtype": 9,
"is_multi": 0,
"multi_app_msg_item_list": [],
"author": "Python3X",
"copyright_stat": 11,
"duration": 0,
"del_flag": 1,
"item_show_type": 0,
"audio_fileid": 0,
"play_url": "",
"malicious_title_reason_id": 0,
"malicious_content_type": 0
}
},{...},{...},{...},{...},{...},{...},{...},{...},{...}]
  獲取數據后,可以將其保存在數據庫中或將文章保存在PDF中.
  1,保存在Mongo中
  # Mongo配置
conn = MongoClient('127.0.0.1', 27017)
db = conn.wx #連接wx數據庫,沒(méi)有則自動(dòng)創(chuàng )建
mongo_wx = db.article #使用article集合,沒(méi)有則自動(dòng)創(chuàng )建
for i in list:
app_msg_ext_info = i['app_msg_ext_info']
# 標題
title = app_msg_ext_info['title']
# 文章地址
content_url = app_msg_ext_info['content_url']
# 封面圖
cover = app_msg_ext_info['cover']
# 發(fā)布時(shí)間
datetime = i['comm_msg_info']['datetime']
datetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(datetime))
mongo_wx.insert({
'title': title,
'content_url': content_url,
'cover': cover,
'datetime': datetime
})
  結果如下
  
  2. 導入PDF文件
  在Python3中處理PDF的常用庫包括python-pdf和pdfkit. 我使用pdfkit模塊導出pdf文件.
  pdfkit是Wkhtmltopdf工具包的軟件包類(lèi),因此需要安裝Wkhtmltopdf才能使用它.
  有權下載與操作系統匹配的工具包.
  
  實(shí)現代碼也相對簡(jiǎn)單,只需要傳入導入文件的URL即可.
  安裝pdfkit庫
  pip3 install pdfkit -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
  import pdfkit
pdfkit.from_url('公眾號文章地址', 'out.pdf')
  運行后成功導出pdf文件.
  
  完整代碼 查看全部

  Python入門(mén)學(xué)習教程: 50行Python代碼,教您獲得所有正式帳戶(hù)的文章
  今天的Python入門(mén)學(xué)習教程主要告訴您如何獲取官方帳戶(hù)的所有文章!
  在閱讀官方帳戶(hù)的文章時(shí),我們通常會(huì )遇到一個(gè)問(wèn)題-閱讀歷史文章的經(jīng)驗不好.
  我們知道,有兩種常見(jiàn)的爬網(wǎng)官方帳戶(hù)的方法: 通過(guò)搜狗搜索獲得它. 缺點(diǎn)是只能獲取最新的十篇文章. 通過(guò)微信官方賬號的物料管理獲取官方賬號. 缺點(diǎn)是您需要申請自己的官方帳戶(hù).
  
  今天,我們將介紹一種通過(guò)在PC端捕獲微信來(lái)獲取官方帳戶(hù)文章的方法. 與其他方法相比,它非常方便.
  
  
  如上圖所示,我們通過(guò)數據包捕獲工具獲得了微信網(wǎng)絡(luò )信息請求. 我們發(fā)現,每次下拉列表中的文章時(shí),我們都會(huì )請求/ mp / xxx(官方帳戶(hù)不允許添加首頁(yè)鏈接,xxx表示profile_ext).
  經(jīng)過(guò)多次測試和分析,使用了以下參數
  數據如下
  {
"ret": 0,
"errmsg": "ok", # 請求狀態(tài)
"msg_count": 10, # 信息條數
"can_msg_continue": 1, # 是否還可以繼續獲取,1代表可以。0代表不可以,也就是最后一頁(yè)
"general_msg_list": "{"list":[]}", # 公眾號文本信息
"next_offset": 20,
"video_count": 1,
"use_video_tab": 1,
"real_type": 0,
"home_page_list": []
}
  部分代碼如下
   params = {
'__biz': biz,
'uin': uin,
'key': key,
'offset': offset,
'count': count,
'action': 'getmsg',
'f': 'json'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
response = requests.get(url=url, params=params, headers=headers)
resp_json = response.json()
if resp_json.get('errmsg') == 'ok':
resp_json = response.json()
# 是否還有分頁(yè)數據, 用于判斷return的值
can_msg_continue = resp_json['can_msg_continue']
# 當前分頁(yè)文章數
msg_count = resp_json['msg_count']
general_msg_list = json.loads(resp_json['general_msg_list'])
list = general_msg_list.get('list')
print(list, "**************")
  最后打印的列表是官方帳戶(hù)的文章信息詳細信息. 包括標題(標題),摘要(摘要),文章地址(content_url),閱讀源地址(source_url),封面圖像(封面),作者(作者)等...
  輸出結果如下:
  [{
"comm_msg_info": {
"id": 1000000038,
"type": 49,
"datetime": 1560474000,
"fakeid": "3881067844",
"status": 2,
"content": ""
},
"app_msg_ext_info": {
"title": "入門(mén)爬蟲(chóng),這一篇就夠了?。?!",
"digest": "入門(mén)爬蟲(chóng),這一篇就夠了?。?!",
"content": "",
"fileid": 0,
"content_url": "http:XXXXXX",
"source_url": "",
"cover": "I5kME6BVXeLibZDUhsiaEYiaX7zOoibxa9sb4stIwrfuqID5ttmiaoVAFyxKF6IjOCyl22vg8n2NPv98ibow\\/0?wx_fmt=jpeg",
"subtype": 9,
"is_multi": 0,
"multi_app_msg_item_list": [],
"author": "Python3X",
"copyright_stat": 11,
"duration": 0,
"del_flag": 1,
"item_show_type": 0,
"audio_fileid": 0,
"play_url": "",
"malicious_title_reason_id": 0,
"malicious_content_type": 0
}
},{...},{...},{...},{...},{...},{...},{...},{...},{...}]
  獲取數據后,可以將其保存在數據庫中或將文章保存在PDF中.
  1,保存在Mongo中
  # Mongo配置
conn = MongoClient('127.0.0.1', 27017)
db = conn.wx #連接wx數據庫,沒(méi)有則自動(dòng)創(chuàng )建
mongo_wx = db.article #使用article集合,沒(méi)有則自動(dòng)創(chuàng )建
for i in list:
app_msg_ext_info = i['app_msg_ext_info']
# 標題
title = app_msg_ext_info['title']
# 文章地址
content_url = app_msg_ext_info['content_url']
# 封面圖
cover = app_msg_ext_info['cover']
# 發(fā)布時(shí)間
datetime = i['comm_msg_info']['datetime']
datetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(datetime))
mongo_wx.insert({
'title': title,
'content_url': content_url,
'cover': cover,
'datetime': datetime
})
  結果如下
  
  2. 導入PDF文件
  在Python3中處理PDF的常用庫包括python-pdf和pdfkit. 我使用pdfkit模塊導出pdf文件.
  pdfkit是Wkhtmltopdf工具包的軟件包類(lèi),因此需要安裝Wkhtmltopdf才能使用它.
  有權下載與操作系統匹配的工具包.
  
  實(shí)現代碼也相對簡(jiǎn)單,只需要傳入導入文件的URL即可.
  安裝pdfkit庫
  pip3 install pdfkit -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
  import pdfkit
pdfkit.from_url('公眾號文章地址', 'out.pdf')
  運行后成功導出pdf文件.
  
  完整代碼

福利:微信公眾號文章“號內搜”新功能玩法

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

  微信公眾號文章“號碼搜索”新功能玩法
  
  01官方帳戶(hù)文章增加了“搜索”組件功能
  從今天開(kāi)始的Xida Puben,用戶(hù)可以直接在文章中搜索官方帳戶(hù)歷史記錄新聞!什么也不要說(shuō),只看圖片即可.
  
  
  如圖所示,官方帳戶(hù)文章可以具有內置的“搜索”組件. 該組件的左上角標有正式帳戶(hù)的頭像和指導詞“推薦的正式帳戶(hù)搜索”. 單擊后,用戶(hù)將進(jìn)入搜索界面.
  正式帳戶(hù)“推薦的搜索關(guān)鍵字”顯示在搜索框下方. 用戶(hù)可以根據需要在搜索框中輸入任何關(guān)鍵字,也可以單擊推薦的關(guān)鍵字進(jìn)行搜索.
  通常,此新功能可以幫助用戶(hù)快速檢索帳戶(hù)中的相關(guān)內容,這等效于內置在官方帳戶(hù)歷史記錄頁(yè)面中的“在帳戶(hù)中搜索”條目. 不同之處在于該路徑要淺得多. 更方便.
  畢竟,此功能如何工作?
  打開(kāi)官方帳戶(hù)后臺編輯器頁(yè)面,您將在頁(yè)面頂部的菜單欄中看到新添加的“搜索”組件,單擊以插入設置.
  
  只能為一篇文章創(chuàng )建一個(gè)搜索組件. 您最多可以設置6個(gè)搜索關(guān)鍵字. 拖放最右邊的“三欄”圖標以對關(guān)鍵字進(jìn)行排序. 具體效果可在左側視圖的“圖案預覽”中找到.
  
  此外,先前設置的“歷史搜索字詞”將顯示在關(guān)鍵字組下,以幫助操作員更好地設置它們. 點(diǎn)擊“放大鏡”圖標以查看關(guān)鍵字搜索結果的預覽.
  經(jīng)過(guò)全面的體驗,果醬女孩只想大聲說(shuō): 這次微信終于不乏味了! (這就像一個(gè)夢(mèng),當我醒來(lái)時(shí)我仍然感動(dòng)……)
  除了在文章中添加了新的“搜索”組件外,歷史消息頁(yè)面上隱藏的“數字內搜索”條目也已更改.
  1. “搜索范圍”選項已添加到搜索內容中,下面有兩個(gè)“無(wú)限”和“最近閱讀”范圍;
  2. 除了“按時(shí)間排序”之外,搜索結果還按“按閱讀量排序”排序.
  02官方帳戶(hù)搜索優(yōu)化有什么影響?
  事實(shí)上,早在2017年,在最新版本的ios 6.5.6中,“帳戶(hù)內搜索”功能已在官方帳戶(hù)歷史記錄消息頁(yè)面上啟動(dòng),但由于入口不明顯,實(shí)際上許多用戶(hù)不知道該操作仍然可用.
  運營(yíng)商不太可能希望增加用戶(hù)對過(guò)去文章的瀏覽. 但是新功能的出現是另一種說(shuō)法.
  1. 它有助于培養用戶(hù)對官方帳戶(hù)的搜索習慣
  現在,您可以為每個(gè)文章添加一個(gè)搜索框,條目會(huì )變淺,并且用戶(hù)的操作路徑也會(huì )縮短. 經(jīng)過(guò)一段時(shí)間的指導,用戶(hù)可以養成獨立單擊和搜索的習慣,這有助于他們更方便地獲取所需的信息,另一方面,這也有助于增加官方帳戶(hù)的粘性.
  目前,官方帳戶(hù)背景不提供已設置關(guān)鍵字的點(diǎn)擊數據. 將來(lái)會(huì )有相關(guān)數據來(lái)幫助運營(yíng)商更好地計劃主題選擇嗎?值得期待.
  2,幫助官方帳戶(hù)整理內容
  文章中的搜索框最多可以收錄6個(gè)關(guān)鍵字,這意味著(zhù)操作員需要從他們最感興趣或對讀者最感興趣的內容中提取關(guān)鍵字.
  如果您通常對內容指導有計劃,這并不困難;如果您害怕編寫(xiě)所有內容,那么可能很難考慮關(guān)鍵字.
  如果您想突出顯示自己的產(chǎn)品或服務(wù),還可以設置關(guān)鍵字作為指導以加深用戶(hù)的印象. 這樣看來(lái),新添加的搜索框是一個(gè)不錯的廣告牌. 裝飾方式取決于個(gè)人.
  03操作員應如何充分利用此入口?
  1. 把它放在文章的開(kāi)頭,以吸引用戶(hù)點(diǎn)擊
  最高位置始終是最引人注目的,尤其是這是一項新功能. 應該注意的是,頂部的橫幅圖像不應太復雜,否則可能會(huì )使搜索框的光線(xiàn)模糊. 換句話(huà)說(shuō),它就像一個(gè)導航欄.
  如果您不知道要設置什么關(guān)鍵字,則可以參考后臺的[Message Analysis]-[Message Keyword]數據,此數據分析將計算用戶(hù)在后臺答復的關(guān)鍵字頻率TOP200. 查看全部

  微信公眾號文章“號碼搜索”新功能玩法
  
  01官方帳戶(hù)文章增加了“搜索”組件功能
  從今天開(kāi)始的Xida Puben,用戶(hù)可以直接在文章中搜索官方帳戶(hù)歷史記錄新聞!什么也不要說(shuō),只看圖片即可.
  
  
  如圖所示,官方帳戶(hù)文章可以具有內置的“搜索”組件. 該組件的左上角標有正式帳戶(hù)的頭像和指導詞“推薦的正式帳戶(hù)搜索”. 單擊后,用戶(hù)將進(jìn)入搜索界面.
  正式帳戶(hù)“推薦的搜索關(guān)鍵字”顯示在搜索框下方. 用戶(hù)可以根據需要在搜索框中輸入任何關(guān)鍵字,也可以單擊推薦的關(guān)鍵字進(jìn)行搜索.
  通常,此新功能可以幫助用戶(hù)快速檢索帳戶(hù)中的相關(guān)內容,這等效于內置在官方帳戶(hù)歷史記錄頁(yè)面中的“在帳戶(hù)中搜索”條目. 不同之處在于該路徑要淺得多. 更方便.
  畢竟,此功能如何工作?
  打開(kāi)官方帳戶(hù)后臺編輯器頁(yè)面,您將在頁(yè)面頂部的菜單欄中看到新添加的“搜索”組件,單擊以插入設置.
  
  只能為一篇文章創(chuàng )建一個(gè)搜索組件. 您最多可以設置6個(gè)搜索關(guān)鍵字. 拖放最右邊的“三欄”圖標以對關(guān)鍵字進(jìn)行排序. 具體效果可在左側視圖的“圖案預覽”中找到.
  
  此外,先前設置的“歷史搜索字詞”將顯示在關(guān)鍵字組下,以幫助操作員更好地設置它們. 點(diǎn)擊“放大鏡”圖標以查看關(guān)鍵字搜索結果的預覽.
  經(jīng)過(guò)全面的體驗,果醬女孩只想大聲說(shuō): 這次微信終于不乏味了! (這就像一個(gè)夢(mèng),當我醒來(lái)時(shí)我仍然感動(dòng)……)
  除了在文章中添加了新的“搜索”組件外,歷史消息頁(yè)面上隱藏的“數字內搜索”條目也已更改.
  1. “搜索范圍”選項已添加到搜索內容中,下面有兩個(gè)“無(wú)限”和“最近閱讀”范圍;
  2. 除了“按時(shí)間排序”之外,搜索結果還按“按閱讀量排序”排序.
  02官方帳戶(hù)搜索優(yōu)化有什么影響?
  事實(shí)上,早在2017年,在最新版本的ios 6.5.6中,“帳戶(hù)內搜索”功能已在官方帳戶(hù)歷史記錄消息頁(yè)面上啟動(dòng),但由于入口不明顯,實(shí)際上許多用戶(hù)不知道該操作仍然可用.
  運營(yíng)商不太可能希望增加用戶(hù)對過(guò)去文章的瀏覽. 但是新功能的出現是另一種說(shuō)法.
  1. 它有助于培養用戶(hù)對官方帳戶(hù)的搜索習慣
  現在,您可以為每個(gè)文章添加一個(gè)搜索框,條目會(huì )變淺,并且用戶(hù)的操作路徑也會(huì )縮短. 經(jīng)過(guò)一段時(shí)間的指導,用戶(hù)可以養成獨立單擊和搜索的習慣,這有助于他們更方便地獲取所需的信息,另一方面,這也有助于增加官方帳戶(hù)的粘性.
  目前,官方帳戶(hù)背景不提供已設置關(guān)鍵字的點(diǎn)擊數據. 將來(lái)會(huì )有相關(guān)數據來(lái)幫助運營(yíng)商更好地計劃主題選擇嗎?值得期待.
  2,幫助官方帳戶(hù)整理內容
  文章中的搜索框最多可以收錄6個(gè)關(guān)鍵字,這意味著(zhù)操作員需要從他們最感興趣或對讀者最感興趣的內容中提取關(guān)鍵字.
  如果您通常對內容指導有計劃,這并不困難;如果您害怕編寫(xiě)所有內容,那么可能很難考慮關(guān)鍵字.
  如果您想突出顯示自己的產(chǎn)品或服務(wù),還可以設置關(guān)鍵字作為指導以加深用戶(hù)的印象. 這樣看來(lái),新添加的搜索框是一個(gè)不錯的廣告牌. 裝飾方式取決于個(gè)人.
  03操作員應如何充分利用此入口?
  1. 把它放在文章的開(kāi)頭,以吸引用戶(hù)點(diǎn)擊
  最高位置始終是最引人注目的,尤其是這是一項新功能. 應該注意的是,頂部的橫幅圖像不應太復雜,否則可能會(huì )使搜索框的光線(xiàn)模糊. 換句話(huà)說(shuō),它就像一個(gè)導航欄.
  如果您不知道要設置什么關(guān)鍵字,則可以參考后臺的[Message Analysis]-[Message Keyword]數據,此數據分析將計算用戶(hù)在后臺答復的關(guān)鍵字頻率TOP200.

微信文章爬蟲(chóng)實(shí)現方式.docx

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

  微信文章爬蟲(chóng)實(shí)現方式.docx
  文檔介紹:
  微信文章爬蟲(chóng)實(shí)現方式
  如今越來(lái)越多的優(yōu)質(zhì)內容發(fā)布在微信公眾號中,對那些內容,有些同事會(huì )有采集下來(lái)的需求,下面為你們介紹使用優(yōu)采云爬蟲(chóng)工具去抓取采集微信文章信息。
  本文將以搜狗陌陌文章為例,介紹使用優(yōu)采云采集網(wǎng)頁(yè)文章正文的技巧。文章正文里通常包括文本和圖片兩種。本文將采集文章正文中的文本+圖片URL。
  將采集以下數組:文章標題、時(shí)間、來(lái)源和正文(正文中的所有文本,將合并到一個(gè)excel單元格中,將使用到“自定義數據合并方法”功能,請你們注意)。同時(shí),采集文章正文中的文本+圖片URL,將用到“判斷條件”,“判斷條件”的使用,有很多須要注意的地方。以下兩個(gè)教程,大家可先熟悉一下。
  “自定義數據合并方法”詳解教程:
  orialdetail-1/zdyhb_7.html
  “判斷條件”詳解教程:
  orialdetail-1/judge.html
  采集網(wǎng)站:
  使用功能點(diǎn):
  分頁(yè)列表信息采集
  orial/fylb-70.aspx?t=1
  Xpath
  rch?query=XPath
  AJAX點(diǎn)擊和翻頁(yè)
  orial/ajaxdjfy_7.aspx?t=1
  判斷條件
  orialdetail-1/judge.html
  AJAX滾動(dòng)
  orialdetail-1/ajgd_7.html
  步驟1:創(chuàng )建采集任務(wù)
  1)進(jìn)入主界面,選擇“自定義模式”
  微信文章爬蟲(chóng)實(shí)現方式步驟1
  2)將要采集的網(wǎng)址URL復制粘貼到網(wǎng)站輸入框中,點(diǎn)擊“保存網(wǎng)址”
  微信文章爬蟲(chóng)實(shí)現方式步驟2
  步驟2:創(chuàng )建翻頁(yè)循環(huán)
  在頁(yè)面右上角,打開(kāi)“流程”,以詮釋出“流程設計器”和“定制當前操作”兩個(gè)藍籌股。網(wǎng)頁(yè)打開(kāi)后,默認顯示“熱門(mén)”文章。下拉頁(yè)面,找到并點(diǎn)擊“加載更多內容”按鈕,在操作提示框中,選擇“更多操作”
  微信文章爬蟲(chóng)實(shí)現方式步驟3
  選擇“循環(huán)點(diǎn)擊單個(gè)元素”,以創(chuàng )建一個(gè)翻頁(yè)循環(huán)
  微信文章爬蟲(chóng)實(shí)現方式步驟4
  由于此網(wǎng)頁(yè)涉及Ajax技術(shù),我們須要進(jìn)行一些中級選項的設置。選中“點(diǎn)擊元素”步驟,打開(kāi)“高級選項”,勾選“Ajax加載數據”,設置時(shí)間為“2秒”
  微信文章爬蟲(chóng)實(shí)現方式步驟5
  注:AJAX即延時(shí)加載、異步更新的一種腳本技術(shù),通過(guò)在后臺與服務(wù)器進(jìn)行少量數據交換,可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對網(wǎng)頁(yè)的某部份進(jìn)行更新。
  表現特點(diǎn):a、點(diǎn)擊網(wǎng)頁(yè)中某個(gè)選項時(shí),大部分網(wǎng)站的網(wǎng)址不會(huì )改變;b、網(wǎng)頁(yè)不是完全加載,只是局部進(jìn)行了數據加載,有所變化。 查看全部

  微信文章爬蟲(chóng)實(shí)現方式.docx
  文檔介紹:
  微信文章爬蟲(chóng)實(shí)現方式
  如今越來(lái)越多的優(yōu)質(zhì)內容發(fā)布在微信公眾號中,對那些內容,有些同事會(huì )有采集下來(lái)的需求,下面為你們介紹使用優(yōu)采云爬蟲(chóng)工具去抓取采集微信文章信息。
  本文將以搜狗陌陌文章為例,介紹使用優(yōu)采云采集網(wǎng)頁(yè)文章正文的技巧。文章正文里通常包括文本和圖片兩種。本文將采集文章正文中的文本+圖片URL。
  將采集以下數組:文章標題、時(shí)間、來(lái)源和正文(正文中的所有文本,將合并到一個(gè)excel單元格中,將使用到“自定義數據合并方法”功能,請你們注意)。同時(shí),采集文章正文中的文本+圖片URL,將用到“判斷條件”,“判斷條件”的使用,有很多須要注意的地方。以下兩個(gè)教程,大家可先熟悉一下。
  “自定義數據合并方法”詳解教程:
  orialdetail-1/zdyhb_7.html
  “判斷條件”詳解教程:
  orialdetail-1/judge.html
  采集網(wǎng)站:
  使用功能點(diǎn):
  分頁(yè)列表信息采集
  orial/fylb-70.aspx?t=1
  Xpath
  rch?query=XPath
  AJAX點(diǎn)擊和翻頁(yè)
  orial/ajaxdjfy_7.aspx?t=1
  判斷條件
  orialdetail-1/judge.html
  AJAX滾動(dòng)
  orialdetail-1/ajgd_7.html
  步驟1:創(chuàng )建采集任務(wù)
  1)進(jìn)入主界面,選擇“自定義模式”
  微信文章爬蟲(chóng)實(shí)現方式步驟1
  2)將要采集的網(wǎng)址URL復制粘貼到網(wǎng)站輸入框中,點(diǎn)擊“保存網(wǎng)址”
  微信文章爬蟲(chóng)實(shí)現方式步驟2
  步驟2:創(chuàng )建翻頁(yè)循環(huán)
  在頁(yè)面右上角,打開(kāi)“流程”,以詮釋出“流程設計器”和“定制當前操作”兩個(gè)藍籌股。網(wǎng)頁(yè)打開(kāi)后,默認顯示“熱門(mén)”文章。下拉頁(yè)面,找到并點(diǎn)擊“加載更多內容”按鈕,在操作提示框中,選擇“更多操作”
  微信文章爬蟲(chóng)實(shí)現方式步驟3
  選擇“循環(huán)點(diǎn)擊單個(gè)元素”,以創(chuàng )建一個(gè)翻頁(yè)循環(huán)
  微信文章爬蟲(chóng)實(shí)現方式步驟4
  由于此網(wǎng)頁(yè)涉及Ajax技術(shù),我們須要進(jìn)行一些中級選項的設置。選中“點(diǎn)擊元素”步驟,打開(kāi)“高級選項”,勾選“Ajax加載數據”,設置時(shí)間為“2秒”
  微信文章爬蟲(chóng)實(shí)現方式步驟5
  注:AJAX即延時(shí)加載、異步更新的一種腳本技術(shù),通過(guò)在后臺與服務(wù)器進(jìn)行少量數據交換,可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對網(wǎng)頁(yè)的某部份進(jìn)行更新。
  表現特點(diǎn):a、點(diǎn)擊網(wǎng)頁(yè)中某個(gè)選項時(shí),大部分網(wǎng)站的網(wǎng)址不會(huì )改變;b、網(wǎng)頁(yè)不是完全加載,只是局部進(jìn)行了數據加載,有所變化。

微信公眾號文章爬取

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

  微信公眾號文章爬取
  哈哈,終于找到一個(gè)可以一鍵獲取所有公眾號上面的文章了,雖然比較笨,但是先湊活著(zhù),畢竟還破解不了登陸。
  參考鏈接:
  第一步:先注冊一個(gè)公眾號
  注冊以后登陸到主頁(yè),找到這個(gè)素材管理
  
  然后你會(huì )看見(jiàn)下邊這個(gè)頁(yè)面
  
  點(diǎn)擊這個(gè)綠色箭頭指向的這個(gè)鏈接
  
  記得打開(kāi)調試工具
  然后搜索你想爬取的公眾號
  
  這個(gè)懇求會(huì )返回我們搜索到的公眾號,我們要的公眾號也在這個(gè)列表上面,假如在第一個(gè)
  
  我們須要這個(gè)fake-id來(lái)標記這個(gè)公眾號
  接下選中,然后點(diǎn)一下
  
  然后文章列表就下來(lái)了
  整個(gè)過(guò)程就須要token,公眾號名子,還有cookie了
  最后直接上代碼了
  # -*- coding: utf-8 -*-
import pymysql as pymysql
from fake_useragent import UserAgent
import requests
import json
from retrying import retry
@retry(stop_max_attempt_number=5)
def get_author_list():
"""
獲取搜索到的公眾號列表
:return:
"""
global s
url = "https://mp.weixin.qq.com/cgi-b ... ry%3D{}&token={}&lang=zh_CN&f=json&ajax=1".format(
name, token)
try:
response = s.get(url, headers=headers, cookies=cookie)
text = json.loads(response.text)
# print('一共查詢(xún)出來(lái){}個(gè)公眾號'.format(text['total']))
return text
except Exception as e:
print(e)
reset_parmas()
@retry(stop_max_attempt_number=5)
def get_first_author_params(text):
"""
獲取單個(gè)公眾號的參數
:param text: 前面搜索獲取的公眾號列表
:return:fake_id公眾號id, text請求公眾號詳情的相應內容
"""
fake_id = text['list'][0] # 一般第一個(gè)就是咱們需要的,所以取第一個(gè)
# print(text['list'][0])
url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin=0&count=5&fakeid={}&type=9&query=&token={}&lang=zh_CN&f=json&ajax=1'.format(fake_id['fakeid'], token)
response = s.get(url, headers=headers, cookies=cookie)
try:
text1 = json.loads(response.text)
return text1, fake_id
except Exception as e:
print(e)
reset_parmas()
@retry(stop_max_attempt_number=5)
def get_title_url(text, fake_id):
"""
得到公眾號的標題和鏈接
:param text:
:param fake_id:
:return:
"""
print(text)
num = int(text['app_msg_cnt'])
if num % 5 > 0:
num = num // 5 + 1
for i in range(num):
# token begin:參數傳入
url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin={}&count=5&fakeid={}&type=9&query=&token={}&lang=zh_CN&f=json&ajax=1'.format(str(i * 5),fake_id['fakeid'], token,)
try:
response = s.get(url, headers=headers, cookies=cookie)
text = json.loads(response.text)
print(text)
artile_list = text['app_msg_list']
for artile in artile_list:
print('標題:{}'.format(artile['title']))
print('標題鏈接:{}'.format(artile['link']))
save_mysql(name, artile['title'], artile['link'])
except Exception as e:
print(e)
reset_parmas()
def save_mysql(name, title, url):
"""
保存數據到數據庫
:param name: 作者名字
:param title:文章標題
:param url: 文章鏈接
:return:
"""
try:
sql = """INSERT INTO title_url(author_name, title, url) values ('{}', '{}', '{}')""".format(name, title, url)
conn.ping(reconnect=False)
cur.execute(sql)
conn.commit()
except Exception as e:
print(e)
def reset_parmas():
"""
失效后重新輸入參數
:return:
"""
global name, token, s, cookie, headers
name = input("請輸入你要查看的公眾號名字: ")
token = input("請輸入你當前登錄自己公眾號的token: ")
cookies = input("請輸入當前頁(yè)面的cookie: ")
s = requests.session()
cookie = {'cookie': cookies}
headers = {
"User-Agent": UserAgent().random,
"Host": "mp.weixin.qq.com",
}
def run():
reset_parmas()
text = get_author_list()
text1, fake_id = get_first_author_params(text)
get_title_url(text1, fake_id)
run()
  需要說(shuō)明一下,數據庫自己連我都不上代碼了
  還有就是似乎插口更新的頻繁,所以你只須要弄懂我的代碼的邏輯就可以了
 ?。希? 查看全部

  微信公眾號文章爬取
  哈哈,終于找到一個(gè)可以一鍵獲取所有公眾號上面的文章了,雖然比較笨,但是先湊活著(zhù),畢竟還破解不了登陸。
  參考鏈接:
  第一步:先注冊一個(gè)公眾號
  注冊以后登陸到主頁(yè),找到這個(gè)素材管理
  
  然后你會(huì )看見(jiàn)下邊這個(gè)頁(yè)面
  
  點(diǎn)擊這個(gè)綠色箭頭指向的這個(gè)鏈接
  
  記得打開(kāi)調試工具
  然后搜索你想爬取的公眾號
  
  這個(gè)懇求會(huì )返回我們搜索到的公眾號,我們要的公眾號也在這個(gè)列表上面,假如在第一個(gè)
  
  我們須要這個(gè)fake-id來(lái)標記這個(gè)公眾號
  接下選中,然后點(diǎn)一下
  
  然后文章列表就下來(lái)了
  整個(gè)過(guò)程就須要token,公眾號名子,還有cookie了
  最后直接上代碼了
  # -*- coding: utf-8 -*-
import pymysql as pymysql
from fake_useragent import UserAgent
import requests
import json
from retrying import retry
@retry(stop_max_attempt_number=5)
def get_author_list():
"""
獲取搜索到的公眾號列表
:return:
"""
global s
url = "https://mp.weixin.qq.com/cgi-b ... ry%3D{}&token={}&lang=zh_CN&f=json&ajax=1".format(
name, token)
try:
response = s.get(url, headers=headers, cookies=cookie)
text = json.loads(response.text)
# print('一共查詢(xún)出來(lái){}個(gè)公眾號'.format(text['total']))
return text
except Exception as e:
print(e)
reset_parmas()
@retry(stop_max_attempt_number=5)
def get_first_author_params(text):
"""
獲取單個(gè)公眾號的參數
:param text: 前面搜索獲取的公眾號列表
:return:fake_id公眾號id, text請求公眾號詳情的相應內容
"""
fake_id = text['list'][0] # 一般第一個(gè)就是咱們需要的,所以取第一個(gè)
# print(text['list'][0])
url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin=0&count=5&fakeid={}&type=9&query=&token={}&lang=zh_CN&f=json&ajax=1'.format(fake_id['fakeid'], token)
response = s.get(url, headers=headers, cookies=cookie)
try:
text1 = json.loads(response.text)
return text1, fake_id
except Exception as e:
print(e)
reset_parmas()
@retry(stop_max_attempt_number=5)
def get_title_url(text, fake_id):
"""
得到公眾號的標題和鏈接
:param text:
:param fake_id:
:return:
"""
print(text)
num = int(text['app_msg_cnt'])
if num % 5 > 0:
num = num // 5 + 1
for i in range(num):
# token begin:參數傳入
url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin={}&count=5&fakeid={}&type=9&query=&token={}&lang=zh_CN&f=json&ajax=1'.format(str(i * 5),fake_id['fakeid'], token,)
try:
response = s.get(url, headers=headers, cookies=cookie)
text = json.loads(response.text)
print(text)
artile_list = text['app_msg_list']
for artile in artile_list:
print('標題:{}'.format(artile['title']))
print('標題鏈接:{}'.format(artile['link']))
save_mysql(name, artile['title'], artile['link'])
except Exception as e:
print(e)
reset_parmas()
def save_mysql(name, title, url):
"""
保存數據到數據庫
:param name: 作者名字
:param title:文章標題
:param url: 文章鏈接
:return:
"""
try:
sql = """INSERT INTO title_url(author_name, title, url) values ('{}', '{}', '{}')""".format(name, title, url)
conn.ping(reconnect=False)
cur.execute(sql)
conn.commit()
except Exception as e:
print(e)
def reset_parmas():
"""
失效后重新輸入參數
:return:
"""
global name, token, s, cookie, headers
name = input("請輸入你要查看的公眾號名字: ")
token = input("請輸入你當前登錄自己公眾號的token: ")
cookies = input("請輸入當前頁(yè)面的cookie: ")
s = requests.session()
cookie = {'cookie': cookies}
headers = {
"User-Agent": UserAgent().random,
"Host": "mp.weixin.qq.com",
}
def run():
reset_parmas()
text = get_author_list()
text1, fake_id = get_first_author_params(text)
get_title_url(text1, fake_id)
run()
  需要說(shuō)明一下,數據庫自己連我都不上代碼了
  還有就是似乎插口更新的頻繁,所以你只須要弄懂我的代碼的邏輯就可以了
 ?。希?

用 Python 進(jìn)行微信公眾號開(kāi)發(fā)

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

  用 Python 進(jìn)行微信公眾號開(kāi)發(fā)
  <p>本篇文章首先實(shí)現與公眾號的對接,實(shí)現簡(jiǎn)單的回復文字、圖片內容。下一篇會(huì )對接騰訊的AI平臺,實(shí)現對照片的人臉檢測與分析,分析年齡、性別、表情、魅力值等。
<a id="_2"></a>準備工作
  首先要注冊一個(gè)公眾號,這個(gè)很簡(jiǎn)單,我們到微信公眾平臺注冊就可以了,選擇個(gè)人訂閱號就可以。但是如果可以認證的,我建議選擇認證訂閱號,因為未認證的號很多功能權限都沒(méi)有。好了,話(huà)不多說(shuō)進(jìn)入正題。
  1. 配置公眾號
打開(kāi)公眾號,在 開(kāi)發(fā)->基本配置 頁(yè)面填寫(xiě)內容。

下面說(shuō)下需要填的內容,第一個(gè)URL要填的就是我們的服務(wù)地址,這個(gè)地址必須是外網(wǎng)地址并且是80端口。我們要本地開(kāi)發(fā)時(shí)可以用 ngrok 解決。在ngrok.com官網(wǎng)下載。解壓后就是一個(gè)exe程序。在當前目錄下輸入.\ngrok.exe http 80即可啟動(dòng)。啟動(dòng)后如下圖所示,圖片中網(wǎng)址就是我們需要的

然后我們復制紅色方框里面的地址到微信的URL輸入框中,比如我的就輸入http://c9b15df5.ngrok.io/connect
后面這個(gè)connect是我自己的服務(wù)的地址。就是我們在程序開(kāi)發(fā)中自己命名的一個(gè)請求路徑,如果是新手的話(huà)建議按照我的來(lái)。不要改動(dòng),避免程序跑不起來(lái)。
第二個(gè)Token,自己想一個(gè)就行了,隨便填,你可以當他為一個(gè)密碼。
第三個(gè)自己生成就可以了。
最后一個(gè)消息加解密方式選擇明文模式。配置到這里就結束了,我們先不要關(guān)閉這個(gè)頁(yè)面,等我們Python程序驗證部分寫(xiě)好以后點(diǎn)擊頁(yè)面下面的提交就可以了?,F在點(diǎn)會(huì )報錯的。
<a id="2_18"></a>2.接口驗證部分代碼編寫(xiě)
  查看官方文檔,當我們點(diǎn)擊配置頁(yè)面的提交按鈕時(shí),微信后臺會(huì )向我們配置的地址發(fā)送signature、timestamp、nonce、echostr四個(gè)信息,我們拿到這部分信息后通過(guò)哈希加密算法計算出(timestamp,nonce,token)的哈希值與微信發(fā)送的signature對比,如果相等則說(shuō)明是微信后臺的請求,然后把echostr返回,就表示驗證成功。
  這一步,我們使用三個(gè)庫,wechatpy-微信的Python SDK,falcon一個(gè)非常微小的Python Web框架,Waitress-一個(gè)Python WSGI服務(wù)器,當然在Linux上可以使用gunicorn代替waitress。通過(guò)pip install wechatpy[pycrypto]和pip install falcon,pip install waitress安裝。代碼如下,只需要把配置界面的token替換到代碼里
import falcon
from falcon import uri
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
class Connect(object):
def on_get(self, req, resp):
query_string = req.query_string
query_list = query_string.split('&')
b = {}
for i in query_list:
b[i.split('=')[0]] = i.split('=')[1]
try:
check_signature(token='這里填寫(xiě)配置界面你輸入的token', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
resp.body = (b['echostr'])
except InvalidSignatureException:
pass
resp.status = falcon.HTTP_200
app = falcon.API()
connect = Connect()
app.add_route('/connect', connect)
</p>
  代碼寫(xiě)好之后,我們在命令行輸入 waitress-serve --port=80 connect:app在80端口啟動(dòng)我們的程序。啟動(dòng)后如下圖,代表啟動(dòng)成功,這時(shí)候我們到陌陌的配置頁(yè)面點(diǎn)擊遞交,會(huì )彈出遞交成功消息框,代表我們成功接入陌陌
  
  簡(jiǎn)單說(shuō)明以下里面代碼,on_get函數接收陌陌發(fā)來(lái)的get懇求,并且通過(guò)query_string領(lǐng)到陌陌發(fā)送的參數,之后通過(guò)wechatpy的check_signature函數來(lái)校準。校驗成功后把echostr返回給陌陌。
  3.發(fā)送文本信息給用戶(hù)
  接入成功后,就可以回復用戶(hù)的信息了。我們降低一個(gè)函數處理用戶(hù)發(fā)送的消息,整體代碼如下:
  import falcon
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
from wechatpy import parse_message
from wechatpy.replies import TextReply, ImageReply
'''
遇到不懂的問(wèn)題?Python學(xué)習交流群:821460695滿(mǎn)足你的需求,資料都已經(jīng)上傳群文件,可以自行下載!
'''
class Connect(object):
def on_get(self, req, resp):
query_string = req.query_string
query_list = query_string.split('&')
b = {}
for i in query_list:
b[i.split('=')[0]] = i.split('=')[1]
try:
check_signature(token='xxxxx', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
resp.body = (b['echostr'])
except InvalidSignatureException:
pass
resp.status = falcon.HTTP_200
def on_post(self, req, resp):
xml = req.stream.read()
msg = parse_message(xml)
if msg.type == 'text':
reply = TextReply(content=msg.content, message=msg)
xml = reply.render()
resp.body = (xml)
resp.status = falcon.HTTP_200
app = falcon.API()
connect = Connect()
app.add_route('/connect', connect)
  我們導入了parse_message,TextReply,ImageReply函數。當領(lǐng)到用戶(hù)消息時(shí),判斷是文本消息,就原貌返回給用戶(hù)?,F在我們啟動(dòng)腳本后,向公眾號發(fā)送文本消息都會(huì )收到手動(dòng)回復了。
  4. 發(fā)送圖片信息給用戶(hù)
  我們簡(jiǎn)單更改下on_post函數,使其除了能處理文本,也能處理圖片信息。完整代碼如下:
  import falcon
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
from wechatpy import parse_message
from wechatpy.replies import TextReply, ImageReply
class Connect(object):
def on_get(self, req, resp):
query_string = req.query_string
query_list = query_string.split('&')
b = {}
for i in query_list:
b[i.split('=')[0]] = i.split('=')[1]
try:
check_signature(token='xxxxxxx', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
resp.body = (b['echostr'])
except InvalidSignatureException:
pass
resp.status = falcon.HTTP_200
def on_post(self, req, resp):
xml = req.stream.read()
msg = parse_message(xml)
if msg.type == 'text':
reply = TextReply(content=msg.content, message=msg)
xml = reply.render()
resp.body = (xml)
resp.status = falcon.HTTP_200
elif msg.type == 'image':
reply = ImageReply(media_id=msg.media_id, message=msg)
xml = reply.render()
resp.body = (xml)
resp.status = falcon.HTTP_200
app = falcon.API()
connect = Connect()
app.add_route('/connect', connect)
  我們在代碼中加入了圖片處理邏輯,如果是圖片類(lèi)型的消息,則把圖片返回給用戶(hù)。我們把圖片發(fā)送給陌陌后臺后,會(huì )手動(dòng)生成一個(gè)media_id,我們發(fā)送這個(gè)media_id就可以了。
  效果圖 查看全部

  用 Python 進(jìn)行微信公眾號開(kāi)發(fā)
  <p>本篇文章首先實(shí)現與公眾號的對接,實(shí)現簡(jiǎn)單的回復文字、圖片內容。下一篇會(huì )對接騰訊的AI平臺,實(shí)現對照片的人臉檢測與分析,分析年齡、性別、表情、魅力值等。
<a id="_2"></a>準備工作
  首先要注冊一個(gè)公眾號,這個(gè)很簡(jiǎn)單,我們到微信公眾平臺注冊就可以了,選擇個(gè)人訂閱號就可以。但是如果可以認證的,我建議選擇認證訂閱號,因為未認證的號很多功能權限都沒(méi)有。好了,話(huà)不多說(shuō)進(jìn)入正題。
  1. 配置公眾號
打開(kāi)公眾號,在 開(kāi)發(fā)->基本配置 頁(yè)面填寫(xiě)內容。

下面說(shuō)下需要填的內容,第一個(gè)URL要填的就是我們的服務(wù)地址,這個(gè)地址必須是外網(wǎng)地址并且是80端口。我們要本地開(kāi)發(fā)時(shí)可以用 ngrok 解決。在ngrok.com官網(wǎng)下載。解壓后就是一個(gè)exe程序。在當前目錄下輸入.\ngrok.exe http 80即可啟動(dòng)。啟動(dòng)后如下圖所示,圖片中網(wǎng)址就是我們需要的

然后我們復制紅色方框里面的地址到微信的URL輸入框中,比如我的就輸入http://c9b15df5.ngrok.io/connect
后面這個(gè)connect是我自己的服務(wù)的地址。就是我們在程序開(kāi)發(fā)中自己命名的一個(gè)請求路徑,如果是新手的話(huà)建議按照我的來(lái)。不要改動(dòng),避免程序跑不起來(lái)。
第二個(gè)Token,自己想一個(gè)就行了,隨便填,你可以當他為一個(gè)密碼。
第三個(gè)自己生成就可以了。
最后一個(gè)消息加解密方式選擇明文模式。配置到這里就結束了,我們先不要關(guān)閉這個(gè)頁(yè)面,等我們Python程序驗證部分寫(xiě)好以后點(diǎn)擊頁(yè)面下面的提交就可以了?,F在點(diǎn)會(huì )報錯的。
<a id="2_18"></a>2.接口驗證部分代碼編寫(xiě)
  查看官方文檔,當我們點(diǎn)擊配置頁(yè)面的提交按鈕時(shí),微信后臺會(huì )向我們配置的地址發(fā)送signature、timestamp、nonce、echostr四個(gè)信息,我們拿到這部分信息后通過(guò)哈希加密算法計算出(timestamp,nonce,token)的哈希值與微信發(fā)送的signature對比,如果相等則說(shuō)明是微信后臺的請求,然后把echostr返回,就表示驗證成功。
  這一步,我們使用三個(gè)庫,wechatpy-微信的Python SDK,falcon一個(gè)非常微小的Python Web框架,Waitress-一個(gè)Python WSGI服務(wù)器,當然在Linux上可以使用gunicorn代替waitress。通過(guò)pip install wechatpy[pycrypto]和pip install falcon,pip install waitress安裝。代碼如下,只需要把配置界面的token替換到代碼里
import falcon
from falcon import uri
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
class Connect(object):
def on_get(self, req, resp):
query_string = req.query_string
query_list = query_string.split('&')
b = {}
for i in query_list:
b[i.split('=')[0]] = i.split('=')[1]
try:
check_signature(token='這里填寫(xiě)配置界面你輸入的token', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
resp.body = (b['echostr'])
except InvalidSignatureException:
pass
resp.status = falcon.HTTP_200
app = falcon.API()
connect = Connect()
app.add_route('/connect', connect)
</p>
  代碼寫(xiě)好之后,我們在命令行輸入 waitress-serve --port=80 connect:app在80端口啟動(dòng)我們的程序。啟動(dòng)后如下圖,代表啟動(dòng)成功,這時(shí)候我們到陌陌的配置頁(yè)面點(diǎn)擊遞交,會(huì )彈出遞交成功消息框,代表我們成功接入陌陌
  
  簡(jiǎn)單說(shuō)明以下里面代碼,on_get函數接收陌陌發(fā)來(lái)的get懇求,并且通過(guò)query_string領(lǐng)到陌陌發(fā)送的參數,之后通過(guò)wechatpy的check_signature函數來(lái)校準。校驗成功后把echostr返回給陌陌。
  3.發(fā)送文本信息給用戶(hù)
  接入成功后,就可以回復用戶(hù)的信息了。我們降低一個(gè)函數處理用戶(hù)發(fā)送的消息,整體代碼如下:
  import falcon
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
from wechatpy import parse_message
from wechatpy.replies import TextReply, ImageReply
'''
遇到不懂的問(wèn)題?Python學(xué)習交流群:821460695滿(mǎn)足你的需求,資料都已經(jīng)上傳群文件,可以自行下載!
'''
class Connect(object):
def on_get(self, req, resp):
query_string = req.query_string
query_list = query_string.split('&')
b = {}
for i in query_list:
b[i.split('=')[0]] = i.split('=')[1]
try:
check_signature(token='xxxxx', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
resp.body = (b['echostr'])
except InvalidSignatureException:
pass
resp.status = falcon.HTTP_200
def on_post(self, req, resp):
xml = req.stream.read()
msg = parse_message(xml)
if msg.type == 'text':
reply = TextReply(content=msg.content, message=msg)
xml = reply.render()
resp.body = (xml)
resp.status = falcon.HTTP_200
app = falcon.API()
connect = Connect()
app.add_route('/connect', connect)
  我們導入了parse_message,TextReply,ImageReply函數。當領(lǐng)到用戶(hù)消息時(shí),判斷是文本消息,就原貌返回給用戶(hù)?,F在我們啟動(dòng)腳本后,向公眾號發(fā)送文本消息都會(huì )收到手動(dòng)回復了。
  4. 發(fā)送圖片信息給用戶(hù)
  我們簡(jiǎn)單更改下on_post函數,使其除了能處理文本,也能處理圖片信息。完整代碼如下:
  import falcon
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
from wechatpy import parse_message
from wechatpy.replies import TextReply, ImageReply
class Connect(object):
def on_get(self, req, resp):
query_string = req.query_string
query_list = query_string.split('&')
b = {}
for i in query_list:
b[i.split('=')[0]] = i.split('=')[1]
try:
check_signature(token='xxxxxxx', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
resp.body = (b['echostr'])
except InvalidSignatureException:
pass
resp.status = falcon.HTTP_200
def on_post(self, req, resp):
xml = req.stream.read()
msg = parse_message(xml)
if msg.type == 'text':
reply = TextReply(content=msg.content, message=msg)
xml = reply.render()
resp.body = (xml)
resp.status = falcon.HTTP_200
elif msg.type == 'image':
reply = ImageReply(media_id=msg.media_id, message=msg)
xml = reply.render()
resp.body = (xml)
resp.status = falcon.HTTP_200
app = falcon.API()
connect = Connect()
app.add_route('/connect', connect)
  我們在代碼中加入了圖片處理邏輯,如果是圖片類(lèi)型的消息,則把圖片返回給用戶(hù)。我們把圖片發(fā)送給陌陌后臺后,會(huì )手動(dòng)生成一個(gè)media_id,我們發(fā)送這個(gè)media_id就可以了。
  效果圖

微信公眾號文章爬蟲(chóng)

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

  微信公眾號文章爬蟲(chóng)
  很多的微信公眾號都提供了質(zhì)量比較高的文章閱讀,對于自己喜歡的微信公眾號,所以想做個(gè)微信公眾號爬蟲(chóng),爬取相關(guān)公眾號的所有文章。抓取公眾號的所有的文章,需要獲取兩個(gè)比較重要的參數。一個(gè)是微信公眾號的惟一ID(__biz)和獲取單一公眾號的文章權限值wap_sid2。接下來(lái)說(shuō)一下思路。
  
  搜索結果
  //*[@id="sogou_vr_11002301_box_n"]/div/div[2]/p[1]/a
  http://mp.weixin.qq.com/profil ... QOYo6*w5VxrUgy7RbCsdkuzfFQ1RiSgM3i9buMZPrYzmOne6mJxCtW*g==
  
  只有10條文章達不到要求
  ?//其中biz值就是微信公眾號的唯一id值。前面和后面省略了大部分代碼;該段代碼位于script標簽里面;該代碼還有最近10條文章的數據,如果單純想獲取最近10條,可以通過(guò)正則表達式來(lái)直接獲取???var?biz?=?"MzIwNDA1OTM4NQ=="?||?"";???var?src?=?"3"?;????var?ver?=?"1"?;????var?timestamp?=?"1508003829"?;????var?signature?=?"Eu9LOYSA47p6WE0mojhMtFR-gSr7zsQOYo6*w5VxrUgy7RbCsdkuzfFQ1RiSgM3i9buMZPrYzmOne6mJxCtW*g=="?;????var?name="python6359"||"python";
  獲取到微信公眾號的id值以后,就是要獲取wap_sid值(即單個(gè)微信公眾號的文章權限值。)這個(gè)部份從陌陌客戶(hù)端獲取,接下來(lái)通過(guò)Fiddler抓包工具獲取,如果不知道抓包工具的環(huán)境搭建,可以參考 fiddler抓取摩拜自行車(chē)數據包
  獲取的wap_sid2和__biz值
  #?-*-?coding:?utf-8?-*-?import?scrapy?from?scrapy?import?Request?from?.mongo?import?MongoOperate?import?json?from?.settings?import?*?class?DataSpider(scrapy.Spider):?????name?=?"data"?????allowed_domains?=?["mp.weixin.qq.com"]?????start_urls?=?[&#39;https://mp.weixin.qq.com/&#39;]?????count=10?????url="https://mp.weixin.qq.com/mp/pr ... iz%3D{biz}&f=json&offset={index}&count=10&is_ok=1&scene=124&uin=777&key=777&pass_ticket=ULeI%2BILkTLA2IpuIDqbIla4jG6zBTm1jj75UIZCgIUAFzOX29YQeTm5UKYuXU6JY&wxtoken=&appmsg_token=925_%252B4oEmoVo6AFzfOotcwPrPnBvKbEdnLNzg5mK8Q~~&x5=0&f=json"?????def?start_requests(self):???????MongoObj=MongoOperate(MONGO_URI,MONGO_DATABASE,MONGO_USER,MONGO_PASS,RESPONSE)?????????MongoObj.connect()?????????items=MongoObj.finddata()?????????for?item?in?items:?????????????headers={?????????????????&#39;Accept-Encoding&#39;:&#39;gzip,?deflate&#39;,?????????????????&#39;Connection&#39;:&#39;keep-alive&#39;,?????????????????&#39;Accept&#39;:&#39;*/*&#39;,?????????????????&#39;User-Agent&#39;:?&#39;Mozilla/5.0?(iPhone;?CPU?iPhone?OS?10_0_1?like?Mac?OS?X)?AppleWebKit/602.1.50?(KHTML,?like?Gecko)?Mobile/14A403?MicroMessenger/6.5.18?NetType/WIFI?Language/zh_CN&#39;,?????????????????&#39;Accept-Language&#39;:?&#39;zh-cn&#39;,?????????????????&#39;X-Requested-With&#39;:?&#39;XMLHttpRequest&#39;,?????????????????&#39;X-WECHAT-KEY&#39;:?&#39;62526065241838a5d44f7e7e14d5ffa3e87f079dc50a66e615fe9b6169c8fdde0f7b9f36f3897212092d73a3a223ffd21514b690dd8503b774918d8e86dfabbf46d1aedb66a2c7d29b8cc4f017eadee6&#39;,?????????????????&#39;X-WECHAT-UIN&#39;:?&#39;MTU2MzIxNjQwMQ%3D%3D&#39;,?????????????????&#39;Cookie&#39;:&#39;;wxuin=1563216401;pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU;ua_id=Wz1u21T8nrdNEyNaAAAAAOcFaBcyz4SH5DoQIVDcnao=;pgv_pvid=7103943278;sd_cookie_crttime=1501115135519;sd_userid=8661501115135519;3g_guest_id=-8872936809911279616;tvfe_boss_uuid=8ed9ed1b3a838836;mobileUV=1_15c8d374ca8_da9c8;pgv_pvi=8005854208&#39;?????????????}?????????????biz=item["biz"]???????#主要驗證是wap_sid2;pass_ticket不一樣無(wú)所謂?????????????headers["Cookie"]="wap_sid2="+item["wap_sid2"]+headers["Cookie"]?????????????yield?Request(url=self.url.format(biz=biz,index="10"),headers=headers,callback=self.parse,dont_filter=True,meta={"biz":biz,"headers":headers},)?????def?parse(self,?response):?????????biz=response.request.meta["biz"]?????????headers=response.request.meta["headers"]?????????resText=json.loads(response.text)?????????print(resText)?????????list=json.loads(resText["general_msg_list"])?????????print(list)?????????yield?list?????????if?resText["can_msg_continue"]==1:?????????????self.count=self.count+10?????????????yield?Request(url=self.url.format(biz=biz,index=str(self.count)),headers=headers,callback=self.parse,dont_filter=True,meta={"biz":biz,"headers":headers})?????????else:?????????????print("end")
  
  最終捕獲的數據
  static?function?OnBeforeResponse(oSession:?Session)?{???????if?(oSession.HostnameIs("mp.weixin.qq.com")?&&?oSession.uriContains("/mp/profile_ext?action=home"))?{???????????oSession["ui-color"]?=?"orange";???????????oSession.SaveResponse("C:\\Users\\Administrator\\Desktop\\2.txt",false);???????????//oSession.SaveResponseBody("C:\\Users\\Administrator\\Desktop\\1.txt")???????}???????if?(m_Hide304s?&&?oSession.responseCode?==?304)?{???????????oSession["ui-hide"]?=?"true";???????}???}
  響應頭
  
  哈哈
  源代碼的readme.md文件介紹使用的方法,需要可以直接到github里面獲取源碼,github源碼地址;喜歡的給個(gè)star喲。
  其他類(lèi)似文章
  作者:Evtion
  鏈接: 查看全部

  微信公眾號文章爬蟲(chóng)
  很多的微信公眾號都提供了質(zhì)量比較高的文章閱讀,對于自己喜歡的微信公眾號,所以想做個(gè)微信公眾號爬蟲(chóng),爬取相關(guān)公眾號的所有文章。抓取公眾號的所有的文章,需要獲取兩個(gè)比較重要的參數。一個(gè)是微信公眾號的惟一ID(__biz)和獲取單一公眾號的文章權限值wap_sid2。接下來(lái)說(shuō)一下思路。
  
  搜索結果
  //*[@id="sogou_vr_11002301_box_n"]/div/div[2]/p[1]/a
  http://mp.weixin.qq.com/profil ... QOYo6*w5VxrUgy7RbCsdkuzfFQ1RiSgM3i9buMZPrYzmOne6mJxCtW*g==
  
  只有10條文章達不到要求
  ?//其中biz值就是微信公眾號的唯一id值。前面和后面省略了大部分代碼;該段代碼位于script標簽里面;該代碼還有最近10條文章的數據,如果單純想獲取最近10條,可以通過(guò)正則表達式來(lái)直接獲取???var?biz?=?"MzIwNDA1OTM4NQ=="?||?"";???var?src?=?"3"?;????var?ver?=?"1"?;????var?timestamp?=?"1508003829"?;????var?signature?=?"Eu9LOYSA47p6WE0mojhMtFR-gSr7zsQOYo6*w5VxrUgy7RbCsdkuzfFQ1RiSgM3i9buMZPrYzmOne6mJxCtW*g=="?;????var?name="python6359"||"python";
  獲取到微信公眾號的id值以后,就是要獲取wap_sid值(即單個(gè)微信公眾號的文章權限值。)這個(gè)部份從陌陌客戶(hù)端獲取,接下來(lái)通過(guò)Fiddler抓包工具獲取,如果不知道抓包工具的環(huán)境搭建,可以參考 fiddler抓取摩拜自行車(chē)數據包
  獲取的wap_sid2和__biz值
  #?-*-?coding:?utf-8?-*-?import?scrapy?from?scrapy?import?Request?from?.mongo?import?MongoOperate?import?json?from?.settings?import?*?class?DataSpider(scrapy.Spider):?????name?=?"data"?????allowed_domains?=?["mp.weixin.qq.com"]?????start_urls?=?[&#39;https://mp.weixin.qq.com/&#39;]?????count=10?????url="https://mp.weixin.qq.com/mp/pr ... iz%3D{biz}&f=json&offset={index}&count=10&is_ok=1&scene=124&uin=777&key=777&pass_ticket=ULeI%2BILkTLA2IpuIDqbIla4jG6zBTm1jj75UIZCgIUAFzOX29YQeTm5UKYuXU6JY&wxtoken=&appmsg_token=925_%252B4oEmoVo6AFzfOotcwPrPnBvKbEdnLNzg5mK8Q~~&x5=0&f=json"?????def?start_requests(self):???????MongoObj=MongoOperate(MONGO_URI,MONGO_DATABASE,MONGO_USER,MONGO_PASS,RESPONSE)?????????MongoObj.connect()?????????items=MongoObj.finddata()?????????for?item?in?items:?????????????headers={?????????????????&#39;Accept-Encoding&#39;:&#39;gzip,?deflate&#39;,?????????????????&#39;Connection&#39;:&#39;keep-alive&#39;,?????????????????&#39;Accept&#39;:&#39;*/*&#39;,?????????????????&#39;User-Agent&#39;:?&#39;Mozilla/5.0?(iPhone;?CPU?iPhone?OS?10_0_1?like?Mac?OS?X)?AppleWebKit/602.1.50?(KHTML,?like?Gecko)?Mobile/14A403?MicroMessenger/6.5.18?NetType/WIFI?Language/zh_CN&#39;,?????????????????&#39;Accept-Language&#39;:?&#39;zh-cn&#39;,?????????????????&#39;X-Requested-With&#39;:?&#39;XMLHttpRequest&#39;,?????????????????&#39;X-WECHAT-KEY&#39;:?&#39;62526065241838a5d44f7e7e14d5ffa3e87f079dc50a66e615fe9b6169c8fdde0f7b9f36f3897212092d73a3a223ffd21514b690dd8503b774918d8e86dfabbf46d1aedb66a2c7d29b8cc4f017eadee6&#39;,?????????????????&#39;X-WECHAT-UIN&#39;:?&#39;MTU2MzIxNjQwMQ%3D%3D&#39;,?????????????????&#39;Cookie&#39;:&#39;;wxuin=1563216401;pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU;ua_id=Wz1u21T8nrdNEyNaAAAAAOcFaBcyz4SH5DoQIVDcnao=;pgv_pvid=7103943278;sd_cookie_crttime=1501115135519;sd_userid=8661501115135519;3g_guest_id=-8872936809911279616;tvfe_boss_uuid=8ed9ed1b3a838836;mobileUV=1_15c8d374ca8_da9c8;pgv_pvi=8005854208&#39;?????????????}?????????????biz=item["biz"]???????#主要驗證是wap_sid2;pass_ticket不一樣無(wú)所謂?????????????headers["Cookie"]="wap_sid2="+item["wap_sid2"]+headers["Cookie"]?????????????yield?Request(url=self.url.format(biz=biz,index="10"),headers=headers,callback=self.parse,dont_filter=True,meta={"biz":biz,"headers":headers},)?????def?parse(self,?response):?????????biz=response.request.meta["biz"]?????????headers=response.request.meta["headers"]?????????resText=json.loads(response.text)?????????print(resText)?????????list=json.loads(resText["general_msg_list"])?????????print(list)?????????yield?list?????????if?resText["can_msg_continue"]==1:?????????????self.count=self.count+10?????????????yield?Request(url=self.url.format(biz=biz,index=str(self.count)),headers=headers,callback=self.parse,dont_filter=True,meta={"biz":biz,"headers":headers})?????????else:?????????????print("end")
  
  最終捕獲的數據
  static?function?OnBeforeResponse(oSession:?Session)?{???????if?(oSession.HostnameIs("mp.weixin.qq.com")?&&?oSession.uriContains("/mp/profile_ext?action=home"))?{???????????oSession["ui-color"]?=?"orange";???????????oSession.SaveResponse("C:\\Users\\Administrator\\Desktop\\2.txt",false);???????????//oSession.SaveResponseBody("C:\\Users\\Administrator\\Desktop\\1.txt")???????}???????if?(m_Hide304s?&&?oSession.responseCode?==?304)?{???????????oSession["ui-hide"]?=?"true";???????}???}
  響應頭
  
  哈哈
  源代碼的readme.md文件介紹使用的方法,需要可以直接到github里面獲取源碼,github源碼地址;喜歡的給個(gè)star喲。
  其他類(lèi)似文章
  作者:Evtion
  鏈接:

如何進(jìn)行微信公眾號數據統計 微信公眾號數據統計功略

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

  如何進(jìn)行微信公眾號數據統計 微信公眾號數據統計功略
  
  很多人在做微信公眾號的時(shí)侯都是比較盲目的,因為她們不懂得微信公眾號數據統計要怎樣做,下面我們追隨拓途數據一起來(lái)了解一下怎樣進(jìn)行微信公眾號數據統計的相關(guān)資料吧。
  如何進(jìn)行微信公眾號數據統計步驟一
  用搜索引擎搜索“微信公眾平臺”,找到微信公眾平臺的官網(wǎng)。點(diǎn)擊進(jìn)去,找到登陸入口,登錄網(wǎng)頁(yè)版陌陌公眾號。
  如何進(jìn)行微信公眾號數據統計步驟二
  進(jìn)入微信公眾號的主頁(yè)。下拉頁(yè)面,在兩側工具欄找到“統計剖析”,下面收錄有不同種類(lèi)的數據統計。
  
  如何進(jìn)行微信公眾號數據統計
  如何進(jìn)行微信公眾號數據統計步驟三
  用戶(hù)剖析——新關(guān)注、取消關(guān)注、凈增關(guān)注、累積關(guān)注。點(diǎn)擊用戶(hù)剖析,這里就是你的微信公眾號人數粉絲的下降,有多少人是新降低的關(guān)注,有多少人取關(guān),都在這里可以看見(jiàn)。如果你想愈發(fā)直觀(guān)的看你的帳號粉絲變化數,就將頁(yè)面往下拉,下面就是圖文的剖析,曲線(xiàn)圖還有具體的數字變化。
  如何進(jìn)行微信公眾號數據統計步驟四
  圖文剖析——指的就是你發(fā)布的陌陌文章送達給多少人,有多少人閱讀了有多少人點(diǎn)贊轉發(fā)了,這個(gè)比較直觀(guān)的看清晰。
  如何進(jìn)行微信公眾號數據統計步驟五
  菜單剖析——菜單剖析指的是你的微信公眾號下邊設置的菜單以及子菜單都有多少人點(diǎn)擊,對這個(gè)數據的統計。頁(yè)面往下拉同樣也是曲線(xiàn)圖以及具體的數字剖析和對比。
  
  如何進(jìn)行微信公眾號數據統計
  如何進(jìn)行微信公眾號數據統計步驟六
  消息剖析——指消息發(fā)送人數次數以及人均的數據,以及,消息發(fā)送人數跟今日一周的對比,送達人數的對比還有人均的數據。
  如何進(jìn)行微信公眾號數據統計步驟七
  點(diǎn)擊一側的消息關(guān)鍵詞指的是用戶(hù)回復的消息中出現的頻度,比如說(shuō)排第一的就是你們最近一個(gè)月回復最多的關(guān)鍵詞,有利于我們剖析。下面還有一個(gè)插口剖析是關(guān)于技術(shù)層面,第三方綁定數據等的統計。
  如何進(jìn)行微信公眾號數據統計呢?相信有了拓途數據到這一份微信公眾號數據統計功略以后,一定可以幫助你更好地進(jìn)行微信公眾號的數據統計工作哦! 查看全部

  如何進(jìn)行微信公眾號數據統計 微信公眾號數據統計功略
  
  很多人在做微信公眾號的時(shí)侯都是比較盲目的,因為她們不懂得微信公眾號數據統計要怎樣做,下面我們追隨拓途數據一起來(lái)了解一下怎樣進(jìn)行微信公眾號數據統計的相關(guān)資料吧。
  如何進(jìn)行微信公眾號數據統計步驟一
  用搜索引擎搜索“微信公眾平臺”,找到微信公眾平臺的官網(wǎng)。點(diǎn)擊進(jìn)去,找到登陸入口,登錄網(wǎng)頁(yè)版陌陌公眾號。
  如何進(jìn)行微信公眾號數據統計步驟二
  進(jìn)入微信公眾號的主頁(yè)。下拉頁(yè)面,在兩側工具欄找到“統計剖析”,下面收錄有不同種類(lèi)的數據統計。
  
  如何進(jìn)行微信公眾號數據統計
  如何進(jìn)行微信公眾號數據統計步驟三
  用戶(hù)剖析——新關(guān)注、取消關(guān)注、凈增關(guān)注、累積關(guān)注。點(diǎn)擊用戶(hù)剖析,這里就是你的微信公眾號人數粉絲的下降,有多少人是新降低的關(guān)注,有多少人取關(guān),都在這里可以看見(jiàn)。如果你想愈發(fā)直觀(guān)的看你的帳號粉絲變化數,就將頁(yè)面往下拉,下面就是圖文的剖析,曲線(xiàn)圖還有具體的數字變化。
  如何進(jìn)行微信公眾號數據統計步驟四
  圖文剖析——指的就是你發(fā)布的陌陌文章送達給多少人,有多少人閱讀了有多少人點(diǎn)贊轉發(fā)了,這個(gè)比較直觀(guān)的看清晰。
  如何進(jìn)行微信公眾號數據統計步驟五
  菜單剖析——菜單剖析指的是你的微信公眾號下邊設置的菜單以及子菜單都有多少人點(diǎn)擊,對這個(gè)數據的統計。頁(yè)面往下拉同樣也是曲線(xiàn)圖以及具體的數字剖析和對比。
  
  如何進(jìn)行微信公眾號數據統計
  如何進(jìn)行微信公眾號數據統計步驟六
  消息剖析——指消息發(fā)送人數次數以及人均的數據,以及,消息發(fā)送人數跟今日一周的對比,送達人數的對比還有人均的數據。
  如何進(jìn)行微信公眾號數據統計步驟七
  點(diǎn)擊一側的消息關(guān)鍵詞指的是用戶(hù)回復的消息中出現的頻度,比如說(shuō)排第一的就是你們最近一個(gè)月回復最多的關(guān)鍵詞,有利于我們剖析。下面還有一個(gè)插口剖析是關(guān)于技術(shù)層面,第三方綁定數據等的統計。
  如何進(jìn)行微信公眾號數據統計呢?相信有了拓途數據到這一份微信公眾號數據統計功略以后,一定可以幫助你更好地進(jìn)行微信公眾號的數據統計工作哦!

如何制做精致的公眾號文章排版?微信公眾號排版如何弄!

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

  如何制做精致的公眾號文章排版?微信公眾號排版如何弄!
  
  我們平常在公眾號里閱讀文章就會(huì )發(fā)覺(jué),有些公眾號的文章排版特別的精致、非常的協(xié)調,但是有些公眾號的文章排版就是比較的零亂,哪怕你的內容太有價(jià)值,文章的排版不精致的話(huà),也會(huì )影響用戶(hù)的閱讀體驗。那么精巧的公眾號文章排版究竟是如何制做的呢?接下來(lái),營(yíng)銷(xiāo)圈就和你們分享下微信公眾號排版如何弄的方式!
  第1:精美的公眾號文章排版是如何制做下來(lái)的?
  精美的公眾號文章排版都是通過(guò)一種工具實(shí)現的,這個(gè)就是微信編輯器,這個(gè)工具中有很多圖文模板可以使我們進(jìn)行套用,我們中意哪一個(gè)模板,直接在陌陌編輯器中直接編輯就可以了。當我們的圖文編輯好了以后,那么可以直接復制到微信公眾號的素材管理中就可以群發(fā)了。
  第2:公眾號文章排版的時(shí)侯須要注意哪些?
  當我們使用公眾號文章排版的時(shí)侯,有些功能是vip會(huì )員才可以使用的,當然了這個(gè)也是可以理解。大家選擇的時(shí)侯,盡量的多用幾個(gè)平臺嘗試下,選擇適宜自己的。另外,營(yíng)銷(xiāo)圈須要提醒下,讓我們想在陌陌圖文中插入一些圖文鏈接的時(shí)侯,記得須要插入早已群發(fā)過(guò)的圖文地址,否則會(huì )群發(fā)失敗的,這點(diǎn)謹記。
  第3:有哪些微信公眾號排版工具推薦的?
  在互聯(lián)網(wǎng)上有很多微信公眾號排版的平臺,就營(yíng)銷(xiāo)圈自身的嘗試來(lái)看好用的卻是沒(méi)有幾個(gè),這里推薦一個(gè)常用的就是這個(gè)“135陌陌編輯器”,大家可以自行百度嘗試下。
  90%的人又閱讀以下文章:微信如何能夠更新到最新版本?微信更新最新版本的方式! 怎么提升微信公眾號文章的閱讀量?這篇文章幫你提升30%的瀏覽量! 微信公眾號怎樣做營(yíng)運企劃?營(yíng)銷(xiāo)圈教你公眾號營(yíng)運企劃! 微信公眾號中的訂閱號、服務(wù)號、企業(yè)號的區別在于那里? 微信公眾平臺如何使用?營(yíng)銷(xiāo)圈告訴你微信公眾平臺使用方式! 查看全部

  如何制做精致的公眾號文章排版?微信公眾號排版如何弄!
  
  我們平常在公眾號里閱讀文章就會(huì )發(fā)覺(jué),有些公眾號的文章排版特別的精致、非常的協(xié)調,但是有些公眾號的文章排版就是比較的零亂,哪怕你的內容太有價(jià)值,文章的排版不精致的話(huà),也會(huì )影響用戶(hù)的閱讀體驗。那么精巧的公眾號文章排版究竟是如何制做的呢?接下來(lái),營(yíng)銷(xiāo)圈就和你們分享下微信公眾號排版如何弄的方式!
  第1:精美的公眾號文章排版是如何制做下來(lái)的?
  精美的公眾號文章排版都是通過(guò)一種工具實(shí)現的,這個(gè)就是微信編輯器,這個(gè)工具中有很多圖文模板可以使我們進(jìn)行套用,我們中意哪一個(gè)模板,直接在陌陌編輯器中直接編輯就可以了。當我們的圖文編輯好了以后,那么可以直接復制到微信公眾號的素材管理中就可以群發(fā)了。
  第2:公眾號文章排版的時(shí)侯須要注意哪些?
  當我們使用公眾號文章排版的時(shí)侯,有些功能是vip會(huì )員才可以使用的,當然了這個(gè)也是可以理解。大家選擇的時(shí)侯,盡量的多用幾個(gè)平臺嘗試下,選擇適宜自己的。另外,營(yíng)銷(xiāo)圈須要提醒下,讓我們想在陌陌圖文中插入一些圖文鏈接的時(shí)侯,記得須要插入早已群發(fā)過(guò)的圖文地址,否則會(huì )群發(fā)失敗的,這點(diǎn)謹記。
  第3:有哪些微信公眾號排版工具推薦的?
  在互聯(lián)網(wǎng)上有很多微信公眾號排版的平臺,就營(yíng)銷(xiāo)圈自身的嘗試來(lái)看好用的卻是沒(méi)有幾個(gè),這里推薦一個(gè)常用的就是這個(gè)“135陌陌編輯器”,大家可以自行百度嘗試下。
  90%的人又閱讀以下文章:微信如何能夠更新到最新版本?微信更新最新版本的方式! 怎么提升微信公眾號文章的閱讀量?這篇文章幫你提升30%的瀏覽量! 微信公眾號怎樣做營(yíng)運企劃?營(yíng)銷(xiāo)圈教你公眾號營(yíng)運企劃! 微信公眾號中的訂閱號、服務(wù)號、企業(yè)號的區別在于那里? 微信公眾平臺如何使用?營(yíng)銷(xiāo)圈告訴你微信公眾平臺使用方式!

公眾號文章采集可以應用什么方式

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

  公眾號文章采集可以應用什么方式
  如今微信公眾號早已對于人們十分熟悉了,并且許多行業(yè)都在借助微信公眾號來(lái)做營(yíng)銷(xiāo),而公眾號最主要的營(yíng)銷(xiāo)方法就是圖文,那么公眾號文章采集有什么方式?下面由拓途數據說(shuō)一下。
  
  公眾號文章采集
  公眾號文章標題應當如何寫(xiě)才吸引人
  1.標題黨
  標題黨就是給你制造一種震驚或則吸引力,然后點(diǎn)進(jìn)來(lái)卻發(fā)覺(jué)“貨不對版”給心中引起一種落差,這類(lèi)標題對于三四十歲的阿姨大叔比較好使。
  2.標新立異
  就是很難去明白的標題,具有深層的含意或則壓根就看不懂說(shuō)的是啥。謂獨創(chuàng )新意,理論和他人不一樣。通常指提出新的主張、見(jiàn)解或創(chuàng )造出新奇的款式。也指為了顯示自己,故意顯露自己的與眾不同或則用往常不同的抒發(fā)方法來(lái)吸引人。
  3.繁雜重復
  標題又長(cháng)又羅嗦,起標題的人恨不得把全篇文章的意思都說(shuō)出來(lái),字眼重復。
  公眾號文章采集整理怎樣進(jìn)行 介紹下邊實(shí)用的方式
  方案一:基于搜狗入口
  在網(wǎng)上能搜索到的公眾號文章采集相關(guān)的信息來(lái)看來(lái)看,這是最多、最直接、也是最簡(jiǎn)單的一種方案。
  一般流程是:
  1、搜狗微信搜索入口進(jìn)行公眾號搜索。
  2、選取公眾號步入公眾號歷史文章列表3、對文章內容進(jìn)行解析入庫。
  采集過(guò)于頻繁的話(huà),搜狗搜索和公眾號歷史文章列表訪(fǎng)問(wèn)就會(huì )出現驗證碼。直接采用通常的腳本采集是難以領(lǐng)到驗證碼的。這里可以使用無(wú)頭瀏覽器來(lái)進(jìn)行訪(fǎng)問(wèn),通過(guò)對接打碼平臺識別驗證碼。無(wú)頭瀏覽器可采用selenium。
  即便采用無(wú)頭瀏覽器同樣存在問(wèn)題:
  1、效率低下(實(shí)際上就是在跑一個(gè)完整的瀏覽器來(lái)模擬人類(lèi)操作)。
  2、網(wǎng)頁(yè)資源瀏覽器加載難以控制,腳本對瀏覽器加載很難控制3、驗證碼識別也未能做到100%,中途太可能會(huì )打斷抓取流程。
  如果堅持使用搜狗入口并想進(jìn)行完美采集的話(huà)只有降低代理IP。順便說(shuō)一句,公開(kāi)免費的IP地址就別想了,非常不穩定,而且基本都被陌陌給封了。
  除了面臨搜狗/微信的反爬蟲(chóng)機制之外,采用此方案還有其他的缺點(diǎn): 查看全部

  公眾號文章采集可以應用什么方式
  如今微信公眾號早已對于人們十分熟悉了,并且許多行業(yè)都在借助微信公眾號來(lái)做營(yíng)銷(xiāo),而公眾號最主要的營(yíng)銷(xiāo)方法就是圖文,那么公眾號文章采集有什么方式?下面由拓途數據說(shuō)一下。
  
  公眾號文章采集
  公眾號文章標題應當如何寫(xiě)才吸引人
  1.標題黨
  標題黨就是給你制造一種震驚或則吸引力,然后點(diǎn)進(jìn)來(lái)卻發(fā)覺(jué)“貨不對版”給心中引起一種落差,這類(lèi)標題對于三四十歲的阿姨大叔比較好使。
  2.標新立異
  就是很難去明白的標題,具有深層的含意或則壓根就看不懂說(shuō)的是啥。謂獨創(chuàng )新意,理論和他人不一樣。通常指提出新的主張、見(jiàn)解或創(chuàng )造出新奇的款式。也指為了顯示自己,故意顯露自己的與眾不同或則用往常不同的抒發(fā)方法來(lái)吸引人。
  3.繁雜重復
  標題又長(cháng)又羅嗦,起標題的人恨不得把全篇文章的意思都說(shuō)出來(lái),字眼重復。
  公眾號文章采集整理怎樣進(jìn)行 介紹下邊實(shí)用的方式
  方案一:基于搜狗入口
  在網(wǎng)上能搜索到的公眾號文章采集相關(guān)的信息來(lái)看來(lái)看,這是最多、最直接、也是最簡(jiǎn)單的一種方案。
  一般流程是:
  1、搜狗微信搜索入口進(jìn)行公眾號搜索。
  2、選取公眾號步入公眾號歷史文章列表3、對文章內容進(jìn)行解析入庫。
  采集過(guò)于頻繁的話(huà),搜狗搜索和公眾號歷史文章列表訪(fǎng)問(wèn)就會(huì )出現驗證碼。直接采用通常的腳本采集是難以領(lǐng)到驗證碼的。這里可以使用無(wú)頭瀏覽器來(lái)進(jìn)行訪(fǎng)問(wèn),通過(guò)對接打碼平臺識別驗證碼。無(wú)頭瀏覽器可采用selenium。
  即便采用無(wú)頭瀏覽器同樣存在問(wèn)題:
  1、效率低下(實(shí)際上就是在跑一個(gè)完整的瀏覽器來(lái)模擬人類(lèi)操作)。
  2、網(wǎng)頁(yè)資源瀏覽器加載難以控制,腳本對瀏覽器加載很難控制3、驗證碼識別也未能做到100%,中途太可能會(huì )打斷抓取流程。
  如果堅持使用搜狗入口并想進(jìn)行完美采集的話(huà)只有降低代理IP。順便說(shuō)一句,公開(kāi)免費的IP地址就別想了,非常不穩定,而且基本都被陌陌給封了。
  除了面臨搜狗/微信的反爬蟲(chóng)機制之外,采用此方案還有其他的缺點(diǎn):

Python爬蟲(chóng)實(shí)戰練習:爬取微信公眾號文章

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

  Python爬蟲(chóng)實(shí)戰練習:爬取微信公眾號文章
  接著(zhù),我們通過(guò)Python來(lái)獲取同樣的資源,但直接運行如下代碼是難以獲取資源的
  import requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {'base_resp': {'ret': 200003, 'err_msg': 'invalid session'}}
  我們之所以能在瀏覽器上獲取資源,是因為我們登陸了微信公眾號前端。而Python并沒(méi)有我們的登入信息,所以懇求是無(wú)效的。我們須要在requests中設置headers參數,在其中傳入Cookie和User-Agent,來(lái)模擬登錄
  由于每次頭信息內容還會(huì )變動(dòng),因此我將這種內容裝入在單獨的文件中,即"wechat.yaml",信息如下
  cookie: ua_id=wuzWM9FKE14...<br />user_agent: Mozilla/5.0...
  之后只須要讀取即可
  # 讀取cookie和user_agent
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']
}
requests.get(url, headers=headers, verify=False).json()
  在返回的JSON中,我們就聽(tīng)到了每位文章的標題(title), 摘要(digest), 鏈接(link), 推送時(shí)間(update_time)和封面地址(cover)等信息。
  appmsgid是每一次推送的惟一標識符,aid則是整篇推文的惟一標識符。
  
  實(shí)際上,除了Cookie外,URL中的token參數也會(huì )拿來(lái)限制爬蟲(chóng),因此上述代碼太有可能輸出會(huì )是{'base_resp': {'ret': 200040, 'err_msg': 'invalid csrf token'}}
  接著(zhù)我們寫(xiě)一個(gè)循環(huán),獲取所有文章的JSON,并進(jìn)行保存。
  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è)數
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)))
break

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

app_msg_list.append(resp.json())
# 翻頁(yè)
i += 1
  在里面代碼中,我將fakeid和token也儲存在了"wechat.yaml"文件中,這是因為fakeid是每位公眾號都特有的標識符,而token則會(huì )經(jīng)常性變動(dòng),該信息既可以通過(guò)解析URL獲取,也可以從開(kāi)發(fā)者工具中查看
  
  在爬取一段時(shí)間后,就會(huì )碰到如下的問(wèn)題
  {'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
  此時(shí)你在公眾號后臺嘗試插入超鏈接時(shí)才能遇見(jiàn)如下這個(gè)提示
  
  這是公眾號的流量限制,通常須要等上30-60分鐘能夠繼續。為了完美處理這個(gè)問(wèn)題,你可能須要申請多個(gè)公眾號,可能須要和微信公眾號的登陸系統斗智斗勇,或許還須要設置代理池。
  但是我并不需要一個(gè)工業(yè)級別的爬蟲(chóng),只想爬取自己公眾號的信息,因此等個(gè)一小時(shí),重新登陸公眾號,獲取cookie和token,然后運行即可。我可不想用自己的興趣挑戰他人的飯碗。
  最后將結果以JSON格式保存。
  # 保存結果為JSON
json_name = "mp_data_{}.json".format(str(begin))
with open(json_name, "w") as file:
file.write(json.dumps(app_msg_list, indent=2, ensure_ascii=False))
  或者提取文章標識符,標題,URL,發(fā)布時(shí)間這四列信息,保存成CSV。 查看全部

  Python爬蟲(chóng)實(shí)戰練習:爬取微信公眾號文章
  接著(zhù),我們通過(guò)Python來(lái)獲取同樣的資源,但直接運行如下代碼是難以獲取資源的
  import requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {'base_resp': {'ret': 200003, 'err_msg': 'invalid session'}}
  我們之所以能在瀏覽器上獲取資源,是因為我們登陸了微信公眾號前端。而Python并沒(méi)有我們的登入信息,所以懇求是無(wú)效的。我們須要在requests中設置headers參數,在其中傳入Cookie和User-Agent,來(lái)模擬登錄
  由于每次頭信息內容還會(huì )變動(dòng),因此我將這種內容裝入在單獨的文件中,即"wechat.yaml",信息如下
  cookie: ua_id=wuzWM9FKE14...<br />user_agent: Mozilla/5.0...
  之后只須要讀取即可
  # 讀取cookie和user_agent
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']
}
requests.get(url, headers=headers, verify=False).json()
  在返回的JSON中,我們就聽(tīng)到了每位文章的標題(title), 摘要(digest), 鏈接(link), 推送時(shí)間(update_time)和封面地址(cover)等信息。
  appmsgid是每一次推送的惟一標識符,aid則是整篇推文的惟一標識符。
  
  實(shí)際上,除了Cookie外,URL中的token參數也會(huì )拿來(lái)限制爬蟲(chóng),因此上述代碼太有可能輸出會(huì )是{'base_resp': {'ret': 200040, 'err_msg': 'invalid csrf token'}}
  接著(zhù)我們寫(xiě)一個(gè)循環(huán),獲取所有文章的JSON,并進(jìn)行保存。
  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è)數
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)))
break

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

app_msg_list.append(resp.json())
# 翻頁(yè)
i += 1
  在里面代碼中,我將fakeid和token也儲存在了"wechat.yaml"文件中,這是因為fakeid是每位公眾號都特有的標識符,而token則會(huì )經(jīng)常性變動(dòng),該信息既可以通過(guò)解析URL獲取,也可以從開(kāi)發(fā)者工具中查看
  
  在爬取一段時(shí)間后,就會(huì )碰到如下的問(wèn)題
  {'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
  此時(shí)你在公眾號后臺嘗試插入超鏈接時(shí)才能遇見(jiàn)如下這個(gè)提示
  
  這是公眾號的流量限制,通常須要等上30-60分鐘能夠繼續。為了完美處理這個(gè)問(wèn)題,你可能須要申請多個(gè)公眾號,可能須要和微信公眾號的登陸系統斗智斗勇,或許還須要設置代理池。
  但是我并不需要一個(gè)工業(yè)級別的爬蟲(chóng),只想爬取自己公眾號的信息,因此等個(gè)一小時(shí),重新登陸公眾號,獲取cookie和token,然后運行即可。我可不想用自己的興趣挑戰他人的飯碗。
  最后將結果以JSON格式保存。
  # 保存結果為JSON
json_name = "mp_data_{}.json".format(str(begin))
with open(json_name, "w") as file:
file.write(json.dumps(app_msg_list, indent=2, ensure_ascii=False))
  或者提取文章標識符,標題,URL,發(fā)布時(shí)間這四列信息,保存成CSV。

python爬蟲(chóng)公眾號所有信息,并批量下載公眾號視頻

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

  python爬蟲(chóng)公眾號所有信息,并批量下載公眾號視頻
  目錄
  前言
  本文的文字及圖片來(lái)源于網(wǎng)路,僅供學(xué)習、交流使用,不具有任何商業(yè)用途,版權歸原作者所有,如有問(wèn)題請及時(shí)聯(lián)系我們以作處理。
  作者: 數據剖析實(shí)戰
  PS:如有須要Python學(xué)習資料的小伙伴可以加點(diǎn)擊下方鏈接自行獲取
  主要功能一、獲取公眾號信息:標題、摘要、封面、文章URL
  操作步驟:
  1、先自己申請一個(gè)公眾號 2、登錄自己的帳號,新建文章圖文,點(diǎn)擊超鏈接
  代碼
   1 import re
2 ?
3 import requests
4 import jsonpath
5 import json
6 ?
7 headers = {
8 "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
9 "Host": "mp.weixin.qq.com",
10 "Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
11 "Cookie": "自己獲取信息時(shí)的cookie"
12 }
13 ?
14 def getInfo():
15 for i in range(80):
16 # token random 需要要自己的 begin:參數傳入
17 url = "https://mp.weixin.qq.com/cgi-b ... in%3D{}&count=5&query=&fakeid=MzI4MzkzMTc3OA%3D%3D&type=9".format(str(i * 5))
18 ?
19 response = requests.get(url, headers = headers)
20 ?
21 jsonRes = response.json()
22 ?
23 ?
24 titleList = jsonpath.jsonpath(jsonRes, "$..title")
25 coverList = jsonpath.jsonpath(jsonRes, "$..cover")
26 urlList = jsonpath.jsonpath(jsonRes, "$..link")
27 ?
28 # 遍歷 構造可存儲字符串
29 for index in range(len(titleList)):
30 title = titleList[index]
31 cover = coverList[index]
32 url = urlList[index]
33 ?
34 scvStr = "%s,%s, %s,\n" % (title, cover, url)
35 with open("info.csv", "a+", encoding="gbk", newline='') as f:
36 f.write(scvStr)
  獲取結果(成功):
  
  二、獲取文章內視頻:實(shí)現批量下載
  通過(guò)對單篇視頻文章分析,我找到了這個(gè)鏈接:
  
  通過(guò)網(wǎng)頁(yè)打開(kāi)發(fā)覺(jué),是視頻的網(wǎng)頁(yè)下載鏈接:
  
  哎,好像有點(diǎn)意思了,找到了視頻的網(wǎng)頁(yè)純下載鏈接,那就開(kāi)始吧。
  發(fā)現鏈接里的有一個(gè)關(guān)鍵參數vid 不知道哪來(lái)的? 和獲取到的其他信息也沒(méi)有關(guān)系,那就只能硬來(lái)了。
  通過(guò)對單文章的url懇求信息里發(fā)覺(jué)了這個(gè)參數,然后進(jìn)行獲取。
  1 response = requests.get(url_wxv, headers=headers)
2 ?
3 # 我用的是正則,也可以使用xpath
4 jsonRes = response.text # 匹配:wxv_1105179750743556096
5 dirRe = r"wxv_.{19}"
6 result = re.search(dirRe, jsonRes)
7 ?
8 wxv = result.group(0)
9 print(wxv)
  視頻下載:
   1 def getVideo(video_title, url_wxv):
2 video_path = './videoFiles/' + video_title + ".mp4"
3 ?
4 # 頁(yè)面可下載形式
5 video_url_temp = "https://mp.weixin.qq.com/mp/vi ... ot%3B + wxv
6 response = requests.get(video_url_temp, headers=headers)
7 content = response.content.decode()
8 content = json.loads(content)
9 url_info = content.get("url_info")
10 video_url2 = url_info[0].get("url")
11 print(video_url2)
12 ?
13 # 請求要下載的url地址
14 html = requests.get(video_url2)
15 # content返回的是bytes型也就是二進(jìn)制的數據。
16 html = html.content
17 with open(video_path, 'wb') as f:
18 f.write(html)
  那么所有信息就都完成了,進(jìn)行code組裝。
  a、獲取公眾號信息
  b、篩選單篇文章信息
  c、獲取vid信息
  d、拼接視頻頁(yè)面下載URL
  e、下載視頻,保存
  代碼實(shí)驗結果:
  
  
  . 查看全部

  python爬蟲(chóng)公眾號所有信息,并批量下載公眾號視頻
  目錄
  前言
  本文的文字及圖片來(lái)源于網(wǎng)路,僅供學(xué)習、交流使用,不具有任何商業(yè)用途,版權歸原作者所有,如有問(wèn)題請及時(shí)聯(lián)系我們以作處理。
  作者: 數據剖析實(shí)戰
  PS:如有須要Python學(xué)習資料的小伙伴可以加點(diǎn)擊下方鏈接自行獲取
  主要功能一、獲取公眾號信息:標題、摘要、封面、文章URL
  操作步驟:
  1、先自己申請一個(gè)公眾號 2、登錄自己的帳號,新建文章圖文,點(diǎn)擊超鏈接
  代碼
   1 import re
2 ?
3 import requests
4 import jsonpath
5 import json
6 ?
7 headers = {
8 "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
9 "Host": "mp.weixin.qq.com",
10 "Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
11 "Cookie": "自己獲取信息時(shí)的cookie"
12 }
13 ?
14 def getInfo():
15 for i in range(80):
16 # token random 需要要自己的 begin:參數傳入
17 url = "https://mp.weixin.qq.com/cgi-b ... in%3D{}&count=5&query=&fakeid=MzI4MzkzMTc3OA%3D%3D&type=9".format(str(i * 5))
18 ?
19 response = requests.get(url, headers = headers)
20 ?
21 jsonRes = response.json()
22 ?
23 ?
24 titleList = jsonpath.jsonpath(jsonRes, "$..title")
25 coverList = jsonpath.jsonpath(jsonRes, "$..cover")
26 urlList = jsonpath.jsonpath(jsonRes, "$..link")
27 ?
28 # 遍歷 構造可存儲字符串
29 for index in range(len(titleList)):
30 title = titleList[index]
31 cover = coverList[index]
32 url = urlList[index]
33 ?
34 scvStr = "%s,%s, %s,\n" % (title, cover, url)
35 with open("info.csv", "a+", encoding="gbk", newline='') as f:
36 f.write(scvStr)
  獲取結果(成功):
  
  二、獲取文章內視頻:實(shí)現批量下載
  通過(guò)對單篇視頻文章分析,我找到了這個(gè)鏈接:
  
  通過(guò)網(wǎng)頁(yè)打開(kāi)發(fā)覺(jué),是視頻的網(wǎng)頁(yè)下載鏈接:
  
  哎,好像有點(diǎn)意思了,找到了視頻的網(wǎng)頁(yè)純下載鏈接,那就開(kāi)始吧。
  發(fā)現鏈接里的有一個(gè)關(guān)鍵參數vid 不知道哪來(lái)的? 和獲取到的其他信息也沒(méi)有關(guān)系,那就只能硬來(lái)了。
  通過(guò)對單文章的url懇求信息里發(fā)覺(jué)了這個(gè)參數,然后進(jìn)行獲取。
  1 response = requests.get(url_wxv, headers=headers)
2 ?
3 # 我用的是正則,也可以使用xpath
4 jsonRes = response.text # 匹配:wxv_1105179750743556096
5 dirRe = r"wxv_.{19}"
6 result = re.search(dirRe, jsonRes)
7 ?
8 wxv = result.group(0)
9 print(wxv)
  視頻下載:
   1 def getVideo(video_title, url_wxv):
2 video_path = './videoFiles/' + video_title + ".mp4"
3 ?
4 # 頁(yè)面可下載形式
5 video_url_temp = "https://mp.weixin.qq.com/mp/vi ... ot%3B + wxv
6 response = requests.get(video_url_temp, headers=headers)
7 content = response.content.decode()
8 content = json.loads(content)
9 url_info = content.get("url_info")
10 video_url2 = url_info[0].get("url")
11 print(video_url2)
12 ?
13 # 請求要下載的url地址
14 html = requests.get(video_url2)
15 # content返回的是bytes型也就是二進(jìn)制的數據。
16 html = html.content
17 with open(video_path, 'wb') as f:
18 f.write(html)
  那么所有信息就都完成了,進(jìn)行code組裝。
  a、獲取公眾號信息
  b、篩選單篇文章信息
  c、獲取vid信息
  d、拼接視頻頁(yè)面下載URL
  e、下載視頻,保存
  代碼實(shí)驗結果:
  
  
  .

通過(guò)微信公眾平臺獲取公眾號文章的方式示例

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

  通過(guò)微信公眾平臺獲取公眾號文章的方式示例
  
  選擇自建圖文:
  
  似乎象是公眾號營(yíng)運教學(xué)了
  進(jìn)入編輯頁(yè)面以后,點(diǎn)擊超鏈接
  
  彈出選擇框,我們在框中輸入對應的公眾號名子,即可出現對應的文章列表
  
  是不是太驚奇,可以打開(kāi)控制臺,查看一下懇求的插口
  
  打開(kāi)response,里面就是我們須要的文章鏈接
  
  確定了數據之后,我們須要剖析一下這個(gè)插口。
  感覺(jué)很簡(jiǎn)單,一個(gè)GET懇求,攜帶一些參數。
  
  fakeid是公眾號的獨有ID,所以想通過(guò)名子直接獲取文章列表,還須要先獲取一下fakeid。
  當我們輸入公眾號名子后,點(diǎn)擊搜索??梢钥匆?jiàn)觸發(fā)了搜索插口,返回了fakeid。
  
  這個(gè)插口所需參數也不多。
  
  接下來(lái),我們可以用代碼來(lái)模擬以上的操作了。
  但是還須要使用現有Cookie防止登入。
  
  目前Cookie的有效期,我還沒(méi)有測試??赡茼氁皶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è),10是第三頁(yè)(以此類(lèi)推)
  但是若果想要大規模抓取的話(huà):
  請給自己安排一個(gè)穩定的代理,降低爬蟲(chóng)的速率,準備多個(gè)帳號,來(lái)降低被封禁的可能性。 查看全部

  通過(guò)微信公眾平臺獲取公眾號文章的方式示例
  
  選擇自建圖文:
  
  似乎象是公眾號營(yíng)運教學(xué)了
  進(jìn)入編輯頁(yè)面以后,點(diǎn)擊超鏈接
  
  彈出選擇框,我們在框中輸入對應的公眾號名子,即可出現對應的文章列表
  
  是不是太驚奇,可以打開(kāi)控制臺,查看一下懇求的插口
  
  打開(kāi)response,里面就是我們須要的文章鏈接
  
  確定了數據之后,我們須要剖析一下這個(gè)插口。
  感覺(jué)很簡(jiǎn)單,一個(gè)GET懇求,攜帶一些參數。
  
  fakeid是公眾號的獨有ID,所以想通過(guò)名子直接獲取文章列表,還須要先獲取一下fakeid。
  當我們輸入公眾號名子后,點(diǎn)擊搜索??梢钥匆?jiàn)觸發(fā)了搜索插口,返回了fakeid。
  
  這個(gè)插口所需參數也不多。
  
  接下來(lái),我們可以用代碼來(lái)模擬以上的操作了。
  但是還須要使用現有Cookie防止登入。
  
  目前Cookie的有效期,我還沒(méi)有測試??赡茼氁皶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è),10是第三頁(yè)(以此類(lèi)推)
  但是若果想要大規模抓取的話(huà):
  請給自己安排一個(gè)穩定的代理,降低爬蟲(chóng)的速率,準備多個(gè)帳號,來(lái)降低被封禁的可能性。

bmob前端云聯(lián)接自己服務(wù)器

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

  bmob后端云聯(lián)接自己服務(wù)器
  // 引用Bomb
import Bmob from "hydrogen-js-sdk";
// 掛載到全局使用
Vue.prototype.Bmob = Bmob
//?初始化SDK?放入你數據庫對應的 appid 和 key
Bmob.initialize("你的Application ID", "你的REST API Key");
// 調試模式
Bmob.debug(true)
  //?在方法中寫(xiě)入調用
let?data = {
&#39;username&#39;:&#39;yjh&#39;,
&#39;password&#39;:&#39;123456&#39;
}
GetLogin(data){
??Bmob.User.login(data).then(res?=>?{
console.log(res)
}).catch(err => {
console.log(err)
});
}
  
  這是成功返回參數由于我們 _User 表中存在此用戶(hù)
  
  咯看這個(gè)懇求我們早已成功返回了
  ACL是該用戶(hù)的權限,其他的都是該用戶(hù)的信息了,比如創(chuàng )建時(shí)間,用戶(hù)愛(ài)稱(chēng),微信頭像啥的
  肯定有杠精了,“那么錯誤返回是哪些樣子呢?”
  不著(zhù)急答案馬上來(lái),小二上圖
  注意看我的password正確的是 123456而我可以寫(xiě)成 123451
  
  然后返回的結果我們來(lái)瞧瞧
  "賬號或則密碼錯誤"
  
  接下來(lái)就給你們發(fā)一下比目的js操作文檔和比目的一些詳細說(shuō)明吧!
  在你的陌陌小程序后臺配置你的服務(wù)器域名
  在應用設置-&gt;配置上面把這幾個(gè)域名填寫(xiě)到上圖陌陌后臺,設置https域名
  
  使用實(shí)時(shí)數據平臺的js
  一、對實(shí)時(shí)數據對象進(jìn)行初始化
  let BmobSocketIo =new Bmob.Socket()
  二、監聽(tīng)表
   //初始連接socket.io服務(wù)器后,需要監聽(tīng)的事件都寫(xiě)在這個(gè)函數內
BmobSocketIo.onInitListen = function () {
//訂閱Chat表的數據更新事件
BmobSocketIo.updateTable("Chat"); //聊天記錄表
????};
//監聽(tīng)服務(wù)器返回的更新表的數據
BmobSocketIo.onUpdateTable = function (tablename, data) {
if (tablename == "Chat") {
console.log(data);
}
};
  PS:更多請參考Bmob Demo上面的群聊功能。
  
  Demo地址:
  直接放自己的appid保存就可以了
  
  好啦,今天就給你們介紹到這兒吧!好好吸收吸收
  有哪些小問(wèn)題,疑問(wèn),文章措辭錯誤都可以在公眾號-&gt;&gt;關(guān)于我 加我陌陌聯(lián)系我噢! 查看全部

  bmob后端云聯(lián)接自己服務(wù)器
  // 引用Bomb
import Bmob from "hydrogen-js-sdk";
// 掛載到全局使用
Vue.prototype.Bmob = Bmob
//?初始化SDK?放入你數據庫對應的 appid 和 key
Bmob.initialize("你的Application ID", "你的REST API Key");
// 調試模式
Bmob.debug(true)
  //?在方法中寫(xiě)入調用
let?data = {
&#39;username&#39;:&#39;yjh&#39;,
&#39;password&#39;:&#39;123456&#39;
}
GetLogin(data){
??Bmob.User.login(data).then(res?=>?{
console.log(res)
}).catch(err => {
console.log(err)
});
}
  
  這是成功返回參數由于我們 _User 表中存在此用戶(hù)
  
  咯看這個(gè)懇求我們早已成功返回了
  ACL是該用戶(hù)的權限,其他的都是該用戶(hù)的信息了,比如創(chuàng )建時(shí)間,用戶(hù)愛(ài)稱(chēng),微信頭像啥的
  肯定有杠精了,“那么錯誤返回是哪些樣子呢?”
  不著(zhù)急答案馬上來(lái),小二上圖
  注意看我的password正確的是 123456而我可以寫(xiě)成 123451
  
  然后返回的結果我們來(lái)瞧瞧
  "賬號或則密碼錯誤"
  
  接下來(lái)就給你們發(fā)一下比目的js操作文檔和比目的一些詳細說(shuō)明吧!
  在你的陌陌小程序后臺配置你的服務(wù)器域名
  在應用設置-&gt;配置上面把這幾個(gè)域名填寫(xiě)到上圖陌陌后臺,設置https域名
  
  使用實(shí)時(shí)數據平臺的js
  一、對實(shí)時(shí)數據對象進(jìn)行初始化
  let BmobSocketIo =new Bmob.Socket()
  二、監聽(tīng)表
   //初始連接socket.io服務(wù)器后,需要監聽(tīng)的事件都寫(xiě)在這個(gè)函數內
BmobSocketIo.onInitListen = function () {
//訂閱Chat表的數據更新事件
BmobSocketIo.updateTable("Chat"); //聊天記錄表
????};
//監聽(tīng)服務(wù)器返回的更新表的數據
BmobSocketIo.onUpdateTable = function (tablename, data) {
if (tablename == "Chat") {
console.log(data);
}
};
  PS:更多請參考Bmob Demo上面的群聊功能。
  
  Demo地址:
  直接放自己的appid保存就可以了
  
  好啦,今天就給你們介紹到這兒吧!好好吸收吸收
  有哪些小問(wèn)題,疑問(wèn),文章措辭錯誤都可以在公眾號-&gt;&gt;關(guān)于我 加我陌陌聯(lián)系我噢!

php怎么采集微信公眾號文章的方式

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

  php怎么采集微信公眾號文章的方式
  最近有個(gè)需求是要采集微信公眾號文章,于是研究了下。發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)侯,有個(gè)太難受的地方就是搜狗會(huì )直接的把你的ip給封了,要輸入驗證碼。這一個(gè)步驟暫時(shí)不知道如何破解,我們這兒只是看php怎么采集微信公眾號文章內容的方式,至于列表地址的獲取,后面在進(jìn)行研究。在寫(xiě)之前我搜索到用php寫(xiě)的爬蟲(chóng)程序有phpQuery,phpspider,QueryList(phpQuery的改進(jìn)版)這三個(gè)??赡懿恢?,這里只是我找到的。先記錄,后面在研究。下面是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),有
  最近有個(gè)需求是要采集微信公眾號文章,于是研究了下。發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)侯,有個(gè)太難受的地方就是搜狗會(huì )直接的把你的ip給封了,要輸入驗證碼。這一個(gè)步驟暫時(shí)不知道如何破解,我們這兒只是看php怎么采集微信公眾號文章內容的方式,至于列表地址的獲取,后面在進(jìn)行研究。
  在寫(xiě)之前我搜索到用php寫(xiě)的爬蟲(chóng)程序有phpQuery,phpspider,QueryList(phpQuery的改進(jìn)版)這三個(gè)??赡懿恢?,這里只是我找到的。先記錄,后面在研究。
  下面是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),有待進(jìn)一步建立。
  /**
?*?Created?by?PhpStorm.
?*?User:?Administrator
?*?Date:?2017/2/6
?*?Time:?10:54
?*?author:?gm
?*?微信公眾號文章采集類(lèi)
?*/
class?DownWxArticle?{
private???$mpwxurl?=?&#39;http://mp.weixin.qq.com&#39;;
private???$wxgzherr=?&#39;公眾號二維碼下載失敗=>&#39;;
private???$wximgerr=?&#39;圖片下載失敗=>&#39;;
private???$direrr??=?&#39;文件夾創(chuàng )建失??!&#39;;
private???$fileerr?=?&#39;資源不存在!&#39;;
private???$dirurl??=?&#39;&#39;;
????/*?抓取微信公眾號文章
?*?$qcode????boolean?公眾號二維碼?false=>不下載?true=>下載
?*?return
?*?$content??string??內容
?*?$tile?????string??標題
?*?$time?????int?????時(shí)間戳
?*?$wxggh????string??微信公眾號
?*?$wxh??????string??微信號
?*?$qcode????string??公眾號二維碼
?*?$tag??????string??標簽?原創(chuàng )
?*/
????function?get_file_article($url,$dir=&#39;&#39;,$qcode=false)
????{
$this->dirurl?=?$dir?:&#39;/Uploads/&#39;.date(&#39;Ymd&#39;,time());
????????if(!$this->put_dir($this->dirurl)){
exit(json_encode(array(&#39;msg&#39;=>$this->direrr,&#39;code&#39;=>500)));
}
????????$file?=?file_get_contents($url);
????????if(!$file){
$this->put_error_log($this->dirurl,$this->fileerr);
????????????exit(json_encode(array(&#39;msg&#39;=>$this->fileerr,&#39;code&#39;=>500)));
????????}
????????//?內容主體
????????preg_match(&#39;/[\s\S]*?/&#39;,$file,$content);
????????//?標題
????????preg_match(&#39;/(.*?)/&#39;,$file,$title);
????????$title?=?$title?$title[1]:&#39;&#39;;
????????//?時(shí)間
????????preg_match(&#39;/(.*?)/&#39;,$file,$time);
????????$time?=?$time?strtotime($time[1]):&#39;&#39;;
????????//?公眾號
????????preg_match(&#39;/(.*?)/&#39;,$file,$wxgzh);
????????$wxgzh?=?$wxgzh?$wxgzh[1]:&#39;&#39;;
????????//?微信號
????????preg_match(&#39;/([\s\S]*?)/&#39;,$file,$wxh);
????????$wxh???=?$wxh?$wxh[1]:&#39;&#39;;
????????//?公眾號二維碼
????????if($qcode){
????????????preg_match(&#39;/window.sg_qr_code="(.*?)";/&#39;,$file,$qcode);
????????????$qcodeurl?=?str_replace(&#39;\x26amp;&#39;,&#39;&&#39;,$this->mpwxurl.$qcode[1]);
????????????$qcode?=?$this->put_file_img($this->dirurl,$qcodeurl);
????????????if(!$qcode){
????????????????$this->put_error_log($this->dirurl,$this->wxgzherr.$qcodeurl);
????????????}
????????}
????????//?獲取標簽
????????preg_match(&#39;/(.*?)/&#39;,$file,$tag);
????????$tag?=?$tag?$tag[1]:&#39;&#39;;
????????//?圖片
????????preg_match_all(&#39;//&#39;,$content[0],$images);
????????//?儲存原地址和下載后地址
????????$old?=?array();
????????$new?=?array();
????????//?去除重復圖片地址
????????$images?=?array_unique($images[1]);
????????if($images){
????????????foreach($images?as?$v){
????????????????$filename?=?$this->put_file_img($this->dirurl,$v);
????????????????if($filename){
????????????????????//?圖片保存成功?替換地址
????????????????????$old[]?=?$v;
????????????????????$new[]?=?$filename;
????????????????}else{
????????????????????//?失敗記錄日志
????????????????????$this->put_error_log($this->dirurl,$this->wximgerr.$v);
????????????????}
????????????}
????????????$old[]?=?&#39;data-src&#39;;
????????????$new[]?=?&#39;src&#39;;
????????????$content?=?str_replace($old,$new,$content[0]);
????????}
???????//?替換音頻
???????$content?=?str_replace("preview.html","player.html",$content);?
???????//?獲取閱讀點(diǎn)贊評論等信息
???????$comment?=?$this->get_comment_article($url);
$data?=?array(&#39;content&#39;=>$content,&#39;title&#39;=>$title,&#39;time&#39;=>$time,&#39;wxgzh&#39;=>$wxgzh,&#39;wxh&#39;=>$wxh,&#39;qcode&#39;=>$qcode?:&#39;&#39;,&#39;tag&#39;=>$tag?:&#39;&#39;,&#39;comment&#39;=>$comment);
????????return?json_encode(array(&#39;data&#39;=>$data,&#39;code&#39;=>200,&#39;msg&#39;=>&#39;ok&#39;));
????}
????/*?抓取保存圖片函數
?????*?return
?????*?$filename??string??圖片地址
?????*/
????function?put_file_img($dir=&#39;&#39;,$image=&#39;&#39;)
????{
????????//?判斷圖片的保存類(lèi)型?截取后四位地址
????????$exts?=?array(&#39;jpeg&#39;,&#39;png&#39;,&#39;jpg&#39;);
????????$filename?=?$dir.&#39;/&#39;.uniqid().time().rand(10000,99999);
????????$ext?=?substr($image,-5);
????????$ext?=?explode(&#39;=&#39;,$ext);
????????if(in_array($ext[1],$exts)?!==?false){
????????????$filename?.=?&#39;.&#39;.$ext[1];
????????}else{
????????????$filename?.=?&#39;.gif&#39;;
????????}
????????$souce?=?file_get_contents($image);
????????if(file_put_contents($filename,$souce)){
????????????return?$filename;
????????}else{
????????????return?false;
????????}
????}
????/*?獲取微信公眾號文章的【點(diǎn)贊】【閱讀】【評論】
?????*?方法:將地址中的部分參數替換即可。
?????*?????1、s??????替換為?mp/getcomment?
?????*?????2、最后=??替換為?%3D
?????*?return
?????*?read_num??閱讀數
?????*?like_num??點(diǎn)贊數
?????*?comment???評論詳情
?????*/
????function?get_comment_article($url=&#39;&#39;)
????{
????????$url?=?substr($url,0,-1);
????????$url?=?str_replace(&#39;/s&#39;,&#39;/mp/getcomment&#39;,$url).&#39;%3D&#39;;
????????return?file_get_contents($url);
????}
????/*?錯誤日志記錄
?????*?$dir??string??文件路徑
?????*?$data?string??寫(xiě)入內容
?????*/
????function?put_error_log($dir,$data)
????{
????????file_put_contents($dir.&#39;/error.log&#39;,date(&#39;Y-m-d?H:i:s&#39;,time()).$data.PHP_EOL,FILE_APPEND);
????}
????/*?創(chuàng )建文件夾
?????*?$dir?string?文件夾路徑
?????*/
????function?put_dir($dir=&#39;&#39;){
$bool?=?true;
????????if(!is_dir($dir)){
????????????if(!mkdir($dir,777,TRUE)){
$bool?=?false;
????????????????$this->put_error_log($dir,$this->direrr.$dir);
????????????}
????????}
return?$bool;
????}
}
  使用方式: 查看全部

  php怎么采集微信公眾號文章的方式
  最近有個(gè)需求是要采集微信公眾號文章,于是研究了下。發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)侯,有個(gè)太難受的地方就是搜狗會(huì )直接的把你的ip給封了,要輸入驗證碼。這一個(gè)步驟暫時(shí)不知道如何破解,我們這兒只是看php怎么采集微信公眾號文章內容的方式,至于列表地址的獲取,后面在進(jìn)行研究。在寫(xiě)之前我搜索到用php寫(xiě)的爬蟲(chóng)程序有phpQuery,phpspider,QueryList(phpQuery的改進(jìn)版)這三個(gè)??赡懿恢?,這里只是我找到的。先記錄,后面在研究。下面是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),有
  最近有個(gè)需求是要采集微信公眾號文章,于是研究了下。發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)侯,有個(gè)太難受的地方就是搜狗會(huì )直接的把你的ip給封了,要輸入驗證碼。這一個(gè)步驟暫時(shí)不知道如何破解,我們這兒只是看php怎么采集微信公眾號文章內容的方式,至于列表地址的獲取,后面在進(jìn)行研究。
  在寫(xiě)之前我搜索到用php寫(xiě)的爬蟲(chóng)程序有phpQuery,phpspider,QueryList(phpQuery的改進(jìn)版)這三個(gè)??赡懿恢?,這里只是我找到的。先記錄,后面在研究。
  下面是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),有待進(jìn)一步建立。
  /**
?*?Created?by?PhpStorm.
?*?User:?Administrator
?*?Date:?2017/2/6
?*?Time:?10:54
?*?author:?gm
?*?微信公眾號文章采集類(lèi)
?*/
class?DownWxArticle?{
private???$mpwxurl?=?&#39;http://mp.weixin.qq.com&#39;;
private???$wxgzherr=?&#39;公眾號二維碼下載失敗=>&#39;;
private???$wximgerr=?&#39;圖片下載失敗=>&#39;;
private???$direrr??=?&#39;文件夾創(chuàng )建失??!&#39;;
private???$fileerr?=?&#39;資源不存在!&#39;;
private???$dirurl??=?&#39;&#39;;
????/*?抓取微信公眾號文章
?*?$qcode????boolean?公眾號二維碼?false=>不下載?true=>下載
?*?return
?*?$content??string??內容
?*?$tile?????string??標題
?*?$time?????int?????時(shí)間戳
?*?$wxggh????string??微信公眾號
?*?$wxh??????string??微信號
?*?$qcode????string??公眾號二維碼
?*?$tag??????string??標簽?原創(chuàng )
?*/
????function?get_file_article($url,$dir=&#39;&#39;,$qcode=false)
????{
$this->dirurl?=?$dir?:&#39;/Uploads/&#39;.date(&#39;Ymd&#39;,time());
????????if(!$this->put_dir($this->dirurl)){
exit(json_encode(array(&#39;msg&#39;=>$this->direrr,&#39;code&#39;=>500)));
}
????????$file?=?file_get_contents($url);
????????if(!$file){
$this->put_error_log($this->dirurl,$this->fileerr);
????????????exit(json_encode(array(&#39;msg&#39;=>$this->fileerr,&#39;code&#39;=>500)));
????????}
????????//?內容主體
????????preg_match(&#39;/[\s\S]*?/&#39;,$file,$content);
????????//?標題
????????preg_match(&#39;/(.*?)/&#39;,$file,$title);
????????$title?=?$title?$title[1]:&#39;&#39;;
????????//?時(shí)間
????????preg_match(&#39;/(.*?)/&#39;,$file,$time);
????????$time?=?$time?strtotime($time[1]):&#39;&#39;;
????????//?公眾號
????????preg_match(&#39;/(.*?)/&#39;,$file,$wxgzh);
????????$wxgzh?=?$wxgzh?$wxgzh[1]:&#39;&#39;;
????????//?微信號
????????preg_match(&#39;/([\s\S]*?)/&#39;,$file,$wxh);
????????$wxh???=?$wxh?$wxh[1]:&#39;&#39;;
????????//?公眾號二維碼
????????if($qcode){
????????????preg_match(&#39;/window.sg_qr_code="(.*?)";/&#39;,$file,$qcode);
????????????$qcodeurl?=?str_replace(&#39;\x26amp;&#39;,&#39;&&#39;,$this->mpwxurl.$qcode[1]);
????????????$qcode?=?$this->put_file_img($this->dirurl,$qcodeurl);
????????????if(!$qcode){
????????????????$this->put_error_log($this->dirurl,$this->wxgzherr.$qcodeurl);
????????????}
????????}
????????//?獲取標簽
????????preg_match(&#39;/(.*?)/&#39;,$file,$tag);
????????$tag?=?$tag?$tag[1]:&#39;&#39;;
????????//?圖片
????????preg_match_all(&#39;//&#39;,$content[0],$images);
????????//?儲存原地址和下載后地址
????????$old?=?array();
????????$new?=?array();
????????//?去除重復圖片地址
????????$images?=?array_unique($images[1]);
????????if($images){
????????????foreach($images?as?$v){
????????????????$filename?=?$this->put_file_img($this->dirurl,$v);
????????????????if($filename){
????????????????????//?圖片保存成功?替換地址
????????????????????$old[]?=?$v;
????????????????????$new[]?=?$filename;
????????????????}else{
????????????????????//?失敗記錄日志
????????????????????$this->put_error_log($this->dirurl,$this->wximgerr.$v);
????????????????}
????????????}
????????????$old[]?=?&#39;data-src&#39;;
????????????$new[]?=?&#39;src&#39;;
????????????$content?=?str_replace($old,$new,$content[0]);
????????}
???????//?替換音頻
???????$content?=?str_replace("preview.html","player.html",$content);?
???????//?獲取閱讀點(diǎn)贊評論等信息
???????$comment?=?$this->get_comment_article($url);
$data?=?array(&#39;content&#39;=>$content,&#39;title&#39;=>$title,&#39;time&#39;=>$time,&#39;wxgzh&#39;=>$wxgzh,&#39;wxh&#39;=>$wxh,&#39;qcode&#39;=>$qcode?:&#39;&#39;,&#39;tag&#39;=>$tag?:&#39;&#39;,&#39;comment&#39;=>$comment);
????????return?json_encode(array(&#39;data&#39;=>$data,&#39;code&#39;=>200,&#39;msg&#39;=>&#39;ok&#39;));
????}
????/*?抓取保存圖片函數
?????*?return
?????*?$filename??string??圖片地址
?????*/
????function?put_file_img($dir=&#39;&#39;,$image=&#39;&#39;)
????{
????????//?判斷圖片的保存類(lèi)型?截取后四位地址
????????$exts?=?array(&#39;jpeg&#39;,&#39;png&#39;,&#39;jpg&#39;);
????????$filename?=?$dir.&#39;/&#39;.uniqid().time().rand(10000,99999);
????????$ext?=?substr($image,-5);
????????$ext?=?explode(&#39;=&#39;,$ext);
????????if(in_array($ext[1],$exts)?!==?false){
????????????$filename?.=?&#39;.&#39;.$ext[1];
????????}else{
????????????$filename?.=?&#39;.gif&#39;;
????????}
????????$souce?=?file_get_contents($image);
????????if(file_put_contents($filename,$souce)){
????????????return?$filename;
????????}else{
????????????return?false;
????????}
????}
????/*?獲取微信公眾號文章的【點(diǎn)贊】【閱讀】【評論】
?????*?方法:將地址中的部分參數替換即可。
?????*?????1、s??????替換為?mp/getcomment?
?????*?????2、最后=??替換為?%3D
?????*?return
?????*?read_num??閱讀數
?????*?like_num??點(diǎn)贊數
?????*?comment???評論詳情
?????*/
????function?get_comment_article($url=&#39;&#39;)
????{
????????$url?=?substr($url,0,-1);
????????$url?=?str_replace(&#39;/s&#39;,&#39;/mp/getcomment&#39;,$url).&#39;%3D&#39;;
????????return?file_get_contents($url);
????}
????/*?錯誤日志記錄
?????*?$dir??string??文件路徑
?????*?$data?string??寫(xiě)入內容
?????*/
????function?put_error_log($dir,$data)
????{
????????file_put_contents($dir.&#39;/error.log&#39;,date(&#39;Y-m-d?H:i:s&#39;,time()).$data.PHP_EOL,FILE_APPEND);
????}
????/*?創(chuàng )建文件夾
?????*?$dir?string?文件夾路徑
?????*/
????function?put_dir($dir=&#39;&#39;){
$bool?=?true;
????????if(!is_dir($dir)){
????????????if(!mkdir($dir,777,TRUE)){
$bool?=?false;
????????????????$this->put_error_log($dir,$this->direrr.$dir);
????????????}
????????}
return?$bool;
????}
}
  使用方式:

官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

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