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

querylist采集微信公眾號文章

querylist采集微信公眾號文章

querylist采集微信公眾號文章,content_type是html文本,文章的content_type

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

  querylist采集微信公眾號文章,content_type是html文本,文章的content_type
  querylist采集微信公眾號文章,content_type是html文本,每篇文章的content_type只能是html文本,帶著(zhù)\r\n的字符需要進(jìn)行轉義。建議加上\xx\xx\xx\xx,規范一些看上去更美觀(guān),
  用javascript,把一段簡(jiǎn)單的html文本html轉json格式變成一個(gè)imagecontent,在全局聲明為一個(gè)元素,這個(gè)元素可以包含一些html格式的東西。使用php,直接從另一個(gè)html文件中讀取,這里能接受一段json數據就行了。轉義的話(huà),\xxxx\xxxx\xxxx\xxxx,\xxxx的前面那個(gè)\x,沒(méi)必要轉義。
  php直接文件名+頭文件名+正則表達式,挺好用的。如果想保留本來(lái)的html格式,那就需要\xxxxx\xxxx\xxxx\xxxx;\xxxx或\xxxx;\xxxx;。
  首先,要注意html規范,你這兩個(gè)wordpress-script腳本,都是一樣的,選擇wordpress目錄下admin.wordpress.wordpress.wordpress.wordpress/,全局聲明類(lèi)型wordpress.wordpress.wordpress.wordpress/。然后,這兩個(gè)腳本就可以用了,理論上,你也可以將選擇wordpress目錄下admin.wordpress.wordpress.wordpress/腳本另外用。
  javascriptbash中輸入命令sudowordpress/extensions.php
  content-type不是文本或者post, 查看全部

  querylist采集微信公眾號文章,content_type是html文本,文章的content_type
  querylist采集微信公眾號文章,content_type是html文本,每篇文章的content_type只能是html文本,帶著(zhù)\r\n的字符需要進(jìn)行轉義。建議加上\xx\xx\xx\xx,規范一些看上去更美觀(guān),
  用javascript,把一段簡(jiǎn)單的html文本html轉json格式變成一個(gè)imagecontent,在全局聲明為一個(gè)元素,這個(gè)元素可以包含一些html格式的東西。使用php,直接從另一個(gè)html文件中讀取,這里能接受一段json數據就行了。轉義的話(huà),\xxxx\xxxx\xxxx\xxxx,\xxxx的前面那個(gè)\x,沒(méi)必要轉義。
  php直接文件名+頭文件名+正則表達式,挺好用的。如果想保留本來(lái)的html格式,那就需要\xxxxx\xxxx\xxxx\xxxx;\xxxx或\xxxx;\xxxx;。
  首先,要注意html規范,你這兩個(gè)wordpress-script腳本,都是一樣的,選擇wordpress目錄下admin.wordpress.wordpress.wordpress.wordpress/,全局聲明類(lèi)型wordpress.wordpress.wordpress.wordpress/。然后,這兩個(gè)腳本就可以用了,理論上,你也可以將選擇wordpress目錄下admin.wordpress.wordpress.wordpress/腳本另外用。
  javascriptbash中輸入命令sudowordpress/extensions.php
  content-type不是文本或者post,

搜狗搜索爬取微信公眾號文章信息,逆向加密解密

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

  
搜狗搜索爬取微信公眾號文章信息,逆向加密解密
  微信公眾號文章 采集簡(jiǎn)訊-搜狗APP將近一天文章
  前言
  注: 本文主講一個(gè)分析思路,僅用于技術(shù)交流分享,有興趣可以一起交流 q:1095087360。
  前段時(shí)間,由于需要,在微信官方帳戶(hù)上指定了采集微信文章 關(guān)鍵詞,我在互聯(lián)網(wǎng)上找到了一些信息,但也賺了很多錢(qián)?;旧现挥袃煞N來(lái)源,一種是微信APP,一種是搜狗。但是,微信客戶(hù)端關(guān)鍵詞的搜索功能相當于沒(méi)有(數量相對較?。?,然后以搜狗開(kāi)始,搜狗的啟動(dòng)相對簡(jiǎn)單,可以看一下文章,使用搜狗搜索來(lái)抓取微信官方帳戶(hù)文章信息。
  無(wú)需自動(dòng)抓取即可改進(jìn)前代解決方案,這將更加高效且易于實(shí)現。
  我嘗試實(shí)現,采集得到了數據,但是實(shí)時(shí)率相對較低。 采集的許多文章來(lái)自幾天前或幾個(gè)月前,我檢查了Sogou APP上的微信文章可以搜索到最后一天的數據,因此幾乎是今天的文章
  分析
  
  直接上傳數據包捕獲工具:
  獲取接口之一作為數據接口:
  
  可以發(fā)現請求主體和數據獲取接口的相應主體是加密的。
  反編譯的jar以找到加密方法:
  通過(guò)界面搜索,很容易發(fā)現此請求的加密和解密以相同的方法出現。先加密然后請求數據,然后在獲取數據后解密數據。
  public static synchronized String mxxxx(String str, String str2, String str3, int i) 搜索到的方法
ScEncryptWall.encrypt(str, str2, str3) 加密請求
請求數據:body()
ScEncryptWall.decrypt(body()) 解密
  我不會(huì )(不)發(fā)布(敢于)屏幕截圖(發(fā)布)。
  使用frida鉤子驗證找到的方法:
  hook crypto()方法
   你會(huì )發(fā)現 str= "http://app.weixin.s*g***.com/api/searchapp"
str2="type=2&ie=utf8&page=1&query="+查找的關(guān)鍵詞+"&select_count=20&usip=&tsn=1"
str3=""
  獲取加密參數k,v,u,r,g,p參數
  hook delete()方法
  獲取
  
  有我們想要的數據標題,鏈接。
  接下來(lái)是反向加密和解密方法。
  通過(guò)搜索,發(fā)現它是本機方法。 SCoreTools的so和.so文件在lib \ armeabi目錄中被調用,下一步是分析so并轉到工件ida
  
  找到加解密的入口,接下來(lái)是一個(gè)漫長(cháng)的探索過(guò)程,基本上是分析C語(yǔ)言的計算過(guò)程,可以百度相關(guān)文件,這是主要思想。
  
  最后,當我們得到一段這樣的代碼時(shí),基本上該路由將起作用,并且解密也是如此。
  實(shí)現
  算法出爐時(shí)就實(shí)現了:
  
  獲取數據并分析了鏈接之后,我發(fā)現它仍然是重定向地址。經(jīng)過(guò)簡(jiǎn)單分析,我可以在微信末尾獲得鏈接。然后,我還根據搜狗微信的官方帳戶(hù)(一天采集超過(guò)一百萬(wàn))進(jìn)行了爬網(wǎng),“文本想法”當天采集已獲得了數百萬(wàn)個(gè)數據。
  摘要
  文章主要討論了一個(gè)分析概念,這可能有點(diǎn)粗糙,但是您仍然可以自己從整個(gè)過(guò)程中學(xué)到很多東西。 查看全部

  
搜狗搜索爬取微信公眾號文章信息,逆向加密解密
  微信公眾號文章 采集簡(jiǎn)訊-搜狗APP將近一天文章
  前言
  注: 本文主講一個(gè)分析思路,僅用于技術(shù)交流分享,有興趣可以一起交流 q:1095087360。
  前段時(shí)間,由于需要,在微信官方帳戶(hù)上指定了采集微信文章 關(guān)鍵詞,我在互聯(lián)網(wǎng)上找到了一些信息,但也賺了很多錢(qián)?;旧现挥袃煞N來(lái)源,一種是微信APP,一種是搜狗。但是,微信客戶(hù)端關(guān)鍵詞的搜索功能相當于沒(méi)有(數量相對較?。?,然后以搜狗開(kāi)始,搜狗的啟動(dòng)相對簡(jiǎn)單,可以看一下文章,使用搜狗搜索來(lái)抓取微信官方帳戶(hù)文章信息。
  無(wú)需自動(dòng)抓取即可改進(jìn)前代解決方案,這將更加高效且易于實(shí)現。
  我嘗試實(shí)現,采集得到了數據,但是實(shí)時(shí)率相對較低。 采集的許多文章來(lái)自幾天前或幾個(gè)月前,我檢查了Sogou APP上的微信文章可以搜索到最后一天的數據,因此幾乎是今天的文章
  分析
  
  直接上傳數據包捕獲工具:
  獲取接口之一作為數據接口:
  
  可以發(fā)現請求主體和數據獲取接口的相應主體是加密的。
  反編譯的jar以找到加密方法:
  通過(guò)界面搜索,很容易發(fā)現此請求的加密和解密以相同的方法出現。先加密然后請求數據,然后在獲取數據后解密數據。
  public static synchronized String mxxxx(String str, String str2, String str3, int i) 搜索到的方法
ScEncryptWall.encrypt(str, str2, str3) 加密請求
請求數據:body()
ScEncryptWall.decrypt(body()) 解密
  我不會(huì )(不)發(fā)布(敢于)屏幕截圖(發(fā)布)。
  使用frida鉤子驗證找到的方法:
  hook crypto()方法
   你會(huì )發(fā)現 str= "http://app.weixin.s*g***.com/api/searchapp"
str2="type=2&ie=utf8&page=1&query="+查找的關(guān)鍵詞+"&select_count=20&usip=&tsn=1"
str3=""
  獲取加密參數k,v,u,r,g,p參數
  hook delete()方法
  獲取
  
  有我們想要的數據標題,鏈接。
  接下來(lái)是反向加密和解密方法。
  通過(guò)搜索,發(fā)現它是本機方法。 SCoreTools的so和.so文件在lib \ armeabi目錄中被調用,下一步是分析so并轉到工件ida
  
  找到加解密的入口,接下來(lái)是一個(gè)漫長(cháng)的探索過(guò)程,基本上是分析C語(yǔ)言的計算過(guò)程,可以百度相關(guān)文件,這是主要思想。
  
  最后,當我們得到一段這樣的代碼時(shí),基本上該路由將起作用,并且解密也是如此。
  實(shí)現
  算法出爐時(shí)就實(shí)現了:
  
  獲取數據并分析了鏈接之后,我發(fā)現它仍然是重定向地址。經(jīng)過(guò)簡(jiǎn)單分析,我可以在微信末尾獲得鏈接。然后,我還根據搜狗微信的官方帳戶(hù)(一天采集超過(guò)一百萬(wàn))進(jìn)行了爬網(wǎng),“文本想法”當天采集已獲得了數百萬(wàn)個(gè)數據。
  摘要
  文章主要討論了一個(gè)分析概念,這可能有點(diǎn)粗糙,但是您仍然可以自己從整個(gè)過(guò)程中學(xué)到很多東西。

Python爬取微信公眾號文章(一)(圖)

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

  Python爬取微信公眾號文章(一)(圖)
  Python抓取微信公眾號文章
  我最近正在從事自己的項目。它涉及文章,需要通過(guò)python抓取微信官方帳戶(hù)。由于微信的獨特方法,因此無(wú)法直接對其進(jìn)行爬網(wǎng)。我研究了一些文章并且可能有想法,并且在Internet上找不到解決方案沒(méi)有問(wèn)題,但是由于某些第三方庫的更改,內部的代碼基本上無(wú)法使用。本文文章是為需要抓取官方帳戶(hù)文章,文章的朋友而寫(xiě)的。最后,還將提供python源代碼下載。
  如何抓取官方帳戶(hù)
  有兩種主要的方法來(lái)爬取官方帳戶(hù)。一種是通過(guò)搜狗搜索微信公眾號頁(yè)面,找到文章地址,然后抓取具體的文章內容;第二種是注冊官方帳戶(hù),然后通過(guò)官方帳戶(hù)的搜索界面找到文章的地址,然后根據該地址抓取文章的內容。
  這兩種解決方案各有優(yōu)缺點(diǎn)。使用搜狗搜索的核心思想是通過(guò)請求模擬搜狗搜索官方賬號,然后解析搜索結果頁(yè)面,然后根據官方賬號首頁(yè)地址進(jìn)行抓取,以抓取文章詳細信息,但是您需要請注意,由于搜狗與騰訊之間的協(xié)議,只能顯示最新的10個(gè)文章,而無(wú)法獲取所有的文章。如果您想結識文章的所有朋友,則可能必須使用第二種方法。第二種方法的缺點(diǎn)是您必須注冊一個(gè)官方帳戶(hù)才能通過(guò)騰訊身份驗證。這個(gè)過(guò)程比較麻煩。您可以通過(guò)調用官方帳戶(hù)來(lái)查詢(xún)界面,但是您需要使用硒來(lái)模擬滑動(dòng)頁(yè)面的操作。整個(gè)過(guò)程還是很麻煩的。因為我的項目不需要歷史記錄文章,所以我使用搜狗搜索來(lái)執行爬取官方帳戶(hù)的功能。
  檢索最近10個(gè)正式帳戶(hù)文章
  python需要依賴(lài)的第三方庫如下:
  urllib,pyquery,請求,硒
  具體邏輯寫(xiě)在注釋中,沒(méi)有什么特別復雜的。
  爬蟲(chóng)核心課程
  #!/usr/bin/python
# coding: utf-8
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]
  主要輸入功能:
  # 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
  直接運行main方法,然后在控制臺中輸入要爬升的正式帳戶(hù)的英文名稱(chēng)。中文搜索可能有多個(gè)。我們在這里所做的是僅搜索一個(gè)。檢查官方帳戶(hù)的英語(yǔ)帳戶(hù),只要它在手機上即可。單擊官方帳戶(hù)并查看官方帳戶(hù)信息,可以看到以下爬網(wǎng)程序結果已爬到文章的相關(guān)信息,并且可以通過(guò)在代碼中調用webdriver.py來(lái)爬網(wǎng)文章的特定內容。
 ??![截屏2018-08-30 1 7. 5 6. 09](2018-08-30 1 7. 5 6. 0 9. png)
  爬行官方帳戶(hù)的注意事項
  PhantomJS的硒支持已被棄用,請改用無(wú)頭版本的Chrome或Firefox警告。warn('PhantomJS的硒支持已棄用,請使用無(wú)頭'
  Internet上的許多文章仍在使用PhantomJS。實(shí)際上,Selenium自去年以來(lái)就不支持PhantomJS?,F在,如果您使用Selenium初始化瀏覽器,則需要使用webdriver來(lái)初始化沒(méi)有head參數的Chrome或Firefox驅動(dòng)程序。
  有關(guān)詳細信息,請參閱官方網(wǎng)站鏈接:
  無(wú)法連接到服務(wù)chromedriver / firefoxdriver
  我在開(kāi)發(fā)過(guò)程中遇到了這個(gè)問(wèn)題。對于此問(wèn)題,通常有兩種可能性。一種是未配置chromedriver或geckodriver的環(huán)境變量。在這里,您需要注意chromedriver或geckodriver文件的環(huán)境變量,必須將它們配置為PATH或直接將這兩個(gè)文件直接復制到/ usr / bin目錄;
  還有另一種可能是未配置主機。如果發(fā)現此問(wèn)題,請檢查您的主機文件是否未配置12 7. 0. 0. 1本地主機,只需對其進(jìn)行配置。
  這里要注意的另一件事是,如果您使用chrome瀏覽器,則還應注意chrome瀏覽器版本與chromedriver之間的對應關(guān)系。您可以在此文章中進(jìn)行檢查,也可以訪(fǎng)問(wèn)Google官方網(wǎng)站檢查最新的信件。關(guān)系。
<p>反水 查看全部

  Python爬取微信公眾號文章(一)(圖)
  Python抓取微信公眾號文章
  我最近正在從事自己的項目。它涉及文章,需要通過(guò)python抓取微信官方帳戶(hù)。由于微信的獨特方法,因此無(wú)法直接對其進(jìn)行爬網(wǎng)。我研究了一些文章并且可能有想法,并且在Internet上找不到解決方案沒(méi)有問(wèn)題,但是由于某些第三方庫的更改,內部的代碼基本上無(wú)法使用。本文文章是為需要抓取官方帳戶(hù)文章,文章的朋友而寫(xiě)的。最后,還將提供python源代碼下載。
  如何抓取官方帳戶(hù)
  有兩種主要的方法來(lái)爬取官方帳戶(hù)。一種是通過(guò)搜狗搜索微信公眾號頁(yè)面,找到文章地址,然后抓取具體的文章內容;第二種是注冊官方帳戶(hù),然后通過(guò)官方帳戶(hù)的搜索界面找到文章的地址,然后根據該地址抓取文章的內容。
  這兩種解決方案各有優(yōu)缺點(diǎn)。使用搜狗搜索的核心思想是通過(guò)請求模擬搜狗搜索官方賬號,然后解析搜索結果頁(yè)面,然后根據官方賬號首頁(yè)地址進(jìn)行抓取,以抓取文章詳細信息,但是您需要請注意,由于搜狗與騰訊之間的協(xié)議,只能顯示最新的10個(gè)文章,而無(wú)法獲取所有的文章。如果您想結識文章的所有朋友,則可能必須使用第二種方法。第二種方法的缺點(diǎn)是您必須注冊一個(gè)官方帳戶(hù)才能通過(guò)騰訊身份驗證。這個(gè)過(guò)程比較麻煩。您可以通過(guò)調用官方帳戶(hù)來(lái)查詢(xún)界面,但是您需要使用硒來(lái)模擬滑動(dòng)頁(yè)面的操作。整個(gè)過(guò)程還是很麻煩的。因為我的項目不需要歷史記錄文章,所以我使用搜狗搜索來(lái)執行爬取官方帳戶(hù)的功能。
  檢索最近10個(gè)正式帳戶(hù)文章
  python需要依賴(lài)的第三方庫如下:
  urllib,pyquery,請求,硒
  具體邏輯寫(xiě)在注釋中,沒(méi)有什么特別復雜的。
  爬蟲(chóng)核心課程
  #!/usr/bin/python
# coding: utf-8
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]
  主要輸入功能:
  # 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
  直接運行main方法,然后在控制臺中輸入要爬升的正式帳戶(hù)的英文名稱(chēng)。中文搜索可能有多個(gè)。我們在這里所做的是僅搜索一個(gè)。檢查官方帳戶(hù)的英語(yǔ)帳戶(hù),只要它在手機上即可。單擊官方帳戶(hù)并查看官方帳戶(hù)信息,可以看到以下爬網(wǎng)程序結果已爬到文章的相關(guān)信息,并且可以通過(guò)在代碼中調用webdriver.py來(lái)爬網(wǎng)文章的特定內容。
 ??![截屏2018-08-30 1 7. 5 6. 09](2018-08-30 1 7. 5 6. 0 9. png)
  爬行官方帳戶(hù)的注意事項
  PhantomJS的硒支持已被棄用,請改用無(wú)頭版本的Chrome或Firefox警告。warn('PhantomJS的硒支持已棄用,請使用無(wú)頭'
  Internet上的許多文章仍在使用PhantomJS。實(shí)際上,Selenium自去年以來(lái)就不支持PhantomJS?,F在,如果您使用Selenium初始化瀏覽器,則需要使用webdriver來(lái)初始化沒(méi)有head參數的Chrome或Firefox驅動(dòng)程序。
  有關(guān)詳細信息,請參閱官方網(wǎng)站鏈接:
  無(wú)法連接到服務(wù)chromedriver / firefoxdriver
  我在開(kāi)發(fā)過(guò)程中遇到了這個(gè)問(wèn)題。對于此問(wèn)題,通常有兩種可能性。一種是未配置chromedriver或geckodriver的環(huán)境變量。在這里,您需要注意chromedriver或geckodriver文件的環(huán)境變量,必須將它們配置為PATH或直接將這兩個(gè)文件直接復制到/ usr / bin目錄;
  還有另一種可能是未配置主機。如果發(fā)現此問(wèn)題,請檢查您的主機文件是否未配置12 7. 0. 0. 1本地主機,只需對其進(jìn)行配置。
  這里要注意的另一件事是,如果您使用chrome瀏覽器,則還應注意chrome瀏覽器版本與chromedriver之間的對應關(guān)系。您可以在此文章中進(jìn)行檢查,也可以訪(fǎng)問(wèn)Google官方網(wǎng)站檢查最新的信件。關(guān)系。
<p>反水

先湊活著(zhù),畢竟還破解不了登錄的公眾號

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

  先湊活著(zhù),畢竟還破解不了登錄的公眾號
  標簽:URL微信偽造品以爬取公共令牌textprintid
  哈哈,我終于找到了文章,可以一鍵獲取所有正式帳戶(hù)。盡管它很愚蠢,但讓我們活著(zhù)。畢竟,我無(wú)法破解登錄。
  參考鏈接:
  第一步:先注冊一個(gè)官方帳戶(hù)
  注冊后登錄首頁(yè),找到該物料管理系統
  
  然后您將看到以下頁(yè)面
  
  點(diǎn)擊此紅色箭頭指向的鏈接
  
  記住要打開(kāi)調試工具
  然后搜索您要抓取的官方帳戶(hù)
  
  此請求將返回我們搜索的官方帳戶(hù)。如果是第一個(gè)帳戶(hù),我們想要的官方帳戶(hù)也會(huì )在此列表中
  
  我們需要此帳號ID來(lái)標記此官方帳戶(hù)
  下一步選擇,然后單擊
  
  然后文章列表出現
  整個(gè)過(guò)程需要令牌,官方帳戶(hù)名和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()
  我需要解釋?zhuān)瑪祿毂旧砩踔炼紱](méi)有編碼我。
  而且,該接口似乎經(jīng)常更新,因此您只需要了解我的代碼的邏輯即可。
  好
  標簽:url,微信,假冒,抓取,公開(kāi),令牌,文本,打印,id 查看全部

  先湊活著(zhù),畢竟還破解不了登錄的公眾號
  標簽:URL微信偽造品以爬取公共令牌textprintid
  哈哈,我終于找到了文章,可以一鍵獲取所有正式帳戶(hù)。盡管它很愚蠢,但讓我們活著(zhù)。畢竟,我無(wú)法破解登錄。
  參考鏈接:
  第一步:先注冊一個(gè)官方帳戶(hù)
  注冊后登錄首頁(yè),找到該物料管理系統
  
  然后您將看到以下頁(yè)面
  
  點(diǎn)擊此紅色箭頭指向的鏈接
  
  記住要打開(kāi)調試工具
  然后搜索您要抓取的官方帳戶(hù)
  
  此請求將返回我們搜索的官方帳戶(hù)。如果是第一個(gè)帳戶(hù),我們想要的官方帳戶(hù)也會(huì )在此列表中
  
  我們需要此帳號ID來(lái)標記此官方帳戶(hù)
  下一步選擇,然后單擊
  
  然后文章列表出現
  整個(gè)過(guò)程需要令牌,官方帳戶(hù)名和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()
  我需要解釋?zhuān)瑪祿毂旧砩踔炼紱](méi)有編碼我。
  而且,該接口似乎經(jīng)常更新,因此您只需要了解我的代碼的邏輯即可。
  好
  標簽:url,微信,假冒,抓取,公開(kāi),令牌,文本,打印,id

新聞采集什么平臺什么深度值新聞就用什么方式?

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

  新聞采集什么平臺什么深度值新聞就用什么方式?
  querylist采集微信公眾號文章索引至querylist數據庫,數據存儲格式采用字典,不支持sql,讀寫(xiě)頻率大約在50%以下,讀寫(xiě)次數不固定;reportlist采集微信公眾號文章索引至reportlist數據庫,數據格式與querylist數據庫相同,但數據存儲格式為基于哈希表(key-value數據結構)存儲,與querylist數據庫存儲方式相同,但數據讀寫(xiě)頻率大約在50%以下,讀寫(xiě)次數不固定;。
  做新聞的話(huà)只需要兩者都要關(guān)注即可,新聞聯(lián)播的話(huà)srs采集肯定沒(méi)問(wèn)題了。其他新聞一般采集什么平臺什么深度值新聞就用什么方式,根據需要各家數據采集平臺可能會(huì )有不同。另外你指的市場(chǎng)上的平臺應該是綜合新聞客戶(hù)端之類(lèi)的,建議使用專(zhuān)注數據存儲的基于hash表的,這個(gè)只要數據量不大,根本不用關(guān)心語(yǔ)義方面的問(wèn)題。
  數據庫我了解的不多,如果你指的是手機app里邊的數據那類(lèi),不建議上querylist,各種尺度都得管。reportlist就不用理會(huì )了,
  app里面的數據,基本沒(méi)戲。一般是要軟件,就是我們用的autofocus。通?,F在都是用java的,基本都是有程序實(shí)現的。一般你需要掌握java的基本語(yǔ)法。
  那個(gè)reportlist要嵌入到app里去,好大個(gè),而且還要注意安全性。不過(guò)如果你不是開(kāi)發(fā)類(lèi)的產(chǎn)品的話(huà),一般互聯(lián)網(wǎng)公司會(huì )采用reportlist來(lái)采集數據,如果想采用它的話(huà),則需要有一定的開(kāi)發(fā)能力。 查看全部

  新聞采集什么平臺什么深度值新聞就用什么方式?
  querylist采集微信公眾號文章索引至querylist數據庫,數據存儲格式采用字典,不支持sql,讀寫(xiě)頻率大約在50%以下,讀寫(xiě)次數不固定;reportlist采集微信公眾號文章索引至reportlist數據庫,數據格式與querylist數據庫相同,但數據存儲格式為基于哈希表(key-value數據結構)存儲,與querylist數據庫存儲方式相同,但數據讀寫(xiě)頻率大約在50%以下,讀寫(xiě)次數不固定;。
  做新聞的話(huà)只需要兩者都要關(guān)注即可,新聞聯(lián)播的話(huà)srs采集肯定沒(méi)問(wèn)題了。其他新聞一般采集什么平臺什么深度值新聞就用什么方式,根據需要各家數據采集平臺可能會(huì )有不同。另外你指的市場(chǎng)上的平臺應該是綜合新聞客戶(hù)端之類(lèi)的,建議使用專(zhuān)注數據存儲的基于hash表的,這個(gè)只要數據量不大,根本不用關(guān)心語(yǔ)義方面的問(wèn)題。
  數據庫我了解的不多,如果你指的是手機app里邊的數據那類(lèi),不建議上querylist,各種尺度都得管。reportlist就不用理會(huì )了,
  app里面的數據,基本沒(méi)戲。一般是要軟件,就是我們用的autofocus。通?,F在都是用java的,基本都是有程序實(shí)現的。一般你需要掌握java的基本語(yǔ)法。
  那個(gè)reportlist要嵌入到app里去,好大個(gè),而且還要注意安全性。不過(guò)如果你不是開(kāi)發(fā)類(lèi)的產(chǎn)品的話(huà),一般互聯(lián)網(wǎng)公司會(huì )采用reportlist來(lái)采集數據,如果想采用它的話(huà),則需要有一定的開(kāi)發(fā)能力。

情感分析:后傳入到分詞器進(jìn)行分詞(圖)

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

  情感分析:后傳入到分詞器進(jìn)行分詞(圖)
  querylist采集微信公眾號文章,進(jìn)行情感分析后傳入到分詞器進(jìn)行分詞;querylist&document對文章進(jìn)行全文分詞,生成詞向量向量;處理詞向量后傳入同質(zhì)詞提取器提取同質(zhì)詞作為同質(zhì)詞提取器里的一個(gè)詞來(lái)源于angelfielddemo2179|querylist/randomline—在線(xiàn)播放—優(yōu)酷網(wǎng),視頻高清在線(xiàn)觀(guān)看。
  我也是剛剛讀到encoder-decoder論文,看到無(wú)向無(wú)環(huán)圖技術(shù),理解的比較少,
  數據(語(yǔ)料庫)設計時(shí),
  因為query是個(gè)list,可以傳入一個(gè)bow的map,或者傳入兩個(gè)bowmap,計算一個(gè)rank的loss,完成分詞。
  1.以前做圖像時(shí)寫(xiě)過(guò)一篇中文分詞的論文,并基于深度學(xué)習進(jìn)行中文分詞,效果還可以2.query字詞越來(lái)越多,大小寫(xiě)不一致詞意會(huì )有歧義,所以可以使用深度學(xué)習進(jìn)行分詞(找到語(yǔ)境關(guān)鍵詞,然后在訓練階段通過(guò)訓練、預測找到人,物,
  按照現在網(wǎng)上的實(shí)現來(lái)看,只有詞典或者query數據收集設計上是有比較大的挑戰的。其他不會(huì )有太大的問(wèn)題,最差也是做一個(gè)低秩優(yōu)化之類(lèi)的處理。感覺(jué)不同領(lǐng)域,有不同的做法, 查看全部

  情感分析:后傳入到分詞器進(jìn)行分詞(圖)
  querylist采集微信公眾號文章,進(jìn)行情感分析后傳入到分詞器進(jìn)行分詞;querylist&document對文章進(jìn)行全文分詞,生成詞向量向量;處理詞向量后傳入同質(zhì)詞提取器提取同質(zhì)詞作為同質(zhì)詞提取器里的一個(gè)詞來(lái)源于angelfielddemo2179|querylist/randomline—在線(xiàn)播放—優(yōu)酷網(wǎng),視頻高清在線(xiàn)觀(guān)看。
  我也是剛剛讀到encoder-decoder論文,看到無(wú)向無(wú)環(huán)圖技術(shù),理解的比較少,
  數據(語(yǔ)料庫)設計時(shí),
  因為query是個(gè)list,可以傳入一個(gè)bow的map,或者傳入兩個(gè)bowmap,計算一個(gè)rank的loss,完成分詞。
  1.以前做圖像時(shí)寫(xiě)過(guò)一篇中文分詞的論文,并基于深度學(xué)習進(jìn)行中文分詞,效果還可以2.query字詞越來(lái)越多,大小寫(xiě)不一致詞意會(huì )有歧義,所以可以使用深度學(xué)習進(jìn)行分詞(找到語(yǔ)境關(guān)鍵詞,然后在訓練階段通過(guò)訓練、預測找到人,物,
  按照現在網(wǎng)上的實(shí)現來(lái)看,只有詞典或者query數據收集設計上是有比較大的挑戰的。其他不會(huì )有太大的問(wèn)題,最差也是做一個(gè)低秩優(yōu)化之類(lèi)的處理。感覺(jué)不同領(lǐng)域,有不同的做法,

querylist采集微信公眾號文章 熊孩子和萌寵搞笑視頻笑聲不斷快樂(lè )常伴

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

  querylist采集微信公眾號文章 熊孩子和萌寵搞笑視頻笑聲不斷快樂(lè )常伴
  每天更新視頻:熊孩子的日常生活,日??蓯?ài)的寵物,熊孩子和可愛(ài)的寵物的有趣視頻。笑聲一直很開(kāi)心,總是伴隨著(zhù)!
  
  請允許我強制投放廣告:
  因為每個(gè)爬行動(dòng)物的官方帳戶(hù)都屬于他的家人,所以那是一年以前的事情了,現在已經(jīng)改變了,但是主題和名字都改變了。
  一個(gè)喜歡小寵物但買(mǎi)不起貓的代碼農民,下班后很高興。您可以注意!
  為了確保視頻的安全性并避免丟失,敬請所有者在視頻中添加水印。
  一、獲取官方帳戶(hù)信息:標題,摘要,封面,文章URL
  步驟:
  1、首先自己申請一個(gè)官方帳戶(hù)
  2、登錄到他的帳戶(hù),創(chuàng )建一個(gè)新的文章圖形,單擊超鏈接
  
  3、彈出搜索框,搜索所需的正式帳戶(hù),并查看歷史記錄文章
  
  
  4、通過(guò)數據包捕獲獲取信息并找到請求的URL
  
  通過(guò)查看信息,我們找到了所需的關(guān)鍵內容:標題,摘要,封面和文章URL。確認這是我們需要的URL。通過(guò)單擊下一頁(yè),我們多次獲得該URL,發(fā)現只有random和beginin的參數已更改
  
  因此確定了主要信息URL。
  開(kāi)始吧:
  事實(shí)證明,我們需要修改的參數是:令牌,隨機,cookie
  獲取網(wǎng)址時(shí)可以獲取這兩個(gè)值的來(lái)源
  # -*- coding: utf-8 -*-
import re
import requests
import jsonpath
import json
headers = {
"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",
"Host": "mp.weixin.qq.com",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Cookie": "自己獲取信息時(shí)的cookie"
}
def getInfo():
for i in range(80):
# token random 需要要自己的 begin:參數傳入
url = "https://mp.weixin.qq.com/cgi-b ... in%3D{}&count=5&query=&fakeid=MzI4MzkzMTc3OA%3D%3D&type=9".format(str(i * 5))
response = requests.get(url, headers = headers)
jsonRes = response.json()
titleList = jsonpath.jsonpath(jsonRes, "$..title")
coverList = jsonpath.jsonpath(jsonRes, "$..cover")
urlList = jsonpath.jsonpath(jsonRes, "$..link")
# 遍歷 構造可存儲字符串
for index in range(len(titleList)):
title = titleList[index]
cover = coverList[index]
url = urlList[index]
scvStr = "%s,%s, %s,\n" % (title, cover, url)
with open("info.csv", "a+", encoding="gbk", newline='') as f:
f.write(scvStr)
  獲得結果(成功):
  
  二、在文章中獲取視頻:實(shí)現批量下載
  分析單個(gè)視頻文章后,我找到了此鏈接:
  
  打開(kāi)網(wǎng)頁(yè),找到它是視頻網(wǎng)頁(yè)的下載鏈接:
  
  
  嘿,似乎有點(diǎn)有趣,我找到了視頻網(wǎng)頁(yè)的純下載鏈接,讓我們開(kāi)始吧。
  我在鏈接中找到一個(gè)關(guān)鍵參數vid。我不知道它來(lái)自哪里?
  它與獲得的其他信息無(wú)關(guān),因此只能被強制使用。
  在順序文章的url請求信息中找到此參數,然后將其獲取。
  response = requests.get(url_wxv, headers=headers)
# 我用的是正則,也可以使用xpath
jsonRes = response.text # 匹配:wxv_1105179750743556096
dirRe = r"wxv_.{19}"
result = re.search(dirRe, jsonRes)
wxv = result.group(0)
print(wxv)
  視頻下載:
  def getVideo(video_title, url_wxv):
video_path = './videoFiles/' + video_title + ".mp4"
# 頁(yè)面可下載形式
video_url_temp = "https://mp.weixin.qq.com/mp/vi ... ot%3B + wxv
response = requests.get(video_url_temp, headers=headers)
content = response.content.decode()
content = json.loads(content)
url_info = content.get("url_info")
video_url2 = url_info[0].get("url")
print(video_url2)
# 請求要下載的url地址
html = requests.get(video_url2)
# content返回的是bytes型也就是二進(jìn)制的數據。
html = html.content
with open(video_path, 'wb') as f:
f.write(html)
  然后完成所有信息,并執行代碼匯編。
  a。獲取官方帳戶(hù)信息
  b。過(guò)濾單個(gè)文章信息
  c,獲取視頻信息
  d。下載拼接視頻頁(yè)面的URL
  e。下載視頻并保存
  代碼實(shí)驗結果:
  
  
  獲取正式帳戶(hù):標題,摘要,封面,視頻,
  可以說(shuō)您擁有視頻官方帳戶(hù)的所有信息,并且可以復制其中一個(gè)。
  危險的動(dòng)作,請不要操作!記得!記得!記??!
  要獲取代碼,請回復至官方帳戶(hù):20191210或官方帳戶(hù)代碼
   查看全部

  querylist采集微信公眾號文章 熊孩子和萌寵搞笑視頻笑聲不斷快樂(lè )常伴
  每天更新視頻:熊孩子的日常生活,日??蓯?ài)的寵物,熊孩子和可愛(ài)的寵物的有趣視頻。笑聲一直很開(kāi)心,總是伴隨著(zhù)!
  
  請允許我強制投放廣告:
  因為每個(gè)爬行動(dòng)物的官方帳戶(hù)都屬于他的家人,所以那是一年以前的事情了,現在已經(jīng)改變了,但是主題和名字都改變了。
  一個(gè)喜歡小寵物但買(mǎi)不起貓的代碼農民,下班后很高興。您可以注意!
  為了確保視頻的安全性并避免丟失,敬請所有者在視頻中添加水印。
  一、獲取官方帳戶(hù)信息:標題,摘要,封面,文章URL
  步驟:
  1、首先自己申請一個(gè)官方帳戶(hù)
  2、登錄到他的帳戶(hù),創(chuàng )建一個(gè)新的文章圖形,單擊超鏈接
  
  3、彈出搜索框,搜索所需的正式帳戶(hù),并查看歷史記錄文章
  
  
  4、通過(guò)數據包捕獲獲取信息并找到請求的URL
  
  通過(guò)查看信息,我們找到了所需的關(guān)鍵內容:標題,摘要,封面和文章URL。確認這是我們需要的URL。通過(guò)單擊下一頁(yè),我們多次獲得該URL,發(fā)現只有random和beginin的參數已更改
  
  因此確定了主要信息URL。
  開(kāi)始吧:
  事實(shí)證明,我們需要修改的參數是:令牌,隨機,cookie
  獲取網(wǎng)址時(shí)可以獲取這兩個(gè)值的來(lái)源
  # -*- coding: utf-8 -*-
import re
import requests
import jsonpath
import json
headers = {
"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",
"Host": "mp.weixin.qq.com",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Cookie": "自己獲取信息時(shí)的cookie"
}
def getInfo():
for i in range(80):
# token random 需要要自己的 begin:參數傳入
url = "https://mp.weixin.qq.com/cgi-b ... in%3D{}&count=5&query=&fakeid=MzI4MzkzMTc3OA%3D%3D&type=9".format(str(i * 5))
response = requests.get(url, headers = headers)
jsonRes = response.json()
titleList = jsonpath.jsonpath(jsonRes, "$..title")
coverList = jsonpath.jsonpath(jsonRes, "$..cover")
urlList = jsonpath.jsonpath(jsonRes, "$..link")
# 遍歷 構造可存儲字符串
for index in range(len(titleList)):
title = titleList[index]
cover = coverList[index]
url = urlList[index]
scvStr = "%s,%s, %s,\n" % (title, cover, url)
with open("info.csv", "a+", encoding="gbk", newline='') as f:
f.write(scvStr)
  獲得結果(成功):
  
  二、在文章中獲取視頻:實(shí)現批量下載
  分析單個(gè)視頻文章后,我找到了此鏈接:
  
  打開(kāi)網(wǎng)頁(yè),找到它是視頻網(wǎng)頁(yè)的下載鏈接:
  
  
  嘿,似乎有點(diǎn)有趣,我找到了視頻網(wǎng)頁(yè)的純下載鏈接,讓我們開(kāi)始吧。
  我在鏈接中找到一個(gè)關(guān)鍵參數vid。我不知道它來(lái)自哪里?
  它與獲得的其他信息無(wú)關(guān),因此只能被強制使用。
  在順序文章的url請求信息中找到此參數,然后將其獲取。
  response = requests.get(url_wxv, headers=headers)
# 我用的是正則,也可以使用xpath
jsonRes = response.text # 匹配:wxv_1105179750743556096
dirRe = r"wxv_.{19}"
result = re.search(dirRe, jsonRes)
wxv = result.group(0)
print(wxv)
  視頻下載:
  def getVideo(video_title, url_wxv):
video_path = './videoFiles/' + video_title + ".mp4"
# 頁(yè)面可下載形式
video_url_temp = "https://mp.weixin.qq.com/mp/vi ... ot%3B + wxv
response = requests.get(video_url_temp, headers=headers)
content = response.content.decode()
content = json.loads(content)
url_info = content.get("url_info")
video_url2 = url_info[0].get("url")
print(video_url2)
# 請求要下載的url地址
html = requests.get(video_url2)
# content返回的是bytes型也就是二進(jìn)制的數據。
html = html.content
with open(video_path, 'wb') as f:
f.write(html)
  然后完成所有信息,并執行代碼匯編。
  a。獲取官方帳戶(hù)信息
  b。過(guò)濾單個(gè)文章信息
  c,獲取視頻信息
  d。下載拼接視頻頁(yè)面的URL
  e。下載視頻并保存
  代碼實(shí)驗結果:
  
  
  獲取正式帳戶(hù):標題,摘要,封面,視頻,
  可以說(shuō)您擁有視頻官方帳戶(hù)的所有信息,并且可以復制其中一個(gè)。
  危險的動(dòng)作,請不要操作!記得!記得!記??!
  要獲取代碼,請回復至官方帳戶(hù):20191210或官方帳戶(hù)代碼
  

Python微信公眾號文章爬取一.思路(圖)

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

  Python微信公眾號文章爬取一.思路(圖)
  Python微信公共帳戶(hù)文章爬行
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)絡(luò )版圖形消息中的超鏈接獲得所需的界面
  
  
  從界面中,我們可以獲得相應的微信公眾號和所有相應的微信公眾號文章。二.界面分析
  訪(fǎng)問(wèn)微信官方帳戶(hù):
  參數:
  action = search_biz
  開(kāi)始= 0
  count = 5
  query =官方帳戶(hù)名
  token =每個(gè)帳戶(hù)對應的令牌值
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  因此在此界面中,我們只需要獲取令牌,查詢(xún)就是您需要搜索的官方帳戶(hù),并且可以在登錄后通過(guò)Web鏈接獲取令牌。
  
  獲取與官方帳戶(hù)對應的文章界面:
  參數:
  action = list_ex
  開(kāi)始= 0
  count = 5
  fakeid = MjM5NDAwMTA2MA ==
  type = 9
  query =
  token = 557131216
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  我們需要在該接口中獲取的值是上一步中的令牌和偽標識,并且可以在第一個(gè)接口中獲取該偽標識。這樣我們就可以獲得微信公眾號文章的數據。
  
  三.要實(shí)現的第一步:
  首先,我們需要模擬通過(guò)硒的登錄,然后獲取cookie和相應的令牌
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get(&#39;https://mp.weixin.qq.com/&#39;)
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class=&#39;login__type__container__select-type&#39;]").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name=&#39;account&#39;]")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name=&#39;password&#39;]")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class=&#39;btn_login&#39;]").click()
sleep(2)
# 微信登錄驗證
print(&#39;請掃描二維碼&#39;)
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get(&#39;https://mp.weixin.qq.com/&#39;)
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item[&#39;name&#39;]] = item[&#39;value&#39;]
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open(&#39;cookie.txt&#39;, &#39;w+&#39;, encoding=&#39;utf-8&#39;) as f:
f.write(cookie_str)
print(&#39;cookie保存到本地成功&#39;)
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split(&#39;?&#39;)[1].split(&#39;&&#39;)
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split(&#39;=&#39;)[0]] = item.split(&#39;=&#39;)[1]
# 返回token
return paramdict[&#39;token&#39;]
  定義一個(gè)登錄方法,其中的參數是登錄帳戶(hù)和密碼,然后定義一個(gè)字典來(lái)存儲cookie值。通過(guò)模擬用戶(hù),輸入相應的帳戶(hù)密碼,然后單擊“登錄”,然后將出現一個(gè)掃描驗證碼,只需使用登錄微信進(jìn)行掃描即可。
  刷新當前網(wǎng)頁(yè)后,獲取當前的cookie和令牌,然后返回。
  步驟2:1.請求相應的官方帳戶(hù)界面,并獲取我們需要的偽造品
  url= &#39;https://mp.weixin.qq.com&#39;
headers = {
&#39;HOST&#39;: &#39;mp.weixin.qq.com&#39;,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63&#39;
}
with open(&#39;cookie.txt&#39;, &#39;r&#39;, encoding=&#39;utf-8&#39;) as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = &#39;https://mp.weixin.qq.com/cgi-b ... 39%3B
params = {
&#39;action&#39;: &#39;search_biz&#39;,
&#39;begin&#39;: &#39;0&#39;,
&#39;count&#39;: &#39;5&#39;,
&#39;query&#39;: &#39;搜索的公眾號名稱(chēng)&#39;,
&#39;token&#39;: token,
&#39;lang&#39;: &#39;zh_CN&#39;,
&#39;f&#39;: &#39;json&#39;,
&#39;ajax&#39;: &#39;1&#39;
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲得的令牌和cookie,然后通過(guò)request.get請求獲取返回的微信官方帳戶(hù)的json數據
  lists= search_resp.json().get(&#39;list&#39;)[0]
  可以通過(guò)上面的代碼獲取相應的官方帳戶(hù)數據
  fakeid= lists.get(&#39;fakeid&#39;)
  可以通過(guò)上面的代碼獲得相應的偽造物
  2.請求獲取微信公眾號文章界面,并獲取我們需要的文章數據
  appmsg_url= &#39;https://mp.weixin.qq.com/cgi-bin/appmsg?&#39;
params_data = {
&#39;action&#39;: &#39;list_ex&#39;,
&#39;begin&#39;: &#39;0&#39;,
&#39;count&#39;: &#39;5&#39;,
&#39;fakeid&#39;: fakeid,
&#39;type&#39;: &#39;9&#39;,
&#39;query&#39;: &#39;&#39;,
&#39;token&#39;: token,
&#39;lang&#39;: &#39;zh_CN&#39;,
&#39;f&#39;: &#39;json&#39;,
&#39;ajax&#39;: &#39;1&#39;
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入了fakeid和token,然后調用request.get請求接口以獲取返回的json數據。
  我們已經(jīng)意識到抓取微信官方帳戶(hù)文章。
  四.摘要
  通過(guò)抓取微信公眾號文章,您需要掌握硒的使用和請求,以及如何獲取請求接口。但是需要注意的是,當我們循環(huán)獲得文章時(shí),必須設置延遲時(shí)間,否則帳戶(hù)將很容易被阻塞,并且無(wú)法獲得返回的數據。 查看全部

  Python微信公眾號文章爬取一.思路(圖)
  Python微信公共帳戶(hù)文章爬行
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)絡(luò )版圖形消息中的超鏈接獲得所需的界面
  
  
  從界面中,我們可以獲得相應的微信公眾號和所有相應的微信公眾號文章。二.界面分析
  訪(fǎng)問(wèn)微信官方帳戶(hù):
  參數:
  action = search_biz
  開(kāi)始= 0
  count = 5
  query =官方帳戶(hù)名
  token =每個(gè)帳戶(hù)對應的令牌值
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  因此在此界面中,我們只需要獲取令牌,查詢(xún)就是您需要搜索的官方帳戶(hù),并且可以在登錄后通過(guò)Web鏈接獲取令牌。
  
  獲取與官方帳戶(hù)對應的文章界面:
  參數:
  action = list_ex
  開(kāi)始= 0
  count = 5
  fakeid = MjM5NDAwMTA2MA ==
  type = 9
  query =
  token = 557131216
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  我們需要在該接口中獲取的值是上一步中的令牌和偽標識,并且可以在第一個(gè)接口中獲取該偽標識。這樣我們就可以獲得微信公眾號文章的數據。
  
  三.要實(shí)現的第一步:
  首先,我們需要模擬通過(guò)硒的登錄,然后獲取cookie和相應的令牌
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get(&#39;https://mp.weixin.qq.com/&#39;)
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class=&#39;login__type__container__select-type&#39;]").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name=&#39;account&#39;]")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name=&#39;password&#39;]")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class=&#39;btn_login&#39;]").click()
sleep(2)
# 微信登錄驗證
print(&#39;請掃描二維碼&#39;)
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get(&#39;https://mp.weixin.qq.com/&#39;)
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item[&#39;name&#39;]] = item[&#39;value&#39;]
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open(&#39;cookie.txt&#39;, &#39;w+&#39;, encoding=&#39;utf-8&#39;) as f:
f.write(cookie_str)
print(&#39;cookie保存到本地成功&#39;)
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split(&#39;?&#39;)[1].split(&#39;&&#39;)
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split(&#39;=&#39;)[0]] = item.split(&#39;=&#39;)[1]
# 返回token
return paramdict[&#39;token&#39;]
  定義一個(gè)登錄方法,其中的參數是登錄帳戶(hù)和密碼,然后定義一個(gè)字典來(lái)存儲cookie值。通過(guò)模擬用戶(hù),輸入相應的帳戶(hù)密碼,然后單擊“登錄”,然后將出現一個(gè)掃描驗證碼,只需使用登錄微信進(jìn)行掃描即可。
  刷新當前網(wǎng)頁(yè)后,獲取當前的cookie和令牌,然后返回。
  步驟2:1.請求相應的官方帳戶(hù)界面,并獲取我們需要的偽造品
  url= &#39;https://mp.weixin.qq.com&#39;
headers = {
&#39;HOST&#39;: &#39;mp.weixin.qq.com&#39;,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63&#39;
}
with open(&#39;cookie.txt&#39;, &#39;r&#39;, encoding=&#39;utf-8&#39;) as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = &#39;https://mp.weixin.qq.com/cgi-b ... 39%3B
params = {
&#39;action&#39;: &#39;search_biz&#39;,
&#39;begin&#39;: &#39;0&#39;,
&#39;count&#39;: &#39;5&#39;,
&#39;query&#39;: &#39;搜索的公眾號名稱(chēng)&#39;,
&#39;token&#39;: token,
&#39;lang&#39;: &#39;zh_CN&#39;,
&#39;f&#39;: &#39;json&#39;,
&#39;ajax&#39;: &#39;1&#39;
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲得的令牌和cookie,然后通過(guò)request.get請求獲取返回的微信官方帳戶(hù)的json數據
  lists= search_resp.json().get(&#39;list&#39;)[0]
  可以通過(guò)上面的代碼獲取相應的官方帳戶(hù)數據
  fakeid= lists.get(&#39;fakeid&#39;)
  可以通過(guò)上面的代碼獲得相應的偽造物
  2.請求獲取微信公眾號文章界面,并獲取我們需要的文章數據
  appmsg_url= &#39;https://mp.weixin.qq.com/cgi-bin/appmsg?&#39;
params_data = {
&#39;action&#39;: &#39;list_ex&#39;,
&#39;begin&#39;: &#39;0&#39;,
&#39;count&#39;: &#39;5&#39;,
&#39;fakeid&#39;: fakeid,
&#39;type&#39;: &#39;9&#39;,
&#39;query&#39;: &#39;&#39;,
&#39;token&#39;: token,
&#39;lang&#39;: &#39;zh_CN&#39;,
&#39;f&#39;: &#39;json&#39;,
&#39;ajax&#39;: &#39;1&#39;
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入了fakeid和token,然后調用request.get請求接口以獲取返回的json數據。
  我們已經(jīng)意識到抓取微信官方帳戶(hù)文章。
  四.摘要
  通過(guò)抓取微信公眾號文章,您需要掌握硒的使用和請求,以及如何獲取請求接口。但是需要注意的是,當我們循環(huán)獲得文章時(shí),必須設置延遲時(shí)間,否則帳戶(hù)將很容易被阻塞,并且無(wú)法獲得返回的數據。

Python爬蟲(chóng)、數據分析、網(wǎng)站開(kāi)發(fā)等案例教程視頻免費在線(xiàn)觀(guān)看

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

  Python爬蟲(chóng)、數據分析、網(wǎng)站開(kāi)發(fā)等案例教程視頻免費在線(xiàn)觀(guān)看
  前言
  本文中的文本和圖片過(guò)濾網(wǎng)絡(luò )可以用于學(xué)習,交流,并且沒(méi)有任何商業(yè)用途。如有任何疑問(wèn),請與我們聯(lián)系進(jìn)行處理。
  免費在線(xiàn)觀(guān)看有關(guān)Python采集器,數據分析,網(wǎng)站開(kāi)發(fā)等的案例教程視頻
  https://space.bilibili.com/523606542
  
  基本開(kāi)發(fā)環(huán)境抓取了兩個(gè)官方帳戶(hù)的文章:
  1。爬網(wǎng)Cyan Light編程官方帳戶(hù)的所有文章
  2,抓取有關(guān)python 文章的所有官方帳戶(hù)
  檢索Cyan Light編程官方帳戶(hù)的所有文章
  1,登錄正式帳戶(hù)后,單擊圖片和文字
  
  2,打開(kāi)開(kāi)發(fā)人員工具
  
  3,單擊超鏈接
  
  加載相關(guān)數據后,會(huì )出現一個(gè)數據包,包括文章標題,鏈接,摘要,發(fā)布時(shí)間等。您還可以選擇其他官方帳戶(hù)進(jìn)行抓取,但這需要您擁有一個(gè)微信公眾號帳戶(hù)。
  添加cookie
  import pprint
import time
import requests
import csv
f = open('青燈公眾號文章.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['標題', '文章發(fā)布時(shí)間', '文章地址'])
csv_writer.writeheader()
for page in range(0, 40, 5):
url = f'https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin={page}&count=5&fakeid=&type=9&query=&token=1252678642&lang=zh_CN&f=json&ajax=1'
headers = {
'cookie': '加cookie',
'referer': 'https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&createType=0&token=1252678642&lang=zh_CN',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
}
response = requests.get(url=url, headers=headers)
html_data = response.json()
pprint.pprint(response.json())
lis = html_data['app_msg_list']
for li in lis:
title = li['title']
link_url = li['link']
update_time = li['update_time']
timeArray = time.localtime(int(update_time))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
'標題': title,
'文章發(fā)布時(shí)間': otherStyleTime,
'文章地址': link_url,
}
csv_writer.writerow(dit)
print(dit)
  檢索有關(guān)python 文章的所有正式帳戶(hù)
  1,搜狗搜索python選擇微信
  
  注意:如果不登錄,則只能抓取數據的前十頁(yè)。登錄后,您可以檢索2W以上的文章文章。
  2。直接檢索靜態(tài)網(wǎng)頁(yè)的標題,官方帳戶(hù),文章地址和發(fā)布時(shí)間。
  import time
import requests
import parsel
import csv
f = open('公眾號文章.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['標題', '公眾號', '文章發(fā)布時(shí)間', '文章地址'])
csv_writer.writeheader()
for page in range(1, 2447):
url = f'https://weixin.sogou.com/weixin?query=python&_sug_type_=&s_from=input&_sug_=n&type=2&page={page}&ie=utf8'
headers = {
'Cookie': '自己的cookie',
'Host': 'weixin.sogou.com',
'Referer': 'https://www.sogou.com/web?query=python&_asf=www.sogou.com&_ast=&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=1396&sst0=1610779538290&lkt=0%2C0%2C0&sugsuv=1590216228113568&sugtime=1610779538290',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
}
response = requests.get(url=url, headers=headers)
selector = parsel.Selector(response.text)
lis = selector.css('.news-list li')
for li in lis:
title_list = li.css('.txt-box h3 a::text').getall()
num = len(title_list)
if num == 1:
title_str = 'python' + title_list[0]
else:
title_str = 'python'.join(title_list)
href = li.css('.txt-box h3 a::attr(href)').get()
article_url = 'https://weixin.sogou.com' + href
name = li.css('.s-p a::text').get()
date = li.css('.s-p::attr(t)').get()
timeArray = time.localtime(int(date))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
'標題': title_str,
'公眾號': name,
'文章發(fā)布時(shí)間': otherStyleTime,
'文章地址': article_url,
}
csv_writer.writerow(dit)
print(title_str, name, otherStyleTime, article_url)
   查看全部

  Python爬蟲(chóng)、數據分析、網(wǎng)站開(kāi)發(fā)等案例教程視頻免費在線(xiàn)觀(guān)看
  前言
  本文中的文本和圖片過(guò)濾網(wǎng)絡(luò )可以用于學(xué)習,交流,并且沒(méi)有任何商業(yè)用途。如有任何疑問(wèn),請與我們聯(lián)系進(jìn)行處理。
  免費在線(xiàn)觀(guān)看有關(guān)Python采集器,數據分析,網(wǎng)站開(kāi)發(fā)等的案例教程視頻
  https://space.bilibili.com/523606542
  
  基本開(kāi)發(fā)環(huán)境抓取了兩個(gè)官方帳戶(hù)的文章:
  1。爬網(wǎng)Cyan Light編程官方帳戶(hù)的所有文章
  2,抓取有關(guān)python 文章的所有官方帳戶(hù)
  檢索Cyan Light編程官方帳戶(hù)的所有文章
  1,登錄正式帳戶(hù)后,單擊圖片和文字
  
  2,打開(kāi)開(kāi)發(fā)人員工具
  
  3,單擊超鏈接
  
  加載相關(guān)數據后,會(huì )出現一個(gè)數據包,包括文章標題,鏈接,摘要,發(fā)布時(shí)間等。您還可以選擇其他官方帳戶(hù)進(jìn)行抓取,但這需要您擁有一個(gè)微信公眾號帳戶(hù)。
  添加cookie
  import pprint
import time
import requests
import csv
f = open('青燈公眾號文章.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['標題', '文章發(fā)布時(shí)間', '文章地址'])
csv_writer.writeheader()
for page in range(0, 40, 5):
url = f'https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin={page}&count=5&fakeid=&type=9&query=&token=1252678642&lang=zh_CN&f=json&ajax=1'
headers = {
'cookie': '加cookie',
'referer': 'https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&createType=0&token=1252678642&lang=zh_CN',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
}
response = requests.get(url=url, headers=headers)
html_data = response.json()
pprint.pprint(response.json())
lis = html_data['app_msg_list']
for li in lis:
title = li['title']
link_url = li['link']
update_time = li['update_time']
timeArray = time.localtime(int(update_time))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
'標題': title,
'文章發(fā)布時(shí)間': otherStyleTime,
'文章地址': link_url,
}
csv_writer.writerow(dit)
print(dit)
  檢索有關(guān)python 文章的所有正式帳戶(hù)
  1,搜狗搜索python選擇微信
  
  注意:如果不登錄,則只能抓取數據的前十頁(yè)。登錄后,您可以檢索2W以上的文章文章。
  2。直接檢索靜態(tài)網(wǎng)頁(yè)的標題,官方帳戶(hù),文章地址和發(fā)布時(shí)間。
  import time
import requests
import parsel
import csv
f = open('公眾號文章.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['標題', '公眾號', '文章發(fā)布時(shí)間', '文章地址'])
csv_writer.writeheader()
for page in range(1, 2447):
url = f'https://weixin.sogou.com/weixin?query=python&_sug_type_=&s_from=input&_sug_=n&type=2&page={page}&ie=utf8'
headers = {
'Cookie': '自己的cookie',
'Host': 'weixin.sogou.com',
'Referer': 'https://www.sogou.com/web?query=python&_asf=www.sogou.com&_ast=&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=1396&sst0=1610779538290&lkt=0%2C0%2C0&sugsuv=1590216228113568&sugtime=1610779538290',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
}
response = requests.get(url=url, headers=headers)
selector = parsel.Selector(response.text)
lis = selector.css('.news-list li')
for li in lis:
title_list = li.css('.txt-box h3 a::text').getall()
num = len(title_list)
if num == 1:
title_str = 'python' + title_list[0]
else:
title_str = 'python'.join(title_list)
href = li.css('.txt-box h3 a::attr(href)').get()
article_url = 'https://weixin.sogou.com' + href
name = li.css('.s-p a::text').get()
date = li.css('.s-p::attr(t)').get()
timeArray = time.localtime(int(date))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
'標題': title_str,
'公眾號': name,
'文章發(fā)布時(shí)間': otherStyleTime,
'文章地址': article_url,
}
csv_writer.writerow(dit)
print(title_str, name, otherStyleTime, article_url)
  

微信公眾號文章采集的入口歷史消息頁(yè)信息獲取方法

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

  微信公眾號文章采集的入口歷史消息頁(yè)信息獲取方法
  我解釋了如何在微信公眾號文章采集的進(jìn)入歷史消息頁(yè)面上獲取信息。有需要的朋友可以參考此內容。
  采集 WeChat文章和采集 網(wǎng)站具有相同的內容,都需要從列表頁(yè)面開(kāi)始。而微信文章的列表頁(yè)面是官方賬戶(hù)中的觀(guān)看歷史信息頁(yè)面?;ヂ?lián)網(wǎng)上的其他一些微信采集器現在使用搜狗進(jìn)行搜索。盡管采集的方法簡(jiǎn)單得多,但內容并不完整。因此,我們仍然必須來(lái)自最標準,最全面的官方帳戶(hù)歷史記錄信息頁(yè)面采集。
  由于微信的限制,我們可以復制到的鏈接不完整,并且無(wú)法在瀏覽器中打開(kāi)內容。因此,我們需要使用anyproxy通過(guò)上一篇文章文章中介紹的方法來(lái)獲取完整的微信官方帳戶(hù)歷史記錄消息頁(yè)面的鏈接地址。
 ?。?BBoEMdPDBtOun1F%2F9ENSz&wx_header = 1
  如前一篇文章文章所述,biz參數是官方帳戶(hù)的ID,而uin是用戶(hù)的ID。目前,uin是所有官方帳戶(hù)中唯一的帳戶(hù)。另外兩個(gè)重要參數key和pass_ticket是微信客戶(hù)端上的補充參數。
  因此,在該地址過(guò)期之前,我們可以通過(guò)在瀏覽器中查看原創(chuàng )文本來(lái)獲取歷史消息的文章列表。如果我們想自動(dòng)分析內容,我們還可以使用尚未過(guò)期的密鑰來(lái)編寫(xiě)程序。例如,使用pass_ticket的鏈接地址提交它,然后通過(guò)php程序獲取文章列表。
  最近,一個(gè)朋友告訴我,他的采集目標是一個(gè)單一的正式帳戶(hù),我認為沒(méi)有必要使用上一篇文章文章中編寫(xiě)的批處理采集方法。因此,讓我們看一下歷史新聞頁(yè)面中如何獲取文章列表。通過(guò)分析文章列表,我們可以獲得該官方帳戶(hù)的所有內容鏈接地址,然后采集內容就可以了。
  如果在anyproxy Web界面中正確配置了證書(shū),則可以顯示https的內容。 Web界面的地址為:8002,其中localhost可以替換為您自己的IP地址或域名。從列表中找到以getmasssendmsg開(kāi)頭的記錄,然后單擊它,該記錄的詳細信息將顯示在右側:
  
  紅色框是完整的鏈接地址。將微信公眾平臺的域名拼接起來(lái)后,可以在瀏覽器中打開(kāi)。
  然后將頁(yè)面下拉至html內容的末尾,我們可以看到j(luò )son變量是歷史新聞的文章列表:
  
  我們復制msgList的變量值并使用json格式化工具對其進(jìn)行分析,我們可以看到j(luò )son具有以下結構:
  
{
"list": [
{
"app_msg_ext_info": {
"author": "",
"content": "",
"content_url": "http://mp.weixin.qq.com/s%3F__ ... ot%3B,
"copyright_stat": 100,
"cover": "http://mmbiz.qpic.cn/mmbiz/Mof ... ot%3B,
"digest": "擦亮雙眼,遠離謠言。",
"fileid": 505283695,
"is_multi": 1,
"multi_app_msg_item_list": [
{
"author": "",
"content": "",
"content_url": "http://mp.weixin.qq.com/s%3F__ ... ot%3B,
"copyright_stat": 100,
"cover": "http://mmbiz.qpic.cn/mmbiz_png ... ot%3B,
"digest": "12月28日,廣州亞運城綜合體育館,內附購票入口~",
"fileid": 0,
"source_url": "http://wechat.show.wepiao.com/ ... ot%3B,
"title": "2017微信公開(kāi)課Pro版即將召開(kāi)"
},
...//循環(huán)被省略
],
"source_url": "",
"subtype": 9,
"title": "謠言熱榜 | 十一月朋友圈十大謠言"
},
"comm_msg_info": {
"content": "",
"datetime": 1480933315,
"fakeid": "3093134871",
"id": 1000000010,
"status": 2,
"type": 49 //類(lèi)型為49的時(shí)候是圖文消息
}
},
...//循環(huán)被省略
]
}
  對此json的簡(jiǎn)要分析(此處僅介紹一些重要信息,而其他信息則省略):
  
"list": [ //最外層的鍵名;只出現一次,所有內容都被它包含。
{//這個(gè)大闊號之內是一條多圖文或單圖文消息,通俗的說(shuō)就是一天的群發(fā)都在這里
"app_msg_ext_info":{//圖文消息的擴展信息
"content_url": "圖文消息的鏈接地址",
"cover": "封面圖片",
"digest": "??",
"is_multi": "是否多圖文,值為1和0",
"multi_app_msg_item_list": [//這里面包含的是從第二條開(kāi)始的圖文消息,如果is_multi=0,這里將為空
{
"content_url": "圖文消息的鏈接地址",
"cover": "封面圖片",
"digest": ""??"",
"source_url": "閱讀原文的地址",
"title": "子內容標題"
},
...//循環(huán)被省略
],
"source_url": "閱讀原文的地址",
"title": "頭條標題"
},
"comm_msg_info":{//圖文消息的基本信息
"datetime": '發(fā)布時(shí)間,值為unix時(shí)間戳',
"type": 49 //類(lèi)型為49的時(shí)候是圖文消息
}
},
...//循環(huán)被省略
]
  這里要提到的另一件事是,如果您想獲得更長(cháng)的消息內容歷史記錄,則需要在電話(huà)或仿真器中下拉頁(yè)面。當您到達底部時(shí),微信會(huì )自動(dòng)讀取它。下一頁(yè)的內容。下一頁(yè)的鏈接地址和歷史消息頁(yè)的鏈接地址也是以getmasssendmsg開(kāi)頭的地址。但是內容只是json,沒(méi)有html。只需直接解析json。
  這時(shí),您可以使用上一篇文章文章中介紹的方法來(lái)使用anyproxy匹配msgList變量值并將其異步提交到服務(wù)器,然后使用php的json_decode將json解析為服務(wù)器。然后遍歷循環(huán)數組。我們可以獲取每篇文章的標題和鏈接地址文章。
  如果您只需要采集個(gè)官方帳戶(hù)的內容,則可以在每日批量發(fā)布后通過(guò)anyproxy獲得帶有key和pass_ticket的完整鏈接地址。然后自己制作一個(gè)程序,然后手動(dòng)將地址提交給您的程序。使用php等語(yǔ)言定期匹配msgList,然后解析json。這樣,無(wú)需修改anyproxy規則,也無(wú)需制作采集隊列和跳轉頁(yè)面。 查看全部

  微信公眾號文章采集的入口歷史消息頁(yè)信息獲取方法
  我解釋了如何在微信公眾號文章采集的進(jìn)入歷史消息頁(yè)面上獲取信息。有需要的朋友可以參考此內容。
  采集 WeChat文章和采集 網(wǎng)站具有相同的內容,都需要從列表頁(yè)面開(kāi)始。而微信文章的列表頁(yè)面是官方賬戶(hù)中的觀(guān)看歷史信息頁(yè)面?;ヂ?lián)網(wǎng)上的其他一些微信采集器現在使用搜狗進(jìn)行搜索。盡管采集的方法簡(jiǎn)單得多,但內容并不完整。因此,我們仍然必須來(lái)自最標準,最全面的官方帳戶(hù)歷史記錄信息頁(yè)面采集。
  由于微信的限制,我們可以復制到的鏈接不完整,并且無(wú)法在瀏覽器中打開(kāi)內容。因此,我們需要使用anyproxy通過(guò)上一篇文章文章中介紹的方法來(lái)獲取完整的微信官方帳戶(hù)歷史記錄消息頁(yè)面的鏈接地址。
 ?。?BBoEMdPDBtOun1F%2F9ENSz&wx_header = 1
  如前一篇文章文章所述,biz參數是官方帳戶(hù)的ID,而uin是用戶(hù)的ID。目前,uin是所有官方帳戶(hù)中唯一的帳戶(hù)。另外兩個(gè)重要參數key和pass_ticket是微信客戶(hù)端上的補充參數。
  因此,在該地址過(guò)期之前,我們可以通過(guò)在瀏覽器中查看原創(chuàng )文本來(lái)獲取歷史消息的文章列表。如果我們想自動(dòng)分析內容,我們還可以使用尚未過(guò)期的密鑰來(lái)編寫(xiě)程序。例如,使用pass_ticket的鏈接地址提交它,然后通過(guò)php程序獲取文章列表。
  最近,一個(gè)朋友告訴我,他的采集目標是一個(gè)單一的正式帳戶(hù),我認為沒(méi)有必要使用上一篇文章文章中編寫(xiě)的批處理采集方法。因此,讓我們看一下歷史新聞頁(yè)面中如何獲取文章列表。通過(guò)分析文章列表,我們可以獲得該官方帳戶(hù)的所有內容鏈接地址,然后采集內容就可以了。
  如果在anyproxy Web界面中正確配置了證書(shū),則可以顯示https的內容。 Web界面的地址為:8002,其中localhost可以替換為您自己的IP地址或域名。從列表中找到以getmasssendmsg開(kāi)頭的記錄,然后單擊它,該記錄的詳細信息將顯示在右側:
  
  紅色框是完整的鏈接地址。將微信公眾平臺的域名拼接起來(lái)后,可以在瀏覽器中打開(kāi)。
  然后將頁(yè)面下拉至html內容的末尾,我們可以看到j(luò )son變量是歷史新聞的文章列表:
  
  我們復制msgList的變量值并使用json格式化工具對其進(jìn)行分析,我們可以看到j(luò )son具有以下結構:
  
{
"list": [
{
"app_msg_ext_info": {
"author": "",
"content": "",
"content_url": "http://mp.weixin.qq.com/s%3F__ ... ot%3B,
"copyright_stat": 100,
"cover": "http://mmbiz.qpic.cn/mmbiz/Mof ... ot%3B,
"digest": "擦亮雙眼,遠離謠言。",
"fileid": 505283695,
"is_multi": 1,
"multi_app_msg_item_list": [
{
"author": "",
"content": "",
"content_url": "http://mp.weixin.qq.com/s%3F__ ... ot%3B,
"copyright_stat": 100,
"cover": "http://mmbiz.qpic.cn/mmbiz_png ... ot%3B,
"digest": "12月28日,廣州亞運城綜合體育館,內附購票入口~",
"fileid": 0,
"source_url": "http://wechat.show.wepiao.com/ ... ot%3B,
"title": "2017微信公開(kāi)課Pro版即將召開(kāi)"
},
...//循環(huán)被省略
],
"source_url": "",
"subtype": 9,
"title": "謠言熱榜 | 十一月朋友圈十大謠言"
},
"comm_msg_info": {
"content": "",
"datetime": 1480933315,
"fakeid": "3093134871",
"id": 1000000010,
"status": 2,
"type": 49 //類(lèi)型為49的時(shí)候是圖文消息
}
},
...//循環(huán)被省略
]
}
  對此json的簡(jiǎn)要分析(此處僅介紹一些重要信息,而其他信息則省略):
  
"list": [ //最外層的鍵名;只出現一次,所有內容都被它包含。
{//這個(gè)大闊號之內是一條多圖文或單圖文消息,通俗的說(shuō)就是一天的群發(fā)都在這里
"app_msg_ext_info":{//圖文消息的擴展信息
"content_url": "圖文消息的鏈接地址",
"cover": "封面圖片",
"digest": "??",
"is_multi": "是否多圖文,值為1和0",
"multi_app_msg_item_list": [//這里面包含的是從第二條開(kāi)始的圖文消息,如果is_multi=0,這里將為空
{
"content_url": "圖文消息的鏈接地址",
"cover": "封面圖片",
"digest": ""??"",
"source_url": "閱讀原文的地址",
"title": "子內容標題"
},
...//循環(huán)被省略
],
"source_url": "閱讀原文的地址",
"title": "頭條標題"
},
"comm_msg_info":{//圖文消息的基本信息
"datetime": '發(fā)布時(shí)間,值為unix時(shí)間戳',
"type": 49 //類(lèi)型為49的時(shí)候是圖文消息
}
},
...//循環(huán)被省略
]
  這里要提到的另一件事是,如果您想獲得更長(cháng)的消息內容歷史記錄,則需要在電話(huà)或仿真器中下拉頁(yè)面。當您到達底部時(shí),微信會(huì )自動(dòng)讀取它。下一頁(yè)的內容。下一頁(yè)的鏈接地址和歷史消息頁(yè)的鏈接地址也是以getmasssendmsg開(kāi)頭的地址。但是內容只是json,沒(méi)有html。只需直接解析json。
  這時(shí),您可以使用上一篇文章文章中介紹的方法來(lái)使用anyproxy匹配msgList變量值并將其異步提交到服務(wù)器,然后使用php的json_decode將json解析為服務(wù)器。然后遍歷循環(huán)數組。我們可以獲取每篇文章的標題和鏈接地址文章。
  如果您只需要采集個(gè)官方帳戶(hù)的內容,則可以在每日批量發(fā)布后通過(guò)anyproxy獲得帶有key和pass_ticket的完整鏈接地址。然后自己制作一個(gè)程序,然后手動(dòng)將地址提交給您的程序。使用php等語(yǔ)言定期匹配msgList,然后解析json。這樣,無(wú)需修改anyproxy規則,也無(wú)需制作采集隊列和跳轉頁(yè)面。

分享:Python 微信公眾號文章爬取的示例代碼

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

  分享:Python 微信公眾號文章爬取的示例代碼
  Python微信官方帳戶(hù)文章抓取的示例代碼
  更新時(shí)間:2020年11月30日08:31:45作者:少年白
  此文章主要介紹了Python微信公共帳戶(hù)文章抓取的示例代碼。本文將詳細介紹示例代碼,該示例代碼對于每個(gè)人的學(xué)習或工作都具有一定的參考學(xué)習價(jià)值。有需要的朋友讓我們與編輯一起學(xué)習。
  ?.?·
  我們通過(guò)微信公眾平臺網(wǎng)絡(luò )版圖形消息中的超鏈接獲得所需的界面
  
  
  從界面中,我們可以獲得相應的微信公眾號和所有相應的微信公眾號文章。
  二.界面分析
  訪(fǎng)問(wèn)微信官方帳戶(hù):
  參數:
  action = search_biz
  開(kāi)始= 0
  count = 5
  query =官方帳戶(hù)名
  token =每個(gè)帳戶(hù)對應的令牌值
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  因此在此界面中,我們只需要獲取令牌,查詢(xún)就是您需要搜索的官方帳戶(hù),并且可以在登錄后通過(guò)Web鏈接獲取令牌。
  
  獲取與官方帳戶(hù)對應的文章界面:
  參數:
  action = list_ex
  開(kāi)始= 0
  count = 5
  fakeid = MjM5NDAwMTA2MA ==
  type = 9
  query =
  token = 557131216
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  我們需要在該接口中獲取的值是上一步中的令牌和偽標識,并且可以在第一個(gè)接口中獲取該偽標識。這樣我們就可以獲得微信公眾號文章的數據。
  
  三.實(shí)施
  第一步:
  首先,我們需要模擬通過(guò)硒的登錄,然后獲取cookie和相應的令牌
  
def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義一個(gè)登錄方法,其中的參數是登錄帳戶(hù)和密碼,然后定義一個(gè)字典來(lái)存儲cookie值。通過(guò)模擬用戶(hù),輸入相應的帳戶(hù)密碼,然后單擊“登錄”,然后將出現一個(gè)掃描驗證碼,只需使用登錄微信進(jìn)行掃描即可。
  刷新當前網(wǎng)頁(yè)后,獲取當前的cookie和令牌,然后返回。
  第2步:
  1.請求獲得相應的官方帳戶(hù)界面,并獲取我們需要的偽造物
  
url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲得的令牌和cookie,然后通過(guò)request.get請求獲取返回的微信官方帳戶(hù)的json數據
  
lists = search_resp.json().get('list')[0]
  可以通過(guò)上面的代碼獲取相應的官方帳戶(hù)數據
  
fakeid = lists.get('fakeid')
  可以通過(guò)上面的代碼獲得相應的偽造物
  2.請求微信公眾號文章界面,并獲取了我們需要的文章數據
  
appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入了fakeid和token,然后調用request.get請求接口以獲取返回的json數據。
  我們已經(jīng)意識到抓取微信官方帳戶(hù)文章。
  四.摘要
  通過(guò)抓取微信公眾號文章,您需要掌握硒的使用和請求,以及如何獲取請求接口。但是需要注意的是,當我們循環(huán)獲得文章時(shí),必須設置延遲時(shí)間,否則帳戶(hù)將很容易被阻塞,并且無(wú)法獲得返回的數據。
  這是本文文章的結尾,有關(guān)Python微信公共帳戶(hù)文章抓取的示例代碼。有關(guān)Python微信公眾號文章爬網(wǎng)內容的更多相關(guān)信息,請搜索以前的腳本文章或繼續瀏覽相關(guān)的文章,希望您將來(lái)會(huì )支持腳本屋! 查看全部

  分享:Python 微信公眾號文章爬取的示例代碼
  Python微信官方帳戶(hù)文章抓取的示例代碼
  更新時(shí)間:2020年11月30日08:31:45作者:少年白
  此文章主要介紹了Python微信公共帳戶(hù)文章抓取的示例代碼。本文將詳細介紹示例代碼,該示例代碼對于每個(gè)人的學(xué)習或工作都具有一定的參考學(xué)習價(jià)值。有需要的朋友讓我們與編輯一起學(xué)習。
  ?.?·
  我們通過(guò)微信公眾平臺網(wǎng)絡(luò )版圖形消息中的超鏈接獲得所需的界面
  
  
  從界面中,我們可以獲得相應的微信公眾號和所有相應的微信公眾號文章。
  二.界面分析
  訪(fǎng)問(wèn)微信官方帳戶(hù):
  參數:
  action = search_biz
  開(kāi)始= 0
  count = 5
  query =官方帳戶(hù)名
  token =每個(gè)帳戶(hù)對應的令牌值
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  因此在此界面中,我們只需要獲取令牌,查詢(xún)就是您需要搜索的官方帳戶(hù),并且可以在登錄后通過(guò)Web鏈接獲取令牌。
  
  獲取與官方帳戶(hù)對應的文章界面:
  參數:
  action = list_ex
  開(kāi)始= 0
  count = 5
  fakeid = MjM5NDAwMTA2MA ==
  type = 9
  query =
  token = 557131216
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  我們需要在該接口中獲取的值是上一步中的令牌和偽標識,并且可以在第一個(gè)接口中獲取該偽標識。這樣我們就可以獲得微信公眾號文章的數據。
  
  三.實(shí)施
  第一步:
  首先,我們需要模擬通過(guò)硒的登錄,然后獲取cookie和相應的令牌
  
def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義一個(gè)登錄方法,其中的參數是登錄帳戶(hù)和密碼,然后定義一個(gè)字典來(lái)存儲cookie值。通過(guò)模擬用戶(hù),輸入相應的帳戶(hù)密碼,然后單擊“登錄”,然后將出現一個(gè)掃描驗證碼,只需使用登錄微信進(jìn)行掃描即可。
  刷新當前網(wǎng)頁(yè)后,獲取當前的cookie和令牌,然后返回。
  第2步:
  1.請求獲得相應的官方帳戶(hù)界面,并獲取我們需要的偽造物
  
url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲得的令牌和cookie,然后通過(guò)request.get請求獲取返回的微信官方帳戶(hù)的json數據
  
lists = search_resp.json().get('list')[0]
  可以通過(guò)上面的代碼獲取相應的官方帳戶(hù)數據
  
fakeid = lists.get('fakeid')
  可以通過(guò)上面的代碼獲得相應的偽造物
  2.請求微信公眾號文章界面,并獲取了我們需要的文章數據
  
appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入了fakeid和token,然后調用request.get請求接口以獲取返回的json數據。
  我們已經(jīng)意識到抓取微信官方帳戶(hù)文章。
  四.摘要
  通過(guò)抓取微信公眾號文章,您需要掌握硒的使用和請求,以及如何獲取請求接口。但是需要注意的是,當我們循環(huán)獲得文章時(shí),必須設置延遲時(shí)間,否則帳戶(hù)將很容易被阻塞,并且無(wú)法獲得返回的數據。
  這是本文文章的結尾,有關(guān)Python微信公共帳戶(hù)文章抓取的示例代碼。有關(guān)Python微信公眾號文章爬網(wǎng)內容的更多相關(guān)信息,請搜索以前的腳本文章或繼續瀏覽相關(guān)的文章,希望您將來(lái)會(huì )支持腳本屋!

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

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

  分享文章:Python爬蟲(chóng)實(shí)戰練習:爬取微信公眾號文章
  為了實(shí)現此采集器,我們需要使用以下工具
  此外,此采集器使用微信官方帳戶(hù)后臺編輯界面。原理是,當我們插入超鏈接時(shí),微信將調用特殊的API(請參見(jiàn)下圖)以獲取指定官方帳戶(hù)的文章列表。因此,我們還需要擁有一個(gè)官方帳戶(hù)。
  
  PS:如果您需要Python學(xué)習資料,可以加入下面的小組,找到免費的管理員來(lái)獲取
  
  您可以免費獲取源代碼,投影實(shí)戰視頻,PDF文件等
  
  正式開(kāi)始
  我們需要登錄到WeChat官方帳戶(hù),依次單擊“物料管理”,“新建圖形消息”,然后單擊上方的超鏈接。
  
  下一步,按F12鍵打開(kāi)Chrome的開(kāi)發(fā)人員工具,然后選擇“網(wǎng)絡(luò )”
  
  這時(shí),在上一個(gè)超鏈接界面中,單擊“選擇另一個(gè)官方帳戶(hù)”,然后輸入您需要抓取的官方帳戶(hù)(例如中國移動(dòng))
  
  這時(shí),以前的網(wǎng)絡(luò )將刷新一些鏈接,其中以“ appmsg”開(kāi)頭的內容是我們需要分析的
  
  我們解析請求的網(wǎng)址
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  分為三個(gè)部分
  通過(guò)不斷瀏覽下一頁(yè),我們發(fā)現每次都只會(huì )開(kāi)始更改,并且每次增加5(即count的值)。
  接下來(lái),我們使用Python獲取相同的資源,但是不可能通過(guò)直接運行以下代碼來(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ú)效。我們需要在請求中設置headers參數,并傳入Cookie和User-Agent以模擬登錄
  因為標題信息的內容每次都會(huì )改變,所以我將這些內容放在一個(gè)單獨的文件“ wechat.yaml”中,信息如下
  cookie: ua_id=wuzWM9FKE14...
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中,我們可以看到每個(gè)文章的標題(標題),摘要(摘要),鏈接(鏈接),推送時(shí)間(update_time)和封面地址(封面)。
  appmsgid是每個(gè)推文的唯一標識符,而aid是每個(gè)推文的唯一標識符。
  
  實(shí)際上,除了cookie之外,URL中的token參數還將用于限制采集器,因此上述代碼很可能輸出{'base_resp':{'ret':200040,'err_msg':'無(wú)效的csrf令牌'}}
  接下來(lái),我們編寫(xiě)一個(gè)循環(huán)以獲取所有文章 JSON并將其保存。
  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
  在上面的代碼中,我還將偽造品和令牌存儲在“ wechat.yaml”文件中。這是因為fakeid是每個(gè)正式帳戶(hù)唯一的標識符,并且令牌會(huì )經(jīng)常更改。此信息可以通過(guò)解析URL獲得,也可以從開(kāi)發(fā)人員工具中查看
  
  爬行一段時(shí)間后,您會(huì )遇到以下問(wèn)題
  {'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
  這時(shí),當您嘗試在官方帳戶(hù)的背景中插入超鏈接時(shí),會(huì )出現以下提示
  
  這是官方帳戶(hù)的流量限制,通常需要等待30-60分鐘才能繼續。為了完美地解決此問(wèn)題,您可能需要申請多個(gè)官方帳戶(hù),可能需要與微信官方帳戶(hù)登錄系統進(jìn)行對抗,或者可能需要建立代理池。
  但是我不需要工業(yè)級的采集器,我只想搜尋我自己的官方帳戶(hù)信息,因此請等待一個(gè)小時(shí),再次登錄到官方帳戶(hù),獲取Cookie和令牌并運行它。我不想為自己的利益挑戰別人的工作。
  最后,將結果保存為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。
  info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list)) 查看全部

  分享文章:Python爬蟲(chóng)實(shí)戰練習:爬取微信公眾號文章
  為了實(shí)現此采集器,我們需要使用以下工具
  此外,此采集器使用微信官方帳戶(hù)后臺編輯界面。原理是,當我們插入超鏈接時(shí),微信將調用特殊的API(請參見(jiàn)下圖)以獲取指定官方帳戶(hù)的文章列表。因此,我們還需要擁有一個(gè)官方帳戶(hù)。
  
  PS:如果您需要Python學(xué)習資料,可以加入下面的小組,找到免費的管理員來(lái)獲取
  
  您可以免費獲取源代碼,投影實(shí)戰視頻,PDF文件等
  
  正式開(kāi)始
  我們需要登錄到WeChat官方帳戶(hù),依次單擊“物料管理”,“新建圖形消息”,然后單擊上方的超鏈接。
  
  下一步,按F12鍵打開(kāi)Chrome的開(kāi)發(fā)人員工具,然后選擇“網(wǎng)絡(luò )”
  
  這時(shí),在上一個(gè)超鏈接界面中,單擊“選擇另一個(gè)官方帳戶(hù)”,然后輸入您需要抓取的官方帳戶(hù)(例如中國移動(dòng))
  
  這時(shí),以前的網(wǎng)絡(luò )將刷新一些鏈接,其中以“ appmsg”開(kāi)頭的內容是我們需要分析的
  
  我們解析請求的網(wǎng)址
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  分為三個(gè)部分
  通過(guò)不斷瀏覽下一頁(yè),我們發(fā)現每次都只會(huì )開(kāi)始更改,并且每次增加5(即count的值)。
  接下來(lái),我們使用Python獲取相同的資源,但是不可能通過(guò)直接運行以下代碼來(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ú)效。我們需要在請求中設置headers參數,并傳入Cookie和User-Agent以模擬登錄
  因為標題信息的內容每次都會(huì )改變,所以我將這些內容放在一個(gè)單獨的文件“ wechat.yaml”中,信息如下
  cookie: ua_id=wuzWM9FKE14...
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中,我們可以看到每個(gè)文章的標題(標題),摘要(摘要),鏈接(鏈接),推送時(shí)間(update_time)和封面地址(封面)。
  appmsgid是每個(gè)推文的唯一標識符,而aid是每個(gè)推文的唯一標識符。
  
  實(shí)際上,除了cookie之外,URL中的token參數還將用于限制采集器,因此上述代碼很可能輸出{'base_resp':{'ret':200040,'err_msg':'無(wú)效的csrf令牌'}}
  接下來(lái),我們編寫(xiě)一個(gè)循環(huán)以獲取所有文章 JSON并將其保存。
  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
  在上面的代碼中,我還將偽造品和令牌存儲在“ wechat.yaml”文件中。這是因為fakeid是每個(gè)正式帳戶(hù)唯一的標識符,并且令牌會(huì )經(jīng)常更改。此信息可以通過(guò)解析URL獲得,也可以從開(kāi)發(fā)人員工具中查看
  
  爬行一段時(shí)間后,您會(huì )遇到以下問(wèn)題
  {'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
  這時(shí),當您嘗試在官方帳戶(hù)的背景中插入超鏈接時(shí),會(huì )出現以下提示
  
  這是官方帳戶(hù)的流量限制,通常需要等待30-60分鐘才能繼續。為了完美地解決此問(wèn)題,您可能需要申請多個(gè)官方帳戶(hù),可能需要與微信官方帳戶(hù)登錄系統進(jìn)行對抗,或者可能需要建立代理池。
  但是我不需要工業(yè)級的采集器,我只想搜尋我自己的官方帳戶(hù)信息,因此請等待一個(gè)小時(shí),再次登錄到官方帳戶(hù),獲取Cookie和令牌并運行它。我不想為自己的利益挑戰別人的工作。
  最后,將結果保存為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。
  info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list))

分享文章:如何使用python3抓取微信公眾號文章,了解一下?

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

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

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

解決方案:2.請求獲取微信公眾號文章接口,取到我們需要的文章數據

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

  2.請求獲取微信官方帳戶(hù)文章界面,并獲取我們需要的文章數據
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)絡(luò )版圖形消息中的超鏈接獲得所需的界面
  
  
  從界面中,我們可以獲得相應的微信公眾號和所有相應的微信公眾號文章。
  二.界面分析
  訪(fǎng)問(wèn)微信官方帳戶(hù):
  參數:
  action = search_biz
  開(kāi)始= 0
  count = 5
  query =官方帳戶(hù)名
  token =每個(gè)帳戶(hù)對應的令牌值
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  因此在此界面中,我們只需要獲取令牌,查詢(xún)就是您需要搜索的官方帳戶(hù),并且可以在登錄后通過(guò)Web鏈接獲取令牌。
  
  獲取與官方帳戶(hù)對應的文章界面:
  參數:
  action = list_ex
  開(kāi)始= 0
  count = 5
  fakeid = MjM5NDAwMTA2MA ==
  type = 9
  query =
  token = 557131216
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  我們需要在此接口中獲取的值是上一步中的令牌和假I(mǎi)D,并且可以在第一個(gè)接口中獲得此假I(mǎi)D。這樣我們就可以獲得微信公眾號文章的數據。
  
  三.要實(shí)現的第一步:
  首先,我們需要模擬通過(guò)硒的登錄,然后獲取cookie和相應的令牌
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義一個(gè)登錄方法,其中的參數是登錄帳戶(hù)和密碼,然后定義一個(gè)字典來(lái)存儲cookie值。通過(guò)模擬用戶(hù),輸入相應的帳戶(hù)密碼,然后單擊“登錄”,然后將出現一個(gè)掃描驗證碼,只需使用登錄微信進(jìn)行掃描即可。
  刷新當前網(wǎng)頁(yè)后,獲取當前的cookie和令牌,然后返回。
  第2步:1.請求相應的官方帳戶(hù)界面,并獲取我們需要的偽造物
   url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲得的令牌和cookie,然后通過(guò)request.get請求獲取返回的微信官方帳戶(hù)的json數據
  lists = search_resp.json().get('list')[0]
  可以通過(guò)上面的代碼獲取相應的官方帳戶(hù)數據
  fakeid = lists.get('fakeid')
  可以通過(guò)上面的代碼獲得相應的偽造物
  2.請求獲取微信官方帳戶(hù)文章界面,并獲取我們需要的文章數據
   appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入了fakeid和token,然后調用request.get請求接口以獲取返回的json數據。
  我們已經(jīng)實(shí)現了對微信官方帳戶(hù)文章的抓取。
  四.摘要
  通過(guò)抓取微信公眾號文章,您需要掌握硒的使用和請求,以及如何獲取請求接口。但是需要注意的是,當我們循環(huán)獲得文章時(shí),必須設置延遲時(shí)間,否則帳戶(hù)將很容易被阻塞,并且無(wú)法獲得返回的數據。
  完成代碼后臺私人消息編輯器01可以 查看全部

  2.請求獲取微信官方帳戶(hù)文章界面,并獲取我們需要的文章數據
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)絡(luò )版圖形消息中的超鏈接獲得所需的界面
  
  
  從界面中,我們可以獲得相應的微信公眾號和所有相應的微信公眾號文章。
  二.界面分析
  訪(fǎng)問(wèn)微信官方帳戶(hù):
  參數:
  action = search_biz
  開(kāi)始= 0
  count = 5
  query =官方帳戶(hù)名
  token =每個(gè)帳戶(hù)對應的令牌值
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  因此在此界面中,我們只需要獲取令牌,查詢(xún)就是您需要搜索的官方帳戶(hù),并且可以在登錄后通過(guò)Web鏈接獲取令牌。
  
  獲取與官方帳戶(hù)對應的文章界面:
  參數:
  action = list_ex
  開(kāi)始= 0
  count = 5
  fakeid = MjM5NDAwMTA2MA ==
  type = 9
  query =
  token = 557131216
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  我們需要在此接口中獲取的值是上一步中的令牌和假I(mǎi)D,并且可以在第一個(gè)接口中獲得此假I(mǎi)D。這樣我們就可以獲得微信公眾號文章的數據。
  
  三.要實(shí)現的第一步:
  首先,我們需要模擬通過(guò)硒的登錄,然后獲取cookie和相應的令牌
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義一個(gè)登錄方法,其中的參數是登錄帳戶(hù)和密碼,然后定義一個(gè)字典來(lái)存儲cookie值。通過(guò)模擬用戶(hù),輸入相應的帳戶(hù)密碼,然后單擊“登錄”,然后將出現一個(gè)掃描驗證碼,只需使用登錄微信進(jìn)行掃描即可。
  刷新當前網(wǎng)頁(yè)后,獲取當前的cookie和令牌,然后返回。
  第2步:1.請求相應的官方帳戶(hù)界面,并獲取我們需要的偽造物
   url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲得的令牌和cookie,然后通過(guò)request.get請求獲取返回的微信官方帳戶(hù)的json數據
  lists = search_resp.json().get('list')[0]
  可以通過(guò)上面的代碼獲取相應的官方帳戶(hù)數據
  fakeid = lists.get('fakeid')
  可以通過(guò)上面的代碼獲得相應的偽造物
  2.請求獲取微信官方帳戶(hù)文章界面,并獲取我們需要的文章數據
   appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入了fakeid和token,然后調用request.get請求接口以獲取返回的json數據。
  我們已經(jīng)實(shí)現了對微信官方帳戶(hù)文章的抓取。
  四.摘要
  通過(guò)抓取微信公眾號文章,您需要掌握硒的使用和請求,以及如何獲取請求接口。但是需要注意的是,當我們循環(huán)獲得文章時(shí),必須設置延遲時(shí)間,否則帳戶(hù)將很容易被阻塞,并且無(wú)法獲得返回的數據。
  完成代碼后臺私人消息編輯器01可以

橫空出世:基于PC端的爬取公眾號歷史文章

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

  基于PC文章爬行官方帳戶(hù)的歷史記錄
  前言
  許多處于微信后臺的消息尚未得到回復:看到它們后我無(wú)法回復。如有任何疑問(wèn),可以添加我的微信:菜單->與我聯(lián)系
  因為我最近需要官方帳戶(hù)的歷史文章信息,所以我嘗試對其進(jìn)行爬網(wǎng)。盡管目前可以對數據進(jìn)行爬網(wǎng),但是它還不能對很多自動(dòng)化進(jìn)行爬網(wǎng)。原因是參數鍵值對時(shí)間敏感(特定時(shí)間未驗證為20分鐘),并且我不知道如何生成它。
  文章歷史記錄列表爬網(wǎng)
  進(jìn)入搜狗微信的第一件事是搜狗微信,但搜狗微信只能看到前十篇文章文章,而我無(wú)法確定閱讀量和觀(guān)看次數。我試圖爬網(wǎng)手機包裝,發(fā)現沒(méi)有信息被捕獲。我知道原因:
  1、Android系統7.低于0的微信信任系統證書(shū)。
  2、Android系統7. 0或更高版本,微信7. 0版本,微信信任系統提供的證書(shū)。
  3、Android系統7. 0或更高版本,微信7. 0或更高版本,微信僅信任自己的證書(shū)。
  我也嘗試使用appium自動(dòng)進(jìn)行爬網(wǎng),我個(gè)人覺(jué)得有點(diǎn)麻煩。因此,嘗試從PC抓取請求。
  這次進(jìn)入主題,我使用Fiddler捕獲數據包。下載鏈接:
  Fiddler如何捕獲數據包將不在此處一一解釋。首先,首次安裝Fiddler時(shí),需要安裝證書(shū)以捕獲HTTPS請求。
  如何安裝?
  打開(kāi)Fiddler并從菜單欄中找到工具->選項->單擊HTTPS->單擊操作,將安裝證書(shū),配置如下:
  以我自己的官方帳戶(hù)為例:登錄PC上的微信,打開(kāi)Fiddler,按F12鍵開(kāi)始/停止抓包,進(jìn)入官方帳戶(hù)歷史記錄文章頁(yè),請參見(jiàn)Fiddler有很多請求,如圖所示下方:
  因為查看歷史記錄是為了跳轉到新頁(yè)面,所以您可以從正文中返回更多內容,并且通過(guò)Content-Type,您還可以知道返回的內容是css或html或js,因此您可以查看首先在html上,所以幾乎可以在上面顯示的紅色框中找到鏈接,單擊它,然后您可以從右側查看返回結果和參數:
  從右側的頁(yè)眉中,您可以看到請求鏈接,方法,參數等。如果要更清晰地查看參數,可以單擊WebForms進(jìn)行查看,其結果如上圖所示。這是重要參數的說(shuō)明:
  __ biz:微信官方帳號的唯一標識(同一官方帳號保持不變)
  uin:唯一的用戶(hù)標識(同一微信用戶(hù)保持不變)
  鍵:微信的內部算法對時(shí)間敏感,所以我不知道它是如何計算的。
  pass_ticket:有一個(gè)閱讀權限加密,該加密已更改(在我的實(shí)際爬網(wǎng)中,我發(fā)現它是不必要的,可以忽略)
  在這一點(diǎn)上,您實(shí)際上可以編寫(xiě)代碼來(lái)爬網(wǎng)第一頁(yè)的文章,但是返回的是html頁(yè),顯然解析該頁(yè)很麻煩。
  您可以嘗試向下滑動(dòng),加載下一頁(yè)數據,然后查看它是json還是html。如果是json,則很容易處理,如果仍然是html,則必須對其進(jìn)行一些解析。繼續往下走,您會(huì )發(fā)現:
  此請求是返回的文章列表,它是json數據,這對我們進(jìn)行解析非常方便。從參數中,我們發(fā)現有一個(gè)偏移量為10的參數,這顯然是頁(yè)面的偏移量。此請求為10,以加載第二頁(yè)的歷史記錄,將其果斷地修改為0,然后發(fā)送請求,并獲取第一頁(yè)的數據,則無(wú)需解析html頁(yè),再次分析參數,并找到許多參數。他們中許多人是無(wú)用的。最終參數為:
  action:getmsg(固定值,應表示獲取更多信息)
  上面已經(jīng)描述了__biz,uin和key的三個(gè)值,它們也是此處的必需參數。
  f:json(固定值,表示返回json數據)
  偏移量:頁(yè)面偏移量
  如果要獲取官方帳戶(hù)的歷史記錄列表,則這6個(gè)參數是必需的,并且不需要帶其他參數。如圖所示,讓我們分析請求標頭中的聽(tīng)眾:
  參數很多,我不知道應該帶哪些參數,不需要帶那些參數。最后,我只需要攜帶UA。最后編寫(xiě)一個(gè)腳本來(lái)嘗試獲取它:
  import requests
url = "鏈接:http://鏈接:mp.weixin鏈接:.qq.com/mp/profile_ext"
headers= {
&#x27;User-Agent&#x27;:&#x27;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&#x27;
}
param = {
&#x27;action&#x27;: &#x27;getmsg&#x27;,
&#x27;__biz&#x27;: &#x27;MzU0NDg3NDg0Ng==&#x27;,
&#x27;f&#x27;: &#x27;json&#x27;,
&#x27;offset&#x27;: 0,
&#x27;uin&#x27;: &#x27;MTY5OTE4Mzc5Nw==&#x27;,
&#x27;key&#x27;: &#x27;0295ce962daa06881b1fbddd606f47252d0273a7280069e55e1daa347620284614629cd08ef0413941d46dc737cf866bc3ed3012ec202ffa9379c2538035a662e9ffa3f84852a0299a6590811b17de96&#x27;
}
index_josn = requests.get(url, params=param, headers=headers)
print(index_josn.json())
print(index_josn.json().get(&#x27;general_msg_list&#x27;))
  獲取json對象中的general_msg_list,并獲取結果:
  獲取文章詳細信息
  我有上面的鏈接,只是請求解析html頁(yè)面。這里沒(méi)有更多說(shuō)明(可以在完整代碼中查看)。 查看全部

  基于PC文章爬行官方帳戶(hù)的歷史記錄
  前言
  許多處于微信后臺的消息尚未得到回復:看到它們后我無(wú)法回復。如有任何疑問(wèn),可以添加我的微信:菜單->與我聯(lián)系
  因為我最近需要官方帳戶(hù)的歷史文章信息,所以我嘗試對其進(jìn)行爬網(wǎng)。盡管目前可以對數據進(jìn)行爬網(wǎng),但是它還不能對很多自動(dòng)化進(jìn)行爬網(wǎng)。原因是參數鍵值對時(shí)間敏感(特定時(shí)間未驗證為20分鐘),并且我不知道如何生成它。
  文章歷史記錄列表爬網(wǎng)
  進(jìn)入搜狗微信的第一件事是搜狗微信,但搜狗微信只能看到前十篇文章文章,而我無(wú)法確定閱讀量和觀(guān)看次數。我試圖爬網(wǎng)手機包裝,發(fā)現沒(méi)有信息被捕獲。我知道原因:
  1、Android系統7.低于0的微信信任系統證書(shū)。
  2、Android系統7. 0或更高版本,微信7. 0版本,微信信任系統提供的證書(shū)。
  3、Android系統7. 0或更高版本,微信7. 0或更高版本,微信僅信任自己的證書(shū)。
  我也嘗試使用appium自動(dòng)進(jìn)行爬網(wǎng),我個(gè)人覺(jué)得有點(diǎn)麻煩。因此,嘗試從PC抓取請求。
  這次進(jìn)入主題,我使用Fiddler捕獲數據包。下載鏈接:
  Fiddler如何捕獲數據包將不在此處一一解釋。首先,首次安裝Fiddler時(shí),需要安裝證書(shū)以捕獲HTTPS請求。
  如何安裝?
  打開(kāi)Fiddler并從菜單欄中找到工具->選項->單擊HTTPS->單擊操作,將安裝證書(shū),配置如下:
  以我自己的官方帳戶(hù)為例:登錄PC上的微信,打開(kāi)Fiddler,按F12鍵開(kāi)始/停止抓包,進(jìn)入官方帳戶(hù)歷史記錄文章頁(yè),請參見(jiàn)Fiddler有很多請求,如圖所示下方:
  因為查看歷史記錄是為了跳轉到新頁(yè)面,所以您可以從正文中返回更多內容,并且通過(guò)Content-Type,您還可以知道返回的內容是css或html或js,因此您可以查看首先在html上,所以幾乎可以在上面顯示的紅色框中找到鏈接,單擊它,然后您可以從右側查看返回結果和參數:
  從右側的頁(yè)眉中,您可以看到請求鏈接,方法,參數等。如果要更清晰地查看參數,可以單擊WebForms進(jìn)行查看,其結果如上圖所示。這是重要參數的說(shuō)明:
  __ biz:微信官方帳號的唯一標識(同一官方帳號保持不變)
  uin:唯一的用戶(hù)標識(同一微信用戶(hù)保持不變)
  鍵:微信的內部算法對時(shí)間敏感,所以我不知道它是如何計算的。
  pass_ticket:有一個(gè)閱讀權限加密,該加密已更改(在我的實(shí)際爬網(wǎng)中,我發(fā)現它是不必要的,可以忽略)
  在這一點(diǎn)上,您實(shí)際上可以編寫(xiě)代碼來(lái)爬網(wǎng)第一頁(yè)的文章,但是返回的是html頁(yè),顯然解析該頁(yè)很麻煩。
  您可以嘗試向下滑動(dòng),加載下一頁(yè)數據,然后查看它是json還是html。如果是json,則很容易處理,如果仍然是html,則必須對其進(jìn)行一些解析。繼續往下走,您會(huì )發(fā)現:
  此請求是返回的文章列表,它是json數據,這對我們進(jìn)行解析非常方便。從參數中,我們發(fā)現有一個(gè)偏移量為10的參數,這顯然是頁(yè)面的偏移量。此請求為10,以加載第二頁(yè)的歷史記錄,將其果斷地修改為0,然后發(fā)送請求,并獲取第一頁(yè)的數據,則無(wú)需解析html頁(yè),再次分析參數,并找到許多參數。他們中許多人是無(wú)用的。最終參數為:
  action:getmsg(固定值,應表示獲取更多信息)
  上面已經(jīng)描述了__biz,uin和key的三個(gè)值,它們也是此處的必需參數。
  f:json(固定值,表示返回json數據)
  偏移量:頁(yè)面偏移量
  如果要獲取官方帳戶(hù)的歷史記錄列表,則這6個(gè)參數是必需的,并且不需要帶其他參數。如圖所示,讓我們分析請求標頭中的聽(tīng)眾:
  參數很多,我不知道應該帶哪些參數,不需要帶那些參數。最后,我只需要攜帶UA。最后編寫(xiě)一個(gè)腳本來(lái)嘗試獲取它:
  import requests
url = "鏈接:http://鏈接:mp.weixin鏈接:.qq.com/mp/profile_ext"
headers= {
&#x27;User-Agent&#x27;:&#x27;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&#x27;
}
param = {
&#x27;action&#x27;: &#x27;getmsg&#x27;,
&#x27;__biz&#x27;: &#x27;MzU0NDg3NDg0Ng==&#x27;,
&#x27;f&#x27;: &#x27;json&#x27;,
&#x27;offset&#x27;: 0,
&#x27;uin&#x27;: &#x27;MTY5OTE4Mzc5Nw==&#x27;,
&#x27;key&#x27;: &#x27;0295ce962daa06881b1fbddd606f47252d0273a7280069e55e1daa347620284614629cd08ef0413941d46dc737cf866bc3ed3012ec202ffa9379c2538035a662e9ffa3f84852a0299a6590811b17de96&#x27;
}
index_josn = requests.get(url, params=param, headers=headers)
print(index_josn.json())
print(index_josn.json().get(&#x27;general_msg_list&#x27;))
  獲取json對象中的general_msg_list,并獲取結果:
  獲取文章詳細信息
  我有上面的鏈接,只是請求解析html頁(yè)面。這里沒(méi)有更多說(shuō)明(可以在完整代碼中查看)。

分享:如何爬取微信公眾號的所有文章

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

  如何抓取所有文章微信官方帳戶(hù)
  準備階段
  為了實(shí)現此采集器,我們需要使用以下工具
  此外,此采集器使用微信官方帳戶(hù)后臺編輯界面。原理是,當我們插入超鏈接時(shí),微信將調用特殊的API(請參見(jiàn)下圖)以獲取指定官方帳戶(hù)的文章列表。因此,我們還需要擁有一個(gè)官方帳戶(hù)。
  
  fig1
  正式開(kāi)始
  我們需要登錄到WeChat官方帳戶(hù),依次單擊“物料管理”,“新建圖形消息”,然后單擊上方的超鏈接。
  
  fig2
  下一步,按F12鍵打開(kāi)Chrome的開(kāi)發(fā)者工具,然后選擇“網(wǎng)絡(luò )”
  
  fig3
  這時(shí),在上一個(gè)超鏈接界面中,單擊“選擇另一個(gè)官方帳戶(hù)”,然后輸入您要抓取的官方帳戶(hù)(例如,中國移動(dòng))
  
  fig4
  這時(shí),先前的網(wǎng)絡(luò )將刷新一些鏈接,其中以“ appmsg”開(kāi)頭的內容是我們需要分析的
  
  fig5
  我們解析請求的網(wǎng)址
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  分為三個(gè)部分
  通過(guò)不斷瀏覽下一頁(yè),我們發(fā)現每次僅開(kāi)始更改,并且每次增加5(即count的值)。
  接下來(lái),我們使用Python獲取相同的資源,但是直接運行以下代碼無(wú)法獲取資源
  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ú)效。我們需要在請求中設置headers參數,并傳入Cookie和User-Agent以模擬登錄
  因為標題信息的內容每次都會(huì )改變,所以我將這些內容放在一個(gè)單獨的文件“ wechat.yaml”中,信息如下
  cookie: ua_id=wuzWM9FKE14...
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中,我們可以看到每個(gè)文章的標題(標題),摘要(摘要),鏈接(鏈接),推送時(shí)間(update_time)和封面地址(封面)。
  appmsgid是每個(gè)推文的唯一標識符,而aid是每個(gè)推文的唯一標識符。
  
  fig6
  實(shí)際上,除了cookie外,URL中的token參數還將用于限制采集器,因此上述代碼的輸出可能為{'base_resp':{'ret':200040,'err_msg ':'無(wú)效的csrf令牌'}}
  接下來(lái),我們編寫(xiě)一個(gè)循環(huán)以獲取文章的所有JSON并保存。
  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
  在上面的代碼中,我還將偽造品和令牌存儲在“ wechat.yaml”文件中。這是因為fakeid是每個(gè)正式帳戶(hù)唯一的標識符,并且令牌會(huì )經(jīng)常更改。此信息可以通過(guò)解析URL獲得,也可以從開(kāi)發(fā)人員工具中查看
  
  fig7
  爬行一段時(shí)間后,您會(huì )遇到以下問(wèn)題
  {'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
  這時(shí),當您嘗試在官方帳戶(hù)的背景中插入超鏈接時(shí),會(huì )出現以下提示
  
  fig8
  這是官方帳戶(hù)的流量限制,通常需要等待30-60分鐘才能繼續。為了完美地解決此問(wèn)題,您可能需要申請多個(gè)官方帳戶(hù),您可能需要與微信官方帳戶(hù)登錄系統進(jìn)行對抗,或者您可能需要建立代理池。
  但是我不需要工業(yè)級的采集器,我只想搜尋我自己的官方帳戶(hù)信息,因此請等待一個(gè)小時(shí),再次登錄到官方帳戶(hù),獲取Cookie和令牌并運行它。我不想為自己的利益挑戰別人的工作。
  最后,將結果保存為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。
  info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list)) 查看全部

  如何抓取所有文章微信官方帳戶(hù)
  準備階段
  為了實(shí)現此采集器,我們需要使用以下工具
  此外,此采集器使用微信官方帳戶(hù)后臺編輯界面。原理是,當我們插入超鏈接時(shí),微信將調用特殊的API(請參見(jiàn)下圖)以獲取指定官方帳戶(hù)的文章列表。因此,我們還需要擁有一個(gè)官方帳戶(hù)。
  
  fig1
  正式開(kāi)始
  我們需要登錄到WeChat官方帳戶(hù),依次單擊“物料管理”,“新建圖形消息”,然后單擊上方的超鏈接。
  
  fig2
  下一步,按F12鍵打開(kāi)Chrome的開(kāi)發(fā)者工具,然后選擇“網(wǎng)絡(luò )”
  
  fig3
  這時(shí),在上一個(gè)超鏈接界面中,單擊“選擇另一個(gè)官方帳戶(hù)”,然后輸入您要抓取的官方帳戶(hù)(例如,中國移動(dòng))
  
  fig4
  這時(shí),先前的網(wǎng)絡(luò )將刷新一些鏈接,其中以“ appmsg”開(kāi)頭的內容是我們需要分析的
  
  fig5
  我們解析請求的網(wǎng)址
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  分為三個(gè)部分
  通過(guò)不斷瀏覽下一頁(yè),我們發(fā)現每次僅開(kāi)始更改,并且每次增加5(即count的值)。
  接下來(lái),我們使用Python獲取相同的資源,但是直接運行以下代碼無(wú)法獲取資源
  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ú)效。我們需要在請求中設置headers參數,并傳入Cookie和User-Agent以模擬登錄
  因為標題信息的內容每次都會(huì )改變,所以我將這些內容放在一個(gè)單獨的文件“ wechat.yaml”中,信息如下
  cookie: ua_id=wuzWM9FKE14...
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中,我們可以看到每個(gè)文章的標題(標題),摘要(摘要),鏈接(鏈接),推送時(shí)間(update_time)和封面地址(封面)。
  appmsgid是每個(gè)推文的唯一標識符,而aid是每個(gè)推文的唯一標識符。
  
  fig6
  實(shí)際上,除了cookie外,URL中的token參數還將用于限制采集器,因此上述代碼的輸出可能為{'base_resp':{'ret':200040,'err_msg ':'無(wú)效的csrf令牌'}}
  接下來(lái),我們編寫(xiě)一個(gè)循環(huán)以獲取文章的所有JSON并保存。
  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
  在上面的代碼中,我還將偽造品和令牌存儲在“ wechat.yaml”文件中。這是因為fakeid是每個(gè)正式帳戶(hù)唯一的標識符,并且令牌會(huì )經(jīng)常更改。此信息可以通過(guò)解析URL獲得,也可以從開(kāi)發(fā)人員工具中查看
  
  fig7
  爬行一段時(shí)間后,您會(huì )遇到以下問(wèn)題
  {'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
  這時(shí),當您嘗試在官方帳戶(hù)的背景中插入超鏈接時(shí),會(huì )出現以下提示
  
  fig8
  這是官方帳戶(hù)的流量限制,通常需要等待30-60分鐘才能繼續。為了完美地解決此問(wèn)題,您可能需要申請多個(gè)官方帳戶(hù),您可能需要與微信官方帳戶(hù)登錄系統進(jìn)行對抗,或者您可能需要建立代理池。
  但是我不需要工業(yè)級的采集器,我只想搜尋我自己的官方帳戶(hù)信息,因此請等待一個(gè)小時(shí),再次登錄到官方帳戶(hù),獲取Cookie和令牌并運行它。我不想為自己的利益挑戰別人的工作。
  最后,將結果保存為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。
  info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list))

分享文章:如何爬取微信公眾號的所有文章

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

  如何抓取所有文章微信官方帳戶(hù)
  準備階段
  為了實(shí)現此采集器,我們需要使用以下工具
  此外,此采集器使用微信官方帳戶(hù)后臺編輯界面。原理是,當我們插入超鏈接時(shí),微信將調用特殊的API(請參見(jiàn)下圖)以獲取指定官方帳戶(hù)的文章列表。因此,我們還需要擁有一個(gè)官方帳戶(hù)。
  
  fig1
  正式開(kāi)始
  我們需要登錄到WeChat官方帳戶(hù),依次單擊“物料管理”,“新建圖形消息”,然后單擊上方的超鏈接。
  
  fig2
  下一步,按F12鍵打開(kāi)Chrome的開(kāi)發(fā)者工具,然后選擇“網(wǎng)絡(luò )”
  
  fig3
  這時(shí),在上一個(gè)超鏈接界面中,單擊“選擇另一個(gè)官方帳戶(hù)”,然后輸入您要抓取的官方帳戶(hù)(例如,中國移動(dòng))
  
  fig4
  這時(shí),先前的網(wǎng)絡(luò )將刷新一些鏈接,其中以“ appmsg”開(kāi)頭的內容是我們需要分析的
  
  fig5
  我們解析請求的網(wǎng)址
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  分為三個(gè)部分
  通過(guò)不斷瀏覽下一頁(yè),我們發(fā)現每次僅開(kāi)始更改,并且每次增加5(即count的值)。
  接下來(lái),我們使用Python獲取相同的資源,但是直接運行以下代碼無(wú)法獲取資源
  import requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {&#39;base_resp&#39;: {&#39;ret&#39;: 200003, &#39;err_msg&#39;: &#39;invalid session&#39;}}
  之所以能夠在瀏覽器上獲取資源,是因為我們登錄了微信官方賬號后端。而且Python沒(méi)有我們的登錄信息,因此該請求無(wú)效。我們需要在請求中設置headers參數,并傳入Cookie和User-Agent以模擬登錄
  因為標題信息的內容每次都會(huì )改變,所以我將這些內容放在一個(gè)單獨的文件“ wechat.yaml”中,信息如下
  cookie: ua_id=wuzWM9FKE14...
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[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
requests.get(url, headers=headers, verify=False).json()
  在返回的JSON中,我們可以看到每個(gè)文章的標題(標題),摘要(摘要),鏈接(鏈接),推送時(shí)間(update_time)和封面地址(封面)。
  appmsgid是每個(gè)推文的唯一標識符,而aid是每個(gè)推文的唯一標識符。
  
  fig6
  實(shí)際上,除了cookie外,URL中的token參數還將用于限制采集器,因此上述代碼的輸出可能為{'base_resp':{'ret':200040,'err_msg ':'無(wú)效的csrf令牌'}}
  接下來(lái),我們編寫(xiě)一個(gè)循環(huán)以獲取文章的所有JSON并保存。
  import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
break

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

app_msg_list.append(resp.json())
# 翻頁(yè)
i += 1
  在上面的代碼中,我還將偽造品和令牌存儲在“ wechat.yaml”文件中。這是因為fakeid是每個(gè)正式帳戶(hù)唯一的標識符,并且令牌會(huì )經(jīng)常更改。此信息可以通過(guò)解析URL獲得,也可以從開(kāi)發(fā)人員工具中查看
  
  fig7
  爬行一段時(shí)間后,您會(huì )遇到以下問(wèn)題
  {&#39;base_resp&#39;: {&#39;err_msg&#39;: &#39;freq control&#39;, &#39;ret&#39;: 200013}}
  這時(shí),當您嘗試在官方帳戶(hù)的背景中插入超鏈接時(shí),會(huì )出現以下提示
  
  fig8
  這是官方帳戶(hù)的流量限制,通常需要等待30-60分鐘才能繼續。為了完美地解決此問(wèn)題,您可能需要申請多個(gè)官方帳戶(hù),您可能需要與微信官方帳戶(hù)登錄系統進(jìn)行對抗,或者您可能需要建立代理池。
  但是我不需要工業(yè)級的采集器,我只想搜尋我自己的官方帳戶(hù)信息,因此請等待一個(gè)小時(shí),再次登錄到官方帳戶(hù),獲取Cookie和令牌并運行它。我不想為自己的利益挑戰別人的工作。
  最后,將結果保存為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。
  info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list)) 查看全部

  如何抓取所有文章微信官方帳戶(hù)
  準備階段
  為了實(shí)現此采集器,我們需要使用以下工具
  此外,此采集器使用微信官方帳戶(hù)后臺編輯界面。原理是,當我們插入超鏈接時(shí),微信將調用特殊的API(請參見(jiàn)下圖)以獲取指定官方帳戶(hù)的文章列表。因此,我們還需要擁有一個(gè)官方帳戶(hù)。
  
  fig1
  正式開(kāi)始
  我們需要登錄到WeChat官方帳戶(hù),依次單擊“物料管理”,“新建圖形消息”,然后單擊上方的超鏈接。
  
  fig2
  下一步,按F12鍵打開(kāi)Chrome的開(kāi)發(fā)者工具,然后選擇“網(wǎng)絡(luò )”
  
  fig3
  這時(shí),在上一個(gè)超鏈接界面中,單擊“選擇另一個(gè)官方帳戶(hù)”,然后輸入您要抓取的官方帳戶(hù)(例如,中國移動(dòng))
  
  fig4
  這時(shí),先前的網(wǎng)絡(luò )將刷新一些鏈接,其中以“ appmsg”開(kāi)頭的內容是我們需要分析的
  
  fig5
  我們解析請求的網(wǎng)址
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  分為三個(gè)部分
  通過(guò)不斷瀏覽下一頁(yè),我們發(fā)現每次僅開(kāi)始更改,并且每次增加5(即count的值)。
  接下來(lái),我們使用Python獲取相同的資源,但是直接運行以下代碼無(wú)法獲取資源
  import requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {&#39;base_resp&#39;: {&#39;ret&#39;: 200003, &#39;err_msg&#39;: &#39;invalid session&#39;}}
  之所以能夠在瀏覽器上獲取資源,是因為我們登錄了微信官方賬號后端。而且Python沒(méi)有我們的登錄信息,因此該請求無(wú)效。我們需要在請求中設置headers參數,并傳入Cookie和User-Agent以模擬登錄
  因為標題信息的內容每次都會(huì )改變,所以我將這些內容放在一個(gè)單獨的文件“ wechat.yaml”中,信息如下
  cookie: ua_id=wuzWM9FKE14...
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[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
requests.get(url, headers=headers, verify=False).json()
  在返回的JSON中,我們可以看到每個(gè)文章的標題(標題),摘要(摘要),鏈接(鏈接),推送時(shí)間(update_time)和封面地址(封面)。
  appmsgid是每個(gè)推文的唯一標識符,而aid是每個(gè)推文的唯一標識符。
  
  fig6
  實(shí)際上,除了cookie外,URL中的token參數還將用于限制采集器,因此上述代碼的輸出可能為{'base_resp':{'ret':200040,'err_msg ':'無(wú)效的csrf令牌'}}
  接下來(lái),我們編寫(xiě)一個(gè)循環(huán)以獲取文章的所有JSON并保存。
  import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
break

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

app_msg_list.append(resp.json())
# 翻頁(yè)
i += 1
  在上面的代碼中,我還將偽造品和令牌存儲在“ wechat.yaml”文件中。這是因為fakeid是每個(gè)正式帳戶(hù)唯一的標識符,并且令牌會(huì )經(jīng)常更改。此信息可以通過(guò)解析URL獲得,也可以從開(kāi)發(fā)人員工具中查看
  
  fig7
  爬行一段時(shí)間后,您會(huì )遇到以下問(wèn)題
  {&#39;base_resp&#39;: {&#39;err_msg&#39;: &#39;freq control&#39;, &#39;ret&#39;: 200013}}
  這時(shí),當您嘗試在官方帳戶(hù)的背景中插入超鏈接時(shí),會(huì )出現以下提示
  
  fig8
  這是官方帳戶(hù)的流量限制,通常需要等待30-60分鐘才能繼續。為了完美地解決此問(wèn)題,您可能需要申請多個(gè)官方帳戶(hù),您可能需要與微信官方帳戶(hù)登錄系統進(jìn)行對抗,或者您可能需要建立代理池。
  但是我不需要工業(yè)級的采集器,我只想搜尋我自己的官方帳戶(hù)信息,因此請等待一個(gè)小時(shí),再次登錄到官方帳戶(hù),獲取Cookie和令牌并運行它。我不想為自己的利益挑戰別人的工作。
  最后,將結果保存為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。
  info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list))

意外:采集亂七八糟記錄下

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

  采集亂七八糟的記錄
  最近正在做采集條新聞,只需對其進(jìn)行記錄
  微信公眾號采集
  使用了PHP QueryList庫,并且可以很好地安裝作曲家
  __ biz微信官方帳戶(hù)的唯一標識符,可以通過(guò)在PC上登錄微信并復制鏈接來(lái)查看
  場(chǎng)景= 124寫(xiě)死
  wxtokenkey = 777很難寫(xiě)
  wxuin = 1146460420當前微信登錄的ID
  用戶(hù)代理UA是必須的
  wap_sid2這是最重要的參數
  獲取cookie是由老板完成的。這里只是對所依賴(lài)的思想和軟件的簡(jiǎn)要介紹:按鈕向導,查找器
  服務(wù)器數據庫配置有官方帳戶(hù)數據,例如__biz參數
  在win系統上安裝按鈕向導。在PC版微信中,使用按鈕向導進(jìn)行個(gè)性化編程可自動(dòng)打開(kāi)官方帳戶(hù)頁(yè)面
  安裝fidder數據包捕獲工具,獲取微信歷史記錄頁(yè)面請求,然后將cookie同步到服務(wù)器數據庫
  可以對自定義程序編程:抓取cookie并同步到服務(wù)器
  按鈕向導可以自動(dòng)編程:獲取cookie的正式帳戶(hù)已過(guò)期,重新打開(kāi)歷史記錄頁(yè)面,以方便查找該cookie的食物
  服務(wù)器采集程序負責采集,將頁(yè)面解析到數據庫中,并發(fā)現cookie過(guò)期并更新與官方帳戶(hù)相對應的cookie的狀態(tài)
  ... item 一個(gè)公眾號好數據
QueryList::get($page, [
&#39;action&#39; => &#39;home&#39;,
&#39;__biz&#39; => $item[&#39;biz&#39;],
&#39;scene&#39; => 124,
], [
&#39;headers&#39; => [
&#39;Accept&#39; => &#39;text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3&#39;,
&#39;User-Agent&#39; => &#39;Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1&#39;,
//&#39;Cookie&#39;=>&#39;wxtokenkey=777; wxuin=1146460420; devicetype=iMacMacBookPro121OSXOSX10.12.6build(16G1114); version=12030c10; lang=zh_CN; wap_sid2=CISy1qIEElxZYXdfanZra01NRS1DTGo5RndaeWNBQjEyaDhZQ3BaRHc5LVREQ1NjMFpHT1lPWFdDajVlandhaU9RLTZmWE9KemIxU3U1Q2lXXzZOMFBfVjlueGhXZjBEQUFBfjDbz87qBTgNQJVO&#39;
//&#39;Cookie&#39;=>&#39;wxtokenkey=777; wxuin=1146460420; devicetype=iMacMacBookPro121OSXOSX10.12.6build(16G1114); version=12030c10; lang=zh_CN; wap_sid2=CISy1qIEEnBFQzkyUy1oZW5fWDNBMVFUY3NlUFBsZm51NGdUbFBvVDg1SG5iZXY0UWFjb29hT2VPWXF1U3FiN3A2M2RLWktWVXFReWg5OHhjME1uUVRRa1JvNnJoeGttRHRDc3poWU9nc19sTy1Wek1uZi1Bd0FBMLPAz+oFOA1AlU4=&#39;
&#39;Cookie&#39; => $item[&#39;cookie&#39;],
],
]);
  列表數據的解析非常簡(jiǎn)單。頁(yè)面數據是輸出到html的json數據,只需處理匹配即可獲得數據列表。 查看全部

  采集亂七八糟的記錄
  最近正在做采集條新聞,只需對其進(jìn)行記錄
  微信公眾號采集
  使用了PHP QueryList庫,并且可以很好地安裝作曲家
  __ biz微信官方帳戶(hù)的唯一標識符,可以通過(guò)在PC上登錄微信并復制鏈接來(lái)查看
  場(chǎng)景= 124寫(xiě)死
  wxtokenkey = 777很難寫(xiě)
  wxuin = 1146460420當前微信登錄的ID
  用戶(hù)代理UA是必須的
  wap_sid2這是最重要的參數
  獲取cookie是由老板完成的。這里只是對所依賴(lài)的思想和軟件的簡(jiǎn)要介紹:按鈕向導,查找器
  服務(wù)器數據庫配置有官方帳戶(hù)數據,例如__biz參數
  在win系統上安裝按鈕向導。在PC版微信中,使用按鈕向導進(jìn)行個(gè)性化編程可自動(dòng)打開(kāi)官方帳戶(hù)頁(yè)面
  安裝fidder數據包捕獲工具,獲取微信歷史記錄頁(yè)面請求,然后將cookie同步到服務(wù)器數據庫
  可以對自定義程序編程:抓取cookie并同步到服務(wù)器
  按鈕向導可以自動(dòng)編程:獲取cookie的正式帳戶(hù)已過(guò)期,重新打開(kāi)歷史記錄頁(yè)面,以方便查找該cookie的食物
  服務(wù)器采集程序負責采集,將頁(yè)面解析到數據庫中,并發(fā)現cookie過(guò)期并更新與官方帳戶(hù)相對應的cookie的狀態(tài)
  ... item 一個(gè)公眾號好數據
QueryList::get($page, [
&#39;action&#39; => &#39;home&#39;,
&#39;__biz&#39; => $item[&#39;biz&#39;],
&#39;scene&#39; => 124,
], [
&#39;headers&#39; => [
&#39;Accept&#39; => &#39;text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3&#39;,
&#39;User-Agent&#39; => &#39;Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1&#39;,
//&#39;Cookie&#39;=>&#39;wxtokenkey=777; wxuin=1146460420; devicetype=iMacMacBookPro121OSXOSX10.12.6build(16G1114); version=12030c10; lang=zh_CN; wap_sid2=CISy1qIEElxZYXdfanZra01NRS1DTGo5RndaeWNBQjEyaDhZQ3BaRHc5LVREQ1NjMFpHT1lPWFdDajVlandhaU9RLTZmWE9KemIxU3U1Q2lXXzZOMFBfVjlueGhXZjBEQUFBfjDbz87qBTgNQJVO&#39;
//&#39;Cookie&#39;=>&#39;wxtokenkey=777; wxuin=1146460420; devicetype=iMacMacBookPro121OSXOSX10.12.6build(16G1114); version=12030c10; lang=zh_CN; wap_sid2=CISy1qIEEnBFQzkyUy1oZW5fWDNBMVFUY3NlUFBsZm51NGdUbFBvVDg1SG5iZXY0UWFjb29hT2VPWXF1U3FiN3A2M2RLWktWVXFReWg5OHhjME1uUVRRa1JvNnJoeGttRHRDc3poWU9nc19sTy1Wek1uZi1Bd0FBMLPAz+oFOA1AlU4=&#39;
&#39;Cookie&#39; => $item[&#39;cookie&#39;],
],
]);
  列表數據的解析非常簡(jiǎn)單。頁(yè)面數據是輸出到html的json數據,只需處理匹配即可獲得數據列表。

總結:帶大家寫(xiě)一波微信公眾號的爬??!誰(shuí)說(shuō)微信爬不了的

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

  帶大家去寫(xiě)一波微信公眾號爬網(wǎng)!誰(shuí)說(shuō)微信無(wú)法攀登
  x5
  其他參數的含義可以根據經(jīng)驗和簡(jiǎn)單的測試來(lái)判斷:
  1.偏移
  控制翻頁(yè)的偏移參數
  2.個(gè)計數
  每頁(yè)文章的數量
  3.__ biz
  官方帳戶(hù)標識,不同的__biz對應于不同的官方帳戶(hù)
  4.pass_ticket
  它應該是微信登錄后返回的參數,
  去年我嘗試登錄微信網(wǎng)絡(luò )版本時(shí),在返回的參數中看到了它,
  但是現在微信網(wǎng)絡(luò )版本已被正式禁止T_T。
  5.appmsg_token
  它還應該是登錄微信后的標識參數,以及您閱讀的微信官方帳戶(hù)
  相關(guān),查看不同的微信公眾號時(shí)的值也不同。
  前三個(gè)變量參數很容易求解,但后兩個(gè)參數似乎更難。但是,在測試之后,我們可以發(fā)現pass_ticket實(shí)際上是一個(gè)可選參數,因此我們可以忽略它。而且appmsg_token的有效期至少為10個(gè)小時(shí),這段時(shí)間足以讓我們抓取目標官方帳戶(hù)的所有文章,因此只需直接將其復制,就無(wú)需浪費時(shí)間分析這些東西(您也應該知道您是否認為騰訊對白人賣(mài)淫(T_T)絕對不那么容易。編寫(xiě)一段代碼對其進(jìn)行簡(jiǎn)短測試:
  import requests
session = requests.Session()
session.headers.update(headers)
session.cookies.update(cookies)
profile_url = '前面抓包得到的請求地址'
biz = 'MzAwNTA5NTYxOA=='
pass_ticket = ''
appmsg_token = '1055_YAmuAw2QG7dM3aTwSVZVqgtRdct6ilAMTwlz7g'
params = {
'action': 'getmsg',
'__biz': biz,
'f': 'json',
'offset': '0',
'count': '10',
'is_ok': '1',
'scene': '123',
'uin': '777',
'key': '777',
'pass_ticket': pass_ticket,
'wxtoken': '',
'appmsg_token': appmsg_token,
'x5': '0'
}
res = session.get(profile_url, params=params, verify=False)
print(res.text)
  運行后,您會(huì )發(fā)現返回的數據如下:
  
  似乎沒(méi)有問(wèn)題。重新調整打包代碼以爬網(wǎng)正式帳戶(hù)的所有文章鏈接。具體來(lái)說(shuō),核心代碼實(shí)現如下:
  '''獲得所有文章的鏈接'''
def __getArticleLinks(self):
print('[INFO]: 正在獲取目標公眾號的所有文章鏈接...')
fp = open('links_tmp.json', 'w', encoding='utf-8')
article_infos = {}
params = {
'action': 'getmsg',
'__biz': self.cfg.biz,
'f': 'json',
'offset': '0',
'count': '10',
'is_ok': '1',
'scene': '123',
'uin': '777',
'key': '777',
'pass_ticket': self.cfg.pass_ticket,
'wxtoken': '',
'appmsg_token': self.cfg.appmsg_token,
'x5': '0'
}
while True:
res = self.session.get(self.profile_url, params=params, verify=False)
res_json = res.json()
can_msg_continue = res_json.get('can_msg_continue', '')
next_offset = res_json.get('next_offset', 10)
general_msg_list = json.loads(res_json.get('general_msg_list', '{}'))
params.update({'offset': next_offset})
for item in general_msg_list['list']:
app_msg_ext_info = item.get('app_msg_ext_info', {})
if not app_msg_ext_info: continue
title = app_msg_ext_info.get('title', '')
content_url = app_msg_ext_info.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if app_msg_ext_info.get('is_multi', '') == 1:
for article in app_msg_ext_info.get('multi_app_msg_item_list', []):
title = article.get('title', '')
content_url = article.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if can_msg_continue != 1: break
else: time.sleep(1+random.random())
json.dump(article_infos, fp)
fp.close()
print('[INFO]: 已成功獲取目標公眾號的所有文章鏈接, 數量為%s...' % len(list(article_infos.keys())))
  運行后,我們可以獲得目標官方帳戶(hù)的所有文章鏈接:
  
  
  現在,我們只需要基于這些文章鏈接來(lái)抓取文章的內容。在這里,我們使用python的第三方軟件包pdfkit將每篇文章文章保存為pdf文件。具體來(lái)說(shuō),核心代碼實(shí)現如下:
  '''下載所有文章'''
def __downloadArticles(self):
print('[INFO]: 開(kāi)始爬取目標公眾號的所有文章內容...')
if not os.path.exists(self.savedir):
os.mkdir(self.savedir)
fp = open('links_tmp.json', 'r', encoding='utf-8')
article_infos = json.load(fp)
for key, value in article_infos.items():
print('[INFO]: 正在抓取文章 ——> %s' % key)
pdfkit.from_url(value, os.path.join(self.savedir, key+'.pdf'), configuration=pdfkit.configuration(wkhtmltopdf=self.cfg.wkhtmltopdf_path))
print('[INFO]: 已成功爬取目標公眾號的所有文章內容...')
  請注意,在使用pdfkit之前,您需要安裝wkhtmltox。如下圖所示:
  
  運行的效果可能是這樣的:
  
  
  所有源代碼
  根據您自己的數據包捕獲結果修改cfg.py文件:
  ## cfg.py
# 目標公眾號標識
biz = 'MzAwNTA5NTYxOA=='
# 微信登錄后的一些標識參數
pass_ticket = ''
appmsg_token = '1055_YAmuAw2QG7dM3aTwSVZVqgtRdct6ilAMTwlz7g~~'
# 安裝的wkhtmltopdf.exe文件路徑
wkhtmltopdf_path = r'D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'
12345678
  ## articlesSpider.py
import os
import time
import json
import pdfkit
import random
import requests
import warnings
warnings.filterwarnings('ignore')
'''微信公眾號文章爬取類(lèi)'''
class articlesSpider(object):
def __init__(self, cfg, **kwargs):
self.cfg = cfg
self.session = requests.Session()
self.__initialize()
'''外部調用'''
def run(self):
self.__getArticleLinks()
self.__downloadArticles()
'''獲得所有文章的鏈接'''
def __getArticleLinks(self):
print('[INFO]: 正在獲取目標公眾號的所有文章鏈接...')
fp = open('links_tmp.json', 'w', encoding='utf-8')
article_infos = {}
params = {
'action': 'getmsg',
'__biz': self.cfg.biz,
'f': 'json',
'offset': '0',
'count': '10',
'is_ok': '1',
'scene': '123',
'uin': '777',
'key': '777',
'pass_ticket': self.cfg.pass_ticket,
'wxtoken': '',
'appmsg_token': self.cfg.appmsg_token,
'x5': '0'
}
while True:
res = self.session.get(self.profile_url, params=params, verify=False)
res_json = res.json()
can_msg_continue = res_json.get('can_msg_continue', '')
next_offset = res_json.get('next_offset', 10)
general_msg_list = json.loads(res_json.get('general_msg_list', '{}'))
params.update({'offset': next_offset})
for item in general_msg_list['list']:
app_msg_ext_info = item.get('app_msg_ext_info', {})
if not app_msg_ext_info: continue
title = app_msg_ext_info.get('title', '')
content_url = app_msg_ext_info.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if app_msg_ext_info.get('is_multi', '') == 1:
for article in app_msg_ext_info.get('multi_app_msg_item_list', []):
title = article.get('title', '')
content_url = article.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if can_msg_continue != 1: break
else: time.sleep(1+random.random())
json.dump(article_infos, fp)
fp.close()
print('[INFO]: 已成功獲取目標公眾號的所有文章鏈接, 數量為%s...' % len(list(article_infos.keys())))
'''下載所有文章'''
def __downloadArticles(self):
print('[INFO]: 開(kāi)始爬取目標公眾號的所有文章內容...')
if not os.path.exists(self.savedir):
os.mkdir(self.savedir)
fp = open('links_tmp.json', 'r', encoding='utf-8')
article_infos = json.load(fp)
for key, value in article_infos.items():
print('[INFO]: 正在抓取文章 ——> %s' % key)
key = key.replace('\\', '').replace('/', '').replace(':', '').replace(':', '') \
.replace('*', '').replace('?', '').replace('?', '').replace('“', '') \
.replace('"', '').replace('', '').replace('|', '_')
pdfkit.from_url(value, os.path.join(self.savedir, key+'.pdf'), configuration=pdfkit.configuration(wkhtmltopdf=self.cfg.wkhtmltopdf_path))
print('[INFO]: 已成功爬取目標公眾號的所有文章內容...')
'''類(lèi)初始化'''
def __initialize(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1295.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat'
}
self.cookies = {
'wxuin': '913366226',
'devicetype': 'iPhoneiOS13.3.1',
'version': '17000c27',
'lang': 'zh_CN',
'pass_ticket': self.cfg.pass_ticket,
'wap_sid2': 'CNK5w7MDElxvQU1fdWNuU05qNV9lb2t3cEkzNk12ZHBsNmdXX3FETlplNUVTNzVfRmwyUUtKZzN4QkxJRUZIYkMtMkZ1SDU5S0FWQmtSNk9mTTQ1Q1NDOXpUYnJQaDhFQUFBfjDX5LD0BTgNQJVO'
}
self.profile_url = 'https://mp.weixin.qq.com/mp/profile_ext'
self.savedir = 'articles'
self.session.headers.update(self.headers)
self.session.cookies.update(self.cookies)
'''run'''
if __name__ == '__main__':
import cfg
spider = articlesSpider(cfg)
spider.run()
  要簡(jiǎn)單。如果不能的話(huà),請將我添加到企鵝群組中,以接收視頻教程和源代碼。私人消息編輯器01 查看全部

  帶大家去寫(xiě)一波微信公眾號爬網(wǎng)!誰(shuí)說(shuō)微信無(wú)法攀登
  x5
  其他參數的含義可以根據經(jīng)驗和簡(jiǎn)單的測試來(lái)判斷:
  1.偏移
  控制翻頁(yè)的偏移參數
  2.個(gè)計數
  每頁(yè)文章的數量
  3.__ biz
  官方帳戶(hù)標識,不同的__biz對應于不同的官方帳戶(hù)
  4.pass_ticket
  它應該是微信登錄后返回的參數,
  去年我嘗試登錄微信網(wǎng)絡(luò )版本時(shí),在返回的參數中看到了它,
  但是現在微信網(wǎng)絡(luò )版本已被正式禁止T_T。
  5.appmsg_token
  它還應該是登錄微信后的標識參數,以及您閱讀的微信官方帳戶(hù)
  相關(guān),查看不同的微信公眾號時(shí)的值也不同。
  前三個(gè)變量參數很容易求解,但后兩個(gè)參數似乎更難。但是,在測試之后,我們可以發(fā)現pass_ticket實(shí)際上是一個(gè)可選參數,因此我們可以忽略它。而且appmsg_token的有效期至少為10個(gè)小時(shí),這段時(shí)間足以讓我們抓取目標官方帳戶(hù)的所有文章,因此只需直接將其復制,就無(wú)需浪費時(shí)間分析這些東西(您也應該知道您是否認為騰訊對白人賣(mài)淫(T_T)絕對不那么容易。編寫(xiě)一段代碼對其進(jìn)行簡(jiǎn)短測試:
  import requests
session = requests.Session()
session.headers.update(headers)
session.cookies.update(cookies)
profile_url = '前面抓包得到的請求地址'
biz = 'MzAwNTA5NTYxOA=='
pass_ticket = ''
appmsg_token = '1055_YAmuAw2QG7dM3aTwSVZVqgtRdct6ilAMTwlz7g'
params = {
'action': 'getmsg',
'__biz': biz,
'f': 'json',
'offset': '0',
'count': '10',
'is_ok': '1',
'scene': '123',
'uin': '777',
'key': '777',
'pass_ticket': pass_ticket,
'wxtoken': '',
'appmsg_token': appmsg_token,
'x5': '0'
}
res = session.get(profile_url, params=params, verify=False)
print(res.text)
  運行后,您會(huì )發(fā)現返回的數據如下:
  
  似乎沒(méi)有問(wèn)題。重新調整打包代碼以爬網(wǎng)正式帳戶(hù)的所有文章鏈接。具體來(lái)說(shuō),核心代碼實(shí)現如下:
  '''獲得所有文章的鏈接'''
def __getArticleLinks(self):
print('[INFO]: 正在獲取目標公眾號的所有文章鏈接...')
fp = open('links_tmp.json', 'w', encoding='utf-8')
article_infos = {}
params = {
'action': 'getmsg',
'__biz': self.cfg.biz,
'f': 'json',
'offset': '0',
'count': '10',
'is_ok': '1',
'scene': '123',
'uin': '777',
'key': '777',
'pass_ticket': self.cfg.pass_ticket,
'wxtoken': '',
'appmsg_token': self.cfg.appmsg_token,
'x5': '0'
}
while True:
res = self.session.get(self.profile_url, params=params, verify=False)
res_json = res.json()
can_msg_continue = res_json.get('can_msg_continue', '')
next_offset = res_json.get('next_offset', 10)
general_msg_list = json.loads(res_json.get('general_msg_list', '{}'))
params.update({'offset': next_offset})
for item in general_msg_list['list']:
app_msg_ext_info = item.get('app_msg_ext_info', {})
if not app_msg_ext_info: continue
title = app_msg_ext_info.get('title', '')
content_url = app_msg_ext_info.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if app_msg_ext_info.get('is_multi', '') == 1:
for article in app_msg_ext_info.get('multi_app_msg_item_list', []):
title = article.get('title', '')
content_url = article.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if can_msg_continue != 1: break
else: time.sleep(1+random.random())
json.dump(article_infos, fp)
fp.close()
print('[INFO]: 已成功獲取目標公眾號的所有文章鏈接, 數量為%s...' % len(list(article_infos.keys())))
  運行后,我們可以獲得目標官方帳戶(hù)的所有文章鏈接:
  
  
  現在,我們只需要基于這些文章鏈接來(lái)抓取文章的內容。在這里,我們使用python的第三方軟件包pdfkit將每篇文章文章保存為pdf文件。具體來(lái)說(shuō),核心代碼實(shí)現如下:
  '''下載所有文章'''
def __downloadArticles(self):
print('[INFO]: 開(kāi)始爬取目標公眾號的所有文章內容...')
if not os.path.exists(self.savedir):
os.mkdir(self.savedir)
fp = open('links_tmp.json', 'r', encoding='utf-8')
article_infos = json.load(fp)
for key, value in article_infos.items():
print('[INFO]: 正在抓取文章 ——> %s' % key)
pdfkit.from_url(value, os.path.join(self.savedir, key+'.pdf'), configuration=pdfkit.configuration(wkhtmltopdf=self.cfg.wkhtmltopdf_path))
print('[INFO]: 已成功爬取目標公眾號的所有文章內容...')
  請注意,在使用pdfkit之前,您需要安裝wkhtmltox。如下圖所示:
  
  運行的效果可能是這樣的:
  
  
  所有源代碼
  根據您自己的數據包捕獲結果修改cfg.py文件:
  ## cfg.py
# 目標公眾號標識
biz = 'MzAwNTA5NTYxOA=='
# 微信登錄后的一些標識參數
pass_ticket = ''
appmsg_token = '1055_YAmuAw2QG7dM3aTwSVZVqgtRdct6ilAMTwlz7g~~'
# 安裝的wkhtmltopdf.exe文件路徑
wkhtmltopdf_path = r'D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'
12345678
  ## articlesSpider.py
import os
import time
import json
import pdfkit
import random
import requests
import warnings
warnings.filterwarnings('ignore')
'''微信公眾號文章爬取類(lèi)'''
class articlesSpider(object):
def __init__(self, cfg, **kwargs):
self.cfg = cfg
self.session = requests.Session()
self.__initialize()
'''外部調用'''
def run(self):
self.__getArticleLinks()
self.__downloadArticles()
'''獲得所有文章的鏈接'''
def __getArticleLinks(self):
print('[INFO]: 正在獲取目標公眾號的所有文章鏈接...')
fp = open('links_tmp.json', 'w', encoding='utf-8')
article_infos = {}
params = {
'action': 'getmsg',
'__biz': self.cfg.biz,
'f': 'json',
'offset': '0',
'count': '10',
'is_ok': '1',
'scene': '123',
'uin': '777',
'key': '777',
'pass_ticket': self.cfg.pass_ticket,
'wxtoken': '',
'appmsg_token': self.cfg.appmsg_token,
'x5': '0'
}
while True:
res = self.session.get(self.profile_url, params=params, verify=False)
res_json = res.json()
can_msg_continue = res_json.get('can_msg_continue', '')
next_offset = res_json.get('next_offset', 10)
general_msg_list = json.loads(res_json.get('general_msg_list', '{}'))
params.update({'offset': next_offset})
for item in general_msg_list['list']:
app_msg_ext_info = item.get('app_msg_ext_info', {})
if not app_msg_ext_info: continue
title = app_msg_ext_info.get('title', '')
content_url = app_msg_ext_info.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if app_msg_ext_info.get('is_multi', '') == 1:
for article in app_msg_ext_info.get('multi_app_msg_item_list', []):
title = article.get('title', '')
content_url = article.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if can_msg_continue != 1: break
else: time.sleep(1+random.random())
json.dump(article_infos, fp)
fp.close()
print('[INFO]: 已成功獲取目標公眾號的所有文章鏈接, 數量為%s...' % len(list(article_infos.keys())))
'''下載所有文章'''
def __downloadArticles(self):
print('[INFO]: 開(kāi)始爬取目標公眾號的所有文章內容...')
if not os.path.exists(self.savedir):
os.mkdir(self.savedir)
fp = open('links_tmp.json', 'r', encoding='utf-8')
article_infos = json.load(fp)
for key, value in article_infos.items():
print('[INFO]: 正在抓取文章 ——> %s' % key)
key = key.replace('\\', '').replace('/', '').replace(':', '').replace(':', '') \
.replace('*', '').replace('?', '').replace('?', '').replace('“', '') \
.replace('"', '').replace('', '').replace('|', '_')
pdfkit.from_url(value, os.path.join(self.savedir, key+'.pdf'), configuration=pdfkit.configuration(wkhtmltopdf=self.cfg.wkhtmltopdf_path))
print('[INFO]: 已成功爬取目標公眾號的所有文章內容...')
'''類(lèi)初始化'''
def __initialize(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1295.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat'
}
self.cookies = {
'wxuin': '913366226',
'devicetype': 'iPhoneiOS13.3.1',
'version': '17000c27',
'lang': 'zh_CN',
'pass_ticket': self.cfg.pass_ticket,
'wap_sid2': 'CNK5w7MDElxvQU1fdWNuU05qNV9lb2t3cEkzNk12ZHBsNmdXX3FETlplNUVTNzVfRmwyUUtKZzN4QkxJRUZIYkMtMkZ1SDU5S0FWQmtSNk9mTTQ1Q1NDOXpUYnJQaDhFQUFBfjDX5LD0BTgNQJVO'
}
self.profile_url = 'https://mp.weixin.qq.com/mp/profile_ext'
self.savedir = 'articles'
self.session.headers.update(self.headers)
self.session.cookies.update(self.cookies)
'''run'''
if __name__ == '__main__':
import cfg
spider = articlesSpider(cfg)
spider.run()
  要簡(jiǎn)單。如果不能的話(huà),請將我添加到企鵝群組中,以接收視頻教程和源代碼。私人消息編輯器01

技巧干貨:超實(shí)用技巧:如何采集微信公眾號文章

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

  超實(shí)用技巧:如何采集微信公眾號文章
  當我們看到一個(gè)很好的官方帳戶(hù)文章時(shí),如果要將其重新打印到我們的官方帳戶(hù)中,我們將直接復制并粘貼全文。但是,盡管此方法很簡(jiǎn)單,但不是很實(shí)用。因為粘貼之后,我們會(huì )發(fā)現格式或樣式通常是錯誤的,并且更難修改。
  實(shí)際上,該方法已經(jīng)過(guò)時(shí)了?,F在,新媒體編輯經(jīng)常使用一些微信編輯器來(lái)幫助解決此問(wèn)題。今天,我將以當前主流的微信編輯器為例,向您展示如何從其他微信公共帳戶(hù)采集 文章到您的微信公共平臺。
  步驟1:首先在百度上搜索Little Ant Editor,點(diǎn)擊以輸入網(wǎng)址
  
  第2步:點(diǎn)擊采集,然后將采集的微信文章鏈接地址粘貼到“ 文章 URL”框中
  
  第3步:?jiǎn)螕簟?采集”,此時(shí)文章的所有內容已在微信編輯器中為采集,您可以編輯和修改文章。編輯后,可以單擊其旁邊的副本(相當于全文副本),然后將其粘貼到微信材質(zhì)編輯的文本中。
  
  ps:這里有兩種主要的方法來(lái)獲取微信文章鏈接:
  方法1:直接在手機上找到文章,然后單擊右上角的復制
  
  方法2:使用Little Ant Editor的微信營(yíng)銷(xiāo)工具在熱搜索圖片和文本中搜索材料,然后將所需的材料文章直接復制到上面的URL。
  
  ,
  
  怎么樣?您是否獲得了另一項技能(括號中的笑聲)。這只是Little Ant的微信編輯器中的一個(gè)小功能,它還收錄一些常用功能,例如微信圖形和視頻提取,微信超鏈接,微信短URL,微信一鍵跟隨頁(yè)面等。新媒體的數量編輯喜歡使用它的主要原因。 查看全部

  超實(shí)用技巧:如何采集微信公眾號文章
  當我們看到一個(gè)很好的官方帳戶(hù)文章時(shí),如果要將其重新打印到我們的官方帳戶(hù)中,我們將直接復制并粘貼全文。但是,盡管此方法很簡(jiǎn)單,但不是很實(shí)用。因為粘貼之后,我們會(huì )發(fā)現格式或樣式通常是錯誤的,并且更難修改。
  實(shí)際上,該方法已經(jīng)過(guò)時(shí)了?,F在,新媒體編輯經(jīng)常使用一些微信編輯器來(lái)幫助解決此問(wèn)題。今天,我將以當前主流的微信編輯器為例,向您展示如何從其他微信公共帳戶(hù)采集 文章到您的微信公共平臺。
  步驟1:首先在百度上搜索Little Ant Editor,點(diǎn)擊以輸入網(wǎng)址
  
  第2步:點(diǎn)擊采集,然后將采集的微信文章鏈接地址粘貼到“ 文章 URL”框中
  
  第3步:?jiǎn)螕簟?采集”,此時(shí)文章的所有內容已在微信編輯器中為采集,您可以編輯和修改文章。編輯后,可以單擊其旁邊的副本(相當于全文副本),然后將其粘貼到微信材質(zhì)編輯的文本中。
  
  ps:這里有兩種主要的方法來(lái)獲取微信文章鏈接:
  方法1:直接在手機上找到文章,然后單擊右上角的復制
  
  方法2:使用Little Ant Editor的微信營(yíng)銷(xiāo)工具在熱搜索圖片和文本中搜索材料,然后將所需的材料文章直接復制到上面的URL。
  
  ,
  
  怎么樣?您是否獲得了另一項技能(括號中的笑聲)。這只是Little Ant的微信編輯器中的一個(gè)小功能,它還收錄一些常用功能,例如微信圖形和視頻提取,微信超鏈接,微信短URL,微信一鍵跟隨頁(yè)面等。新媒體的數量編輯喜歡使用它的主要原因。

querylist采集微信公眾號文章,content_type是html文本,文章的content_type

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

  querylist采集微信公眾號文章,content_type是html文本,文章的content_type
  querylist采集微信公眾號文章,content_type是html文本,每篇文章的content_type只能是html文本,帶著(zhù)\r\n的字符需要進(jìn)行轉義。建議加上\xx\xx\xx\xx,規范一些看上去更美觀(guān),
  用javascript,把一段簡(jiǎn)單的html文本html轉json格式變成一個(gè)imagecontent,在全局聲明為一個(gè)元素,這個(gè)元素可以包含一些html格式的東西。使用php,直接從另一個(gè)html文件中讀取,這里能接受一段json數據就行了。轉義的話(huà),\xxxx\xxxx\xxxx\xxxx,\xxxx的前面那個(gè)\x,沒(méi)必要轉義。
  php直接文件名+頭文件名+正則表達式,挺好用的。如果想保留本來(lái)的html格式,那就需要\xxxxx\xxxx\xxxx\xxxx;\xxxx或\xxxx;\xxxx;。
  首先,要注意html規范,你這兩個(gè)wordpress-script腳本,都是一樣的,選擇wordpress目錄下admin.wordpress.wordpress.wordpress.wordpress/,全局聲明類(lèi)型wordpress.wordpress.wordpress.wordpress/。然后,這兩個(gè)腳本就可以用了,理論上,你也可以將選擇wordpress目錄下admin.wordpress.wordpress.wordpress/腳本另外用。
  javascriptbash中輸入命令sudowordpress/extensions.php
  content-type不是文本或者post, 查看全部

  querylist采集微信公眾號文章,content_type是html文本,文章的content_type
  querylist采集微信公眾號文章,content_type是html文本,每篇文章的content_type只能是html文本,帶著(zhù)\r\n的字符需要進(jìn)行轉義。建議加上\xx\xx\xx\xx,規范一些看上去更美觀(guān),
  用javascript,把一段簡(jiǎn)單的html文本html轉json格式變成一個(gè)imagecontent,在全局聲明為一個(gè)元素,這個(gè)元素可以包含一些html格式的東西。使用php,直接從另一個(gè)html文件中讀取,這里能接受一段json數據就行了。轉義的話(huà),\xxxx\xxxx\xxxx\xxxx,\xxxx的前面那個(gè)\x,沒(méi)必要轉義。
  php直接文件名+頭文件名+正則表達式,挺好用的。如果想保留本來(lái)的html格式,那就需要\xxxxx\xxxx\xxxx\xxxx;\xxxx或\xxxx;\xxxx;。
  首先,要注意html規范,你這兩個(gè)wordpress-script腳本,都是一樣的,選擇wordpress目錄下admin.wordpress.wordpress.wordpress.wordpress/,全局聲明類(lèi)型wordpress.wordpress.wordpress.wordpress/。然后,這兩個(gè)腳本就可以用了,理論上,你也可以將選擇wordpress目錄下admin.wordpress.wordpress.wordpress/腳本另外用。
  javascriptbash中輸入命令sudowordpress/extensions.php
  content-type不是文本或者post,

搜狗搜索爬取微信公眾號文章信息,逆向加密解密

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

  
搜狗搜索爬取微信公眾號文章信息,逆向加密解密
  微信公眾號文章 采集簡(jiǎn)訊-搜狗APP將近一天文章
  前言
  注: 本文主講一個(gè)分析思路,僅用于技術(shù)交流分享,有興趣可以一起交流 q:1095087360。
  前段時(shí)間,由于需要,在微信官方帳戶(hù)上指定了采集微信文章 關(guān)鍵詞,我在互聯(lián)網(wǎng)上找到了一些信息,但也賺了很多錢(qián)?;旧现挥袃煞N來(lái)源,一種是微信APP,一種是搜狗。但是,微信客戶(hù)端關(guān)鍵詞的搜索功能相當于沒(méi)有(數量相對較?。?,然后以搜狗開(kāi)始,搜狗的啟動(dòng)相對簡(jiǎn)單,可以看一下文章,使用搜狗搜索來(lái)抓取微信官方帳戶(hù)文章信息。
  無(wú)需自動(dòng)抓取即可改進(jìn)前代解決方案,這將更加高效且易于實(shí)現。
  我嘗試實(shí)現,采集得到了數據,但是實(shí)時(shí)率相對較低。 采集的許多文章來(lái)自幾天前或幾個(gè)月前,我檢查了Sogou APP上的微信文章可以搜索到最后一天的數據,因此幾乎是今天的文章
  分析
  
  直接上傳數據包捕獲工具:
  獲取接口之一作為數據接口:
  
  可以發(fā)現請求主體和數據獲取接口的相應主體是加密的。
  反編譯的jar以找到加密方法:
  通過(guò)界面搜索,很容易發(fā)現此請求的加密和解密以相同的方法出現。先加密然后請求數據,然后在獲取數據后解密數據。
  public static synchronized String mxxxx(String str, String str2, String str3, int i) 搜索到的方法
ScEncryptWall.encrypt(str, str2, str3) 加密請求
請求數據:body()
ScEncryptWall.decrypt(body()) 解密
  我不會(huì )(不)發(fā)布(敢于)屏幕截圖(發(fā)布)。
  使用frida鉤子驗證找到的方法:
  hook crypto()方法
   你會(huì )發(fā)現 str= "http://app.weixin.s*g***.com/api/searchapp"
str2="type=2&ie=utf8&page=1&query="+查找的關(guān)鍵詞+"&select_count=20&usip=&tsn=1"
str3=""
  獲取加密參數k,v,u,r,g,p參數
  hook delete()方法
  獲取
  
  有我們想要的數據標題,鏈接。
  接下來(lái)是反向加密和解密方法。
  通過(guò)搜索,發(fā)現它是本機方法。 SCoreTools的so和.so文件在lib \ armeabi目錄中被調用,下一步是分析so并轉到工件ida
  
  找到加解密的入口,接下來(lái)是一個(gè)漫長(cháng)的探索過(guò)程,基本上是分析C語(yǔ)言的計算過(guò)程,可以百度相關(guān)文件,這是主要思想。
  
  最后,當我們得到一段這樣的代碼時(shí),基本上該路由將起作用,并且解密也是如此。
  實(shí)現
  算法出爐時(shí)就實(shí)現了:
  
  獲取數據并分析了鏈接之后,我發(fā)現它仍然是重定向地址。經(jīng)過(guò)簡(jiǎn)單分析,我可以在微信末尾獲得鏈接。然后,我還根據搜狗微信的官方帳戶(hù)(一天采集超過(guò)一百萬(wàn))進(jìn)行了爬網(wǎng),“文本想法”當天采集已獲得了數百萬(wàn)個(gè)數據。
  摘要
  文章主要討論了一個(gè)分析概念,這可能有點(diǎn)粗糙,但是您仍然可以自己從整個(gè)過(guò)程中學(xué)到很多東西。 查看全部

  
搜狗搜索爬取微信公眾號文章信息,逆向加密解密
  微信公眾號文章 采集簡(jiǎn)訊-搜狗APP將近一天文章
  前言
  注: 本文主講一個(gè)分析思路,僅用于技術(shù)交流分享,有興趣可以一起交流 q:1095087360。
  前段時(shí)間,由于需要,在微信官方帳戶(hù)上指定了采集微信文章 關(guān)鍵詞,我在互聯(lián)網(wǎng)上找到了一些信息,但也賺了很多錢(qián)?;旧现挥袃煞N來(lái)源,一種是微信APP,一種是搜狗。但是,微信客戶(hù)端關(guān)鍵詞的搜索功能相當于沒(méi)有(數量相對較?。?,然后以搜狗開(kāi)始,搜狗的啟動(dòng)相對簡(jiǎn)單,可以看一下文章,使用搜狗搜索來(lái)抓取微信官方帳戶(hù)文章信息。
  無(wú)需自動(dòng)抓取即可改進(jìn)前代解決方案,這將更加高效且易于實(shí)現。
  我嘗試實(shí)現,采集得到了數據,但是實(shí)時(shí)率相對較低。 采集的許多文章來(lái)自幾天前或幾個(gè)月前,我檢查了Sogou APP上的微信文章可以搜索到最后一天的數據,因此幾乎是今天的文章
  分析
  
  直接上傳數據包捕獲工具:
  獲取接口之一作為數據接口:
  
  可以發(fā)現請求主體和數據獲取接口的相應主體是加密的。
  反編譯的jar以找到加密方法:
  通過(guò)界面搜索,很容易發(fā)現此請求的加密和解密以相同的方法出現。先加密然后請求數據,然后在獲取數據后解密數據。
  public static synchronized String mxxxx(String str, String str2, String str3, int i) 搜索到的方法
ScEncryptWall.encrypt(str, str2, str3) 加密請求
請求數據:body()
ScEncryptWall.decrypt(body()) 解密
  我不會(huì )(不)發(fā)布(敢于)屏幕截圖(發(fā)布)。
  使用frida鉤子驗證找到的方法:
  hook crypto()方法
   你會(huì )發(fā)現 str= "http://app.weixin.s*g***.com/api/searchapp"
str2="type=2&ie=utf8&page=1&query="+查找的關(guān)鍵詞+"&select_count=20&usip=&tsn=1"
str3=""
  獲取加密參數k,v,u,r,g,p參數
  hook delete()方法
  獲取
  
  有我們想要的數據標題,鏈接。
  接下來(lái)是反向加密和解密方法。
  通過(guò)搜索,發(fā)現它是本機方法。 SCoreTools的so和.so文件在lib \ armeabi目錄中被調用,下一步是分析so并轉到工件ida
  
  找到加解密的入口,接下來(lái)是一個(gè)漫長(cháng)的探索過(guò)程,基本上是分析C語(yǔ)言的計算過(guò)程,可以百度相關(guān)文件,這是主要思想。
  
  最后,當我們得到一段這樣的代碼時(shí),基本上該路由將起作用,并且解密也是如此。
  實(shí)現
  算法出爐時(shí)就實(shí)現了:
  
  獲取數據并分析了鏈接之后,我發(fā)現它仍然是重定向地址。經(jīng)過(guò)簡(jiǎn)單分析,我可以在微信末尾獲得鏈接。然后,我還根據搜狗微信的官方帳戶(hù)(一天采集超過(guò)一百萬(wàn))進(jìn)行了爬網(wǎng),“文本想法”當天采集已獲得了數百萬(wàn)個(gè)數據。
  摘要
  文章主要討論了一個(gè)分析概念,這可能有點(diǎn)粗糙,但是您仍然可以自己從整個(gè)過(guò)程中學(xué)到很多東西。

Python爬取微信公眾號文章(一)(圖)

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

  Python爬取微信公眾號文章(一)(圖)
  Python抓取微信公眾號文章
  我最近正在從事自己的項目。它涉及文章,需要通過(guò)python抓取微信官方帳戶(hù)。由于微信的獨特方法,因此無(wú)法直接對其進(jìn)行爬網(wǎng)。我研究了一些文章并且可能有想法,并且在Internet上找不到解決方案沒(méi)有問(wèn)題,但是由于某些第三方庫的更改,內部的代碼基本上無(wú)法使用。本文文章是為需要抓取官方帳戶(hù)文章,文章的朋友而寫(xiě)的。最后,還將提供python源代碼下載。
  如何抓取官方帳戶(hù)
  有兩種主要的方法來(lái)爬取官方帳戶(hù)。一種是通過(guò)搜狗搜索微信公眾號頁(yè)面,找到文章地址,然后抓取具體的文章內容;第二種是注冊官方帳戶(hù),然后通過(guò)官方帳戶(hù)的搜索界面找到文章的地址,然后根據該地址抓取文章的內容。
  這兩種解決方案各有優(yōu)缺點(diǎn)。使用搜狗搜索的核心思想是通過(guò)請求模擬搜狗搜索官方賬號,然后解析搜索結果頁(yè)面,然后根據官方賬號首頁(yè)地址進(jìn)行抓取,以抓取文章詳細信息,但是您需要請注意,由于搜狗與騰訊之間的協(xié)議,只能顯示最新的10個(gè)文章,而無(wú)法獲取所有的文章。如果您想結識文章的所有朋友,則可能必須使用第二種方法。第二種方法的缺點(diǎn)是您必須注冊一個(gè)官方帳戶(hù)才能通過(guò)騰訊身份驗證。這個(gè)過(guò)程比較麻煩。您可以通過(guò)調用官方帳戶(hù)來(lái)查詢(xún)界面,但是您需要使用硒來(lái)模擬滑動(dòng)頁(yè)面的操作。整個(gè)過(guò)程還是很麻煩的。因為我的項目不需要歷史記錄文章,所以我使用搜狗搜索來(lái)執行爬取官方帳戶(hù)的功能。
  檢索最近10個(gè)正式帳戶(hù)文章
  python需要依賴(lài)的第三方庫如下:
  urllib,pyquery,請求,硒
  具體邏輯寫(xiě)在注釋中,沒(méi)有什么特別復雜的。
  爬蟲(chóng)核心課程
  #!/usr/bin/python
# coding: utf-8
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]
  主要輸入功能:
  # 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
  直接運行main方法,然后在控制臺中輸入要爬升的正式帳戶(hù)的英文名稱(chēng)。中文搜索可能有多個(gè)。我們在這里所做的是僅搜索一個(gè)。檢查官方帳戶(hù)的英語(yǔ)帳戶(hù),只要它在手機上即可。單擊官方帳戶(hù)并查看官方帳戶(hù)信息,可以看到以下爬網(wǎng)程序結果已爬到文章的相關(guān)信息,并且可以通過(guò)在代碼中調用webdriver.py來(lái)爬網(wǎng)文章的特定內容。
 ??![截屏2018-08-30 1 7. 5 6. 09](2018-08-30 1 7. 5 6. 0 9. png)
  爬行官方帳戶(hù)的注意事項
  PhantomJS的硒支持已被棄用,請改用無(wú)頭版本的Chrome或Firefox警告。warn('PhantomJS的硒支持已棄用,請使用無(wú)頭'
  Internet上的許多文章仍在使用PhantomJS。實(shí)際上,Selenium自去年以來(lái)就不支持PhantomJS?,F在,如果您使用Selenium初始化瀏覽器,則需要使用webdriver來(lái)初始化沒(méi)有head參數的Chrome或Firefox驅動(dòng)程序。
  有關(guān)詳細信息,請參閱官方網(wǎng)站鏈接:
  無(wú)法連接到服務(wù)chromedriver / firefoxdriver
  我在開(kāi)發(fā)過(guò)程中遇到了這個(gè)問(wèn)題。對于此問(wèn)題,通常有兩種可能性。一種是未配置chromedriver或geckodriver的環(huán)境變量。在這里,您需要注意chromedriver或geckodriver文件的環(huán)境變量,必須將它們配置為PATH或直接將這兩個(gè)文件直接復制到/ usr / bin目錄;
  還有另一種可能是未配置主機。如果發(fā)現此問(wèn)題,請檢查您的主機文件是否未配置12 7. 0. 0. 1本地主機,只需對其進(jìn)行配置。
  這里要注意的另一件事是,如果您使用chrome瀏覽器,則還應注意chrome瀏覽器版本與chromedriver之間的對應關(guān)系。您可以在此文章中進(jìn)行檢查,也可以訪(fǎng)問(wèn)Google官方網(wǎng)站檢查最新的信件。關(guān)系。
<p>反水 查看全部

  Python爬取微信公眾號文章(一)(圖)
  Python抓取微信公眾號文章
  我最近正在從事自己的項目。它涉及文章,需要通過(guò)python抓取微信官方帳戶(hù)。由于微信的獨特方法,因此無(wú)法直接對其進(jìn)行爬網(wǎng)。我研究了一些文章并且可能有想法,并且在Internet上找不到解決方案沒(méi)有問(wèn)題,但是由于某些第三方庫的更改,內部的代碼基本上無(wú)法使用。本文文章是為需要抓取官方帳戶(hù)文章,文章的朋友而寫(xiě)的。最后,還將提供python源代碼下載。
  如何抓取官方帳戶(hù)
  有兩種主要的方法來(lái)爬取官方帳戶(hù)。一種是通過(guò)搜狗搜索微信公眾號頁(yè)面,找到文章地址,然后抓取具體的文章內容;第二種是注冊官方帳戶(hù),然后通過(guò)官方帳戶(hù)的搜索界面找到文章的地址,然后根據該地址抓取文章的內容。
  這兩種解決方案各有優(yōu)缺點(diǎn)。使用搜狗搜索的核心思想是通過(guò)請求模擬搜狗搜索官方賬號,然后解析搜索結果頁(yè)面,然后根據官方賬號首頁(yè)地址進(jìn)行抓取,以抓取文章詳細信息,但是您需要請注意,由于搜狗與騰訊之間的協(xié)議,只能顯示最新的10個(gè)文章,而無(wú)法獲取所有的文章。如果您想結識文章的所有朋友,則可能必須使用第二種方法。第二種方法的缺點(diǎn)是您必須注冊一個(gè)官方帳戶(hù)才能通過(guò)騰訊身份驗證。這個(gè)過(guò)程比較麻煩。您可以通過(guò)調用官方帳戶(hù)來(lái)查詢(xún)界面,但是您需要使用硒來(lái)模擬滑動(dòng)頁(yè)面的操作。整個(gè)過(guò)程還是很麻煩的。因為我的項目不需要歷史記錄文章,所以我使用搜狗搜索來(lái)執行爬取官方帳戶(hù)的功能。
  檢索最近10個(gè)正式帳戶(hù)文章
  python需要依賴(lài)的第三方庫如下:
  urllib,pyquery,請求,硒
  具體邏輯寫(xiě)在注釋中,沒(méi)有什么特別復雜的。
  爬蟲(chóng)核心課程
  #!/usr/bin/python
# coding: utf-8
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]
  主要輸入功能:
  # 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
  直接運行main方法,然后在控制臺中輸入要爬升的正式帳戶(hù)的英文名稱(chēng)。中文搜索可能有多個(gè)。我們在這里所做的是僅搜索一個(gè)。檢查官方帳戶(hù)的英語(yǔ)帳戶(hù),只要它在手機上即可。單擊官方帳戶(hù)并查看官方帳戶(hù)信息,可以看到以下爬網(wǎng)程序結果已爬到文章的相關(guān)信息,并且可以通過(guò)在代碼中調用webdriver.py來(lái)爬網(wǎng)文章的特定內容。
 ??![截屏2018-08-30 1 7. 5 6. 09](2018-08-30 1 7. 5 6. 0 9. png)
  爬行官方帳戶(hù)的注意事項
  PhantomJS的硒支持已被棄用,請改用無(wú)頭版本的Chrome或Firefox警告。warn('PhantomJS的硒支持已棄用,請使用無(wú)頭'
  Internet上的許多文章仍在使用PhantomJS。實(shí)際上,Selenium自去年以來(lái)就不支持PhantomJS?,F在,如果您使用Selenium初始化瀏覽器,則需要使用webdriver來(lái)初始化沒(méi)有head參數的Chrome或Firefox驅動(dòng)程序。
  有關(guān)詳細信息,請參閱官方網(wǎng)站鏈接:
  無(wú)法連接到服務(wù)chromedriver / firefoxdriver
  我在開(kāi)發(fā)過(guò)程中遇到了這個(gè)問(wèn)題。對于此問(wèn)題,通常有兩種可能性。一種是未配置chromedriver或geckodriver的環(huán)境變量。在這里,您需要注意chromedriver或geckodriver文件的環(huán)境變量,必須將它們配置為PATH或直接將這兩個(gè)文件直接復制到/ usr / bin目錄;
  還有另一種可能是未配置主機。如果發(fā)現此問(wèn)題,請檢查您的主機文件是否未配置12 7. 0. 0. 1本地主機,只需對其進(jìn)行配置。
  這里要注意的另一件事是,如果您使用chrome瀏覽器,則還應注意chrome瀏覽器版本與chromedriver之間的對應關(guān)系。您可以在此文章中進(jìn)行檢查,也可以訪(fǎng)問(wèn)Google官方網(wǎng)站檢查最新的信件。關(guān)系。
<p>反水

先湊活著(zhù),畢竟還破解不了登錄的公眾號

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

  先湊活著(zhù),畢竟還破解不了登錄的公眾號
  標簽:URL微信偽造品以爬取公共令牌textprintid
  哈哈,我終于找到了文章,可以一鍵獲取所有正式帳戶(hù)。盡管它很愚蠢,但讓我們活著(zhù)。畢竟,我無(wú)法破解登錄。
  參考鏈接:
  第一步:先注冊一個(gè)官方帳戶(hù)
  注冊后登錄首頁(yè),找到該物料管理系統
  
  然后您將看到以下頁(yè)面
  
  點(diǎn)擊此紅色箭頭指向的鏈接
  
  記住要打開(kāi)調試工具
  然后搜索您要抓取的官方帳戶(hù)
  
  此請求將返回我們搜索的官方帳戶(hù)。如果是第一個(gè)帳戶(hù),我們想要的官方帳戶(hù)也會(huì )在此列表中
  
  我們需要此帳號ID來(lái)標記此官方帳戶(hù)
  下一步選擇,然后單擊
  
  然后文章列表出現
  整個(gè)過(guò)程需要令牌,官方帳戶(hù)名和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()
  我需要解釋?zhuān)瑪祿毂旧砩踔炼紱](méi)有編碼我。
  而且,該接口似乎經(jīng)常更新,因此您只需要了解我的代碼的邏輯即可。
  好
  標簽:url,微信,假冒,抓取,公開(kāi),令牌,文本,打印,id 查看全部

  先湊活著(zhù),畢竟還破解不了登錄的公眾號
  標簽:URL微信偽造品以爬取公共令牌textprintid
  哈哈,我終于找到了文章,可以一鍵獲取所有正式帳戶(hù)。盡管它很愚蠢,但讓我們活著(zhù)。畢竟,我無(wú)法破解登錄。
  參考鏈接:
  第一步:先注冊一個(gè)官方帳戶(hù)
  注冊后登錄首頁(yè),找到該物料管理系統
  
  然后您將看到以下頁(yè)面
  
  點(diǎn)擊此紅色箭頭指向的鏈接
  
  記住要打開(kāi)調試工具
  然后搜索您要抓取的官方帳戶(hù)
  
  此請求將返回我們搜索的官方帳戶(hù)。如果是第一個(gè)帳戶(hù),我們想要的官方帳戶(hù)也會(huì )在此列表中
  
  我們需要此帳號ID來(lái)標記此官方帳戶(hù)
  下一步選擇,然后單擊
  
  然后文章列表出現
  整個(gè)過(guò)程需要令牌,官方帳戶(hù)名和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()
  我需要解釋?zhuān)瑪祿毂旧砩踔炼紱](méi)有編碼我。
  而且,該接口似乎經(jīng)常更新,因此您只需要了解我的代碼的邏輯即可。
  好
  標簽:url,微信,假冒,抓取,公開(kāi),令牌,文本,打印,id

新聞采集什么平臺什么深度值新聞就用什么方式?

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

  新聞采集什么平臺什么深度值新聞就用什么方式?
  querylist采集微信公眾號文章索引至querylist數據庫,數據存儲格式采用字典,不支持sql,讀寫(xiě)頻率大約在50%以下,讀寫(xiě)次數不固定;reportlist采集微信公眾號文章索引至reportlist數據庫,數據格式與querylist數據庫相同,但數據存儲格式為基于哈希表(key-value數據結構)存儲,與querylist數據庫存儲方式相同,但數據讀寫(xiě)頻率大約在50%以下,讀寫(xiě)次數不固定;。
  做新聞的話(huà)只需要兩者都要關(guān)注即可,新聞聯(lián)播的話(huà)srs采集肯定沒(méi)問(wèn)題了。其他新聞一般采集什么平臺什么深度值新聞就用什么方式,根據需要各家數據采集平臺可能會(huì )有不同。另外你指的市場(chǎng)上的平臺應該是綜合新聞客戶(hù)端之類(lèi)的,建議使用專(zhuān)注數據存儲的基于hash表的,這個(gè)只要數據量不大,根本不用關(guān)心語(yǔ)義方面的問(wèn)題。
  數據庫我了解的不多,如果你指的是手機app里邊的數據那類(lèi),不建議上querylist,各種尺度都得管。reportlist就不用理會(huì )了,
  app里面的數據,基本沒(méi)戲。一般是要軟件,就是我們用的autofocus。通?,F在都是用java的,基本都是有程序實(shí)現的。一般你需要掌握java的基本語(yǔ)法。
  那個(gè)reportlist要嵌入到app里去,好大個(gè),而且還要注意安全性。不過(guò)如果你不是開(kāi)發(fā)類(lèi)的產(chǎn)品的話(huà),一般互聯(lián)網(wǎng)公司會(huì )采用reportlist來(lái)采集數據,如果想采用它的話(huà),則需要有一定的開(kāi)發(fā)能力。 查看全部

  新聞采集什么平臺什么深度值新聞就用什么方式?
  querylist采集微信公眾號文章索引至querylist數據庫,數據存儲格式采用字典,不支持sql,讀寫(xiě)頻率大約在50%以下,讀寫(xiě)次數不固定;reportlist采集微信公眾號文章索引至reportlist數據庫,數據格式與querylist數據庫相同,但數據存儲格式為基于哈希表(key-value數據結構)存儲,與querylist數據庫存儲方式相同,但數據讀寫(xiě)頻率大約在50%以下,讀寫(xiě)次數不固定;。
  做新聞的話(huà)只需要兩者都要關(guān)注即可,新聞聯(lián)播的話(huà)srs采集肯定沒(méi)問(wèn)題了。其他新聞一般采集什么平臺什么深度值新聞就用什么方式,根據需要各家數據采集平臺可能會(huì )有不同。另外你指的市場(chǎng)上的平臺應該是綜合新聞客戶(hù)端之類(lèi)的,建議使用專(zhuān)注數據存儲的基于hash表的,這個(gè)只要數據量不大,根本不用關(guān)心語(yǔ)義方面的問(wèn)題。
  數據庫我了解的不多,如果你指的是手機app里邊的數據那類(lèi),不建議上querylist,各種尺度都得管。reportlist就不用理會(huì )了,
  app里面的數據,基本沒(méi)戲。一般是要軟件,就是我們用的autofocus。通?,F在都是用java的,基本都是有程序實(shí)現的。一般你需要掌握java的基本語(yǔ)法。
  那個(gè)reportlist要嵌入到app里去,好大個(gè),而且還要注意安全性。不過(guò)如果你不是開(kāi)發(fā)類(lèi)的產(chǎn)品的話(huà),一般互聯(lián)網(wǎng)公司會(huì )采用reportlist來(lái)采集數據,如果想采用它的話(huà),則需要有一定的開(kāi)發(fā)能力。

情感分析:后傳入到分詞器進(jìn)行分詞(圖)

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

  情感分析:后傳入到分詞器進(jìn)行分詞(圖)
  querylist采集微信公眾號文章,進(jìn)行情感分析后傳入到分詞器進(jìn)行分詞;querylist&document對文章進(jìn)行全文分詞,生成詞向量向量;處理詞向量后傳入同質(zhì)詞提取器提取同質(zhì)詞作為同質(zhì)詞提取器里的一個(gè)詞來(lái)源于angelfielddemo2179|querylist/randomline—在線(xiàn)播放—優(yōu)酷網(wǎng),視頻高清在線(xiàn)觀(guān)看。
  我也是剛剛讀到encoder-decoder論文,看到無(wú)向無(wú)環(huán)圖技術(shù),理解的比較少,
  數據(語(yǔ)料庫)設計時(shí),
  因為query是個(gè)list,可以傳入一個(gè)bow的map,或者傳入兩個(gè)bowmap,計算一個(gè)rank的loss,完成分詞。
  1.以前做圖像時(shí)寫(xiě)過(guò)一篇中文分詞的論文,并基于深度學(xué)習進(jìn)行中文分詞,效果還可以2.query字詞越來(lái)越多,大小寫(xiě)不一致詞意會(huì )有歧義,所以可以使用深度學(xué)習進(jìn)行分詞(找到語(yǔ)境關(guān)鍵詞,然后在訓練階段通過(guò)訓練、預測找到人,物,
  按照現在網(wǎng)上的實(shí)現來(lái)看,只有詞典或者query數據收集設計上是有比較大的挑戰的。其他不會(huì )有太大的問(wèn)題,最差也是做一個(gè)低秩優(yōu)化之類(lèi)的處理。感覺(jué)不同領(lǐng)域,有不同的做法, 查看全部

  情感分析:后傳入到分詞器進(jìn)行分詞(圖)
  querylist采集微信公眾號文章,進(jìn)行情感分析后傳入到分詞器進(jìn)行分詞;querylist&document對文章進(jìn)行全文分詞,生成詞向量向量;處理詞向量后傳入同質(zhì)詞提取器提取同質(zhì)詞作為同質(zhì)詞提取器里的一個(gè)詞來(lái)源于angelfielddemo2179|querylist/randomline—在線(xiàn)播放—優(yōu)酷網(wǎng),視頻高清在線(xiàn)觀(guān)看。
  我也是剛剛讀到encoder-decoder論文,看到無(wú)向無(wú)環(huán)圖技術(shù),理解的比較少,
  數據(語(yǔ)料庫)設計時(shí),
  因為query是個(gè)list,可以傳入一個(gè)bow的map,或者傳入兩個(gè)bowmap,計算一個(gè)rank的loss,完成分詞。
  1.以前做圖像時(shí)寫(xiě)過(guò)一篇中文分詞的論文,并基于深度學(xué)習進(jìn)行中文分詞,效果還可以2.query字詞越來(lái)越多,大小寫(xiě)不一致詞意會(huì )有歧義,所以可以使用深度學(xué)習進(jìn)行分詞(找到語(yǔ)境關(guān)鍵詞,然后在訓練階段通過(guò)訓練、預測找到人,物,
  按照現在網(wǎng)上的實(shí)現來(lái)看,只有詞典或者query數據收集設計上是有比較大的挑戰的。其他不會(huì )有太大的問(wèn)題,最差也是做一個(gè)低秩優(yōu)化之類(lèi)的處理。感覺(jué)不同領(lǐng)域,有不同的做法,

querylist采集微信公眾號文章 熊孩子和萌寵搞笑視頻笑聲不斷快樂(lè )常伴

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

  querylist采集微信公眾號文章 熊孩子和萌寵搞笑視頻笑聲不斷快樂(lè )常伴
  每天更新視頻:熊孩子的日常生活,日??蓯?ài)的寵物,熊孩子和可愛(ài)的寵物的有趣視頻。笑聲一直很開(kāi)心,總是伴隨著(zhù)!
  
  請允許我強制投放廣告:
  因為每個(gè)爬行動(dòng)物的官方帳戶(hù)都屬于他的家人,所以那是一年以前的事情了,現在已經(jīng)改變了,但是主題和名字都改變了。
  一個(gè)喜歡小寵物但買(mǎi)不起貓的代碼農民,下班后很高興。您可以注意!
  為了確保視頻的安全性并避免丟失,敬請所有者在視頻中添加水印。
  一、獲取官方帳戶(hù)信息:標題,摘要,封面,文章URL
  步驟:
  1、首先自己申請一個(gè)官方帳戶(hù)
  2、登錄到他的帳戶(hù),創(chuàng )建一個(gè)新的文章圖形,單擊超鏈接
  
  3、彈出搜索框,搜索所需的正式帳戶(hù),并查看歷史記錄文章
  
  
  4、通過(guò)數據包捕獲獲取信息并找到請求的URL
  
  通過(guò)查看信息,我們找到了所需的關(guān)鍵內容:標題,摘要,封面和文章URL。確認這是我們需要的URL。通過(guò)單擊下一頁(yè),我們多次獲得該URL,發(fā)現只有random和beginin的參數已更改
  
  因此確定了主要信息URL。
  開(kāi)始吧:
  事實(shí)證明,我們需要修改的參數是:令牌,隨機,cookie
  獲取網(wǎng)址時(shí)可以獲取這兩個(gè)值的來(lái)源
  # -*- coding: utf-8 -*-
import re
import requests
import jsonpath
import json
headers = {
"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",
"Host": "mp.weixin.qq.com",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Cookie": "自己獲取信息時(shí)的cookie"
}
def getInfo():
for i in range(80):
# token random 需要要自己的 begin:參數傳入
url = "https://mp.weixin.qq.com/cgi-b ... in%3D{}&count=5&query=&fakeid=MzI4MzkzMTc3OA%3D%3D&type=9".format(str(i * 5))
response = requests.get(url, headers = headers)
jsonRes = response.json()
titleList = jsonpath.jsonpath(jsonRes, "$..title")
coverList = jsonpath.jsonpath(jsonRes, "$..cover")
urlList = jsonpath.jsonpath(jsonRes, "$..link")
# 遍歷 構造可存儲字符串
for index in range(len(titleList)):
title = titleList[index]
cover = coverList[index]
url = urlList[index]
scvStr = "%s,%s, %s,\n" % (title, cover, url)
with open("info.csv", "a+", encoding="gbk", newline='') as f:
f.write(scvStr)
  獲得結果(成功):
  
  二、在文章中獲取視頻:實(shí)現批量下載
  分析單個(gè)視頻文章后,我找到了此鏈接:
  
  打開(kāi)網(wǎng)頁(yè),找到它是視頻網(wǎng)頁(yè)的下載鏈接:
  
  
  嘿,似乎有點(diǎn)有趣,我找到了視頻網(wǎng)頁(yè)的純下載鏈接,讓我們開(kāi)始吧。
  我在鏈接中找到一個(gè)關(guān)鍵參數vid。我不知道它來(lái)自哪里?
  它與獲得的其他信息無(wú)關(guān),因此只能被強制使用。
  在順序文章的url請求信息中找到此參數,然后將其獲取。
  response = requests.get(url_wxv, headers=headers)
# 我用的是正則,也可以使用xpath
jsonRes = response.text # 匹配:wxv_1105179750743556096
dirRe = r"wxv_.{19}"
result = re.search(dirRe, jsonRes)
wxv = result.group(0)
print(wxv)
  視頻下載:
  def getVideo(video_title, url_wxv):
video_path = './videoFiles/' + video_title + ".mp4"
# 頁(yè)面可下載形式
video_url_temp = "https://mp.weixin.qq.com/mp/vi ... ot%3B + wxv
response = requests.get(video_url_temp, headers=headers)
content = response.content.decode()
content = json.loads(content)
url_info = content.get("url_info")
video_url2 = url_info[0].get("url")
print(video_url2)
# 請求要下載的url地址
html = requests.get(video_url2)
# content返回的是bytes型也就是二進(jìn)制的數據。
html = html.content
with open(video_path, 'wb') as f:
f.write(html)
  然后完成所有信息,并執行代碼匯編。
  a。獲取官方帳戶(hù)信息
  b。過(guò)濾單個(gè)文章信息
  c,獲取視頻信息
  d。下載拼接視頻頁(yè)面的URL
  e。下載視頻并保存
  代碼實(shí)驗結果:
  
  
  獲取正式帳戶(hù):標題,摘要,封面,視頻,
  可以說(shuō)您擁有視頻官方帳戶(hù)的所有信息,并且可以復制其中一個(gè)。
  危險的動(dòng)作,請不要操作!記得!記得!記??!
  要獲取代碼,請回復至官方帳戶(hù):20191210或官方帳戶(hù)代碼
   查看全部

  querylist采集微信公眾號文章 熊孩子和萌寵搞笑視頻笑聲不斷快樂(lè )常伴
  每天更新視頻:熊孩子的日常生活,日??蓯?ài)的寵物,熊孩子和可愛(ài)的寵物的有趣視頻。笑聲一直很開(kāi)心,總是伴隨著(zhù)!
  
  請允許我強制投放廣告:
  因為每個(gè)爬行動(dòng)物的官方帳戶(hù)都屬于他的家人,所以那是一年以前的事情了,現在已經(jīng)改變了,但是主題和名字都改變了。
  一個(gè)喜歡小寵物但買(mǎi)不起貓的代碼農民,下班后很高興。您可以注意!
  為了確保視頻的安全性并避免丟失,敬請所有者在視頻中添加水印。
  一、獲取官方帳戶(hù)信息:標題,摘要,封面,文章URL
  步驟:
  1、首先自己申請一個(gè)官方帳戶(hù)
  2、登錄到他的帳戶(hù),創(chuàng )建一個(gè)新的文章圖形,單擊超鏈接
  
  3、彈出搜索框,搜索所需的正式帳戶(hù),并查看歷史記錄文章
  
  
  4、通過(guò)數據包捕獲獲取信息并找到請求的URL
  
  通過(guò)查看信息,我們找到了所需的關(guān)鍵內容:標題,摘要,封面和文章URL。確認這是我們需要的URL。通過(guò)單擊下一頁(yè),我們多次獲得該URL,發(fā)現只有random和beginin的參數已更改
  
  因此確定了主要信息URL。
  開(kāi)始吧:
  事實(shí)證明,我們需要修改的參數是:令牌,隨機,cookie
  獲取網(wǎng)址時(shí)可以獲取這兩個(gè)值的來(lái)源
  # -*- coding: utf-8 -*-
import re
import requests
import jsonpath
import json
headers = {
"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",
"Host": "mp.weixin.qq.com",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Cookie": "自己獲取信息時(shí)的cookie"
}
def getInfo():
for i in range(80):
# token random 需要要自己的 begin:參數傳入
url = "https://mp.weixin.qq.com/cgi-b ... in%3D{}&count=5&query=&fakeid=MzI4MzkzMTc3OA%3D%3D&type=9".format(str(i * 5))
response = requests.get(url, headers = headers)
jsonRes = response.json()
titleList = jsonpath.jsonpath(jsonRes, "$..title")
coverList = jsonpath.jsonpath(jsonRes, "$..cover")
urlList = jsonpath.jsonpath(jsonRes, "$..link")
# 遍歷 構造可存儲字符串
for index in range(len(titleList)):
title = titleList[index]
cover = coverList[index]
url = urlList[index]
scvStr = "%s,%s, %s,\n" % (title, cover, url)
with open("info.csv", "a+", encoding="gbk", newline='') as f:
f.write(scvStr)
  獲得結果(成功):
  
  二、在文章中獲取視頻:實(shí)現批量下載
  分析單個(gè)視頻文章后,我找到了此鏈接:
  
  打開(kāi)網(wǎng)頁(yè),找到它是視頻網(wǎng)頁(yè)的下載鏈接:
  
  
  嘿,似乎有點(diǎn)有趣,我找到了視頻網(wǎng)頁(yè)的純下載鏈接,讓我們開(kāi)始吧。
  我在鏈接中找到一個(gè)關(guān)鍵參數vid。我不知道它來(lái)自哪里?
  它與獲得的其他信息無(wú)關(guān),因此只能被強制使用。
  在順序文章的url請求信息中找到此參數,然后將其獲取。
  response = requests.get(url_wxv, headers=headers)
# 我用的是正則,也可以使用xpath
jsonRes = response.text # 匹配:wxv_1105179750743556096
dirRe = r"wxv_.{19}"
result = re.search(dirRe, jsonRes)
wxv = result.group(0)
print(wxv)
  視頻下載:
  def getVideo(video_title, url_wxv):
video_path = './videoFiles/' + video_title + ".mp4"
# 頁(yè)面可下載形式
video_url_temp = "https://mp.weixin.qq.com/mp/vi ... ot%3B + wxv
response = requests.get(video_url_temp, headers=headers)
content = response.content.decode()
content = json.loads(content)
url_info = content.get("url_info")
video_url2 = url_info[0].get("url")
print(video_url2)
# 請求要下載的url地址
html = requests.get(video_url2)
# content返回的是bytes型也就是二進(jìn)制的數據。
html = html.content
with open(video_path, 'wb') as f:
f.write(html)
  然后完成所有信息,并執行代碼匯編。
  a。獲取官方帳戶(hù)信息
  b。過(guò)濾單個(gè)文章信息
  c,獲取視頻信息
  d。下載拼接視頻頁(yè)面的URL
  e。下載視頻并保存
  代碼實(shí)驗結果:
  
  
  獲取正式帳戶(hù):標題,摘要,封面,視頻,
  可以說(shuō)您擁有視頻官方帳戶(hù)的所有信息,并且可以復制其中一個(gè)。
  危險的動(dòng)作,請不要操作!記得!記得!記??!
  要獲取代碼,請回復至官方帳戶(hù):20191210或官方帳戶(hù)代碼
  

Python微信公眾號文章爬取一.思路(圖)

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

  Python微信公眾號文章爬取一.思路(圖)
  Python微信公共帳戶(hù)文章爬行
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)絡(luò )版圖形消息中的超鏈接獲得所需的界面
  
  
  從界面中,我們可以獲得相應的微信公眾號和所有相應的微信公眾號文章。二.界面分析
  訪(fǎng)問(wèn)微信官方帳戶(hù):
  參數:
  action = search_biz
  開(kāi)始= 0
  count = 5
  query =官方帳戶(hù)名
  token =每個(gè)帳戶(hù)對應的令牌值
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  因此在此界面中,我們只需要獲取令牌,查詢(xún)就是您需要搜索的官方帳戶(hù),并且可以在登錄后通過(guò)Web鏈接獲取令牌。
  
  獲取與官方帳戶(hù)對應的文章界面:
  參數:
  action = list_ex
  開(kāi)始= 0
  count = 5
  fakeid = MjM5NDAwMTA2MA ==
  type = 9
  query =
  token = 557131216
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  我們需要在該接口中獲取的值是上一步中的令牌和偽標識,并且可以在第一個(gè)接口中獲取該偽標識。這樣我們就可以獲得微信公眾號文章的數據。
  
  三.要實(shí)現的第一步:
  首先,我們需要模擬通過(guò)硒的登錄,然后獲取cookie和相應的令牌
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get(&#39;https://mp.weixin.qq.com/&#39;)
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class=&#39;login__type__container__select-type&#39;]").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name=&#39;account&#39;]")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name=&#39;password&#39;]")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class=&#39;btn_login&#39;]").click()
sleep(2)
# 微信登錄驗證
print(&#39;請掃描二維碼&#39;)
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get(&#39;https://mp.weixin.qq.com/&#39;)
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item[&#39;name&#39;]] = item[&#39;value&#39;]
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open(&#39;cookie.txt&#39;, &#39;w+&#39;, encoding=&#39;utf-8&#39;) as f:
f.write(cookie_str)
print(&#39;cookie保存到本地成功&#39;)
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split(&#39;?&#39;)[1].split(&#39;&&#39;)
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split(&#39;=&#39;)[0]] = item.split(&#39;=&#39;)[1]
# 返回token
return paramdict[&#39;token&#39;]
  定義一個(gè)登錄方法,其中的參數是登錄帳戶(hù)和密碼,然后定義一個(gè)字典來(lái)存儲cookie值。通過(guò)模擬用戶(hù),輸入相應的帳戶(hù)密碼,然后單擊“登錄”,然后將出現一個(gè)掃描驗證碼,只需使用登錄微信進(jìn)行掃描即可。
  刷新當前網(wǎng)頁(yè)后,獲取當前的cookie和令牌,然后返回。
  步驟2:1.請求相應的官方帳戶(hù)界面,并獲取我們需要的偽造品
  url= &#39;https://mp.weixin.qq.com&#39;
headers = {
&#39;HOST&#39;: &#39;mp.weixin.qq.com&#39;,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63&#39;
}
with open(&#39;cookie.txt&#39;, &#39;r&#39;, encoding=&#39;utf-8&#39;) as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = &#39;https://mp.weixin.qq.com/cgi-b ... 39%3B
params = {
&#39;action&#39;: &#39;search_biz&#39;,
&#39;begin&#39;: &#39;0&#39;,
&#39;count&#39;: &#39;5&#39;,
&#39;query&#39;: &#39;搜索的公眾號名稱(chēng)&#39;,
&#39;token&#39;: token,
&#39;lang&#39;: &#39;zh_CN&#39;,
&#39;f&#39;: &#39;json&#39;,
&#39;ajax&#39;: &#39;1&#39;
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲得的令牌和cookie,然后通過(guò)request.get請求獲取返回的微信官方帳戶(hù)的json數據
  lists= search_resp.json().get(&#39;list&#39;)[0]
  可以通過(guò)上面的代碼獲取相應的官方帳戶(hù)數據
  fakeid= lists.get(&#39;fakeid&#39;)
  可以通過(guò)上面的代碼獲得相應的偽造物
  2.請求獲取微信公眾號文章界面,并獲取我們需要的文章數據
  appmsg_url= &#39;https://mp.weixin.qq.com/cgi-bin/appmsg?&#39;
params_data = {
&#39;action&#39;: &#39;list_ex&#39;,
&#39;begin&#39;: &#39;0&#39;,
&#39;count&#39;: &#39;5&#39;,
&#39;fakeid&#39;: fakeid,
&#39;type&#39;: &#39;9&#39;,
&#39;query&#39;: &#39;&#39;,
&#39;token&#39;: token,
&#39;lang&#39;: &#39;zh_CN&#39;,
&#39;f&#39;: &#39;json&#39;,
&#39;ajax&#39;: &#39;1&#39;
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入了fakeid和token,然后調用request.get請求接口以獲取返回的json數據。
  我們已經(jīng)意識到抓取微信官方帳戶(hù)文章。
  四.摘要
  通過(guò)抓取微信公眾號文章,您需要掌握硒的使用和請求,以及如何獲取請求接口。但是需要注意的是,當我們循環(huán)獲得文章時(shí),必須設置延遲時(shí)間,否則帳戶(hù)將很容易被阻塞,并且無(wú)法獲得返回的數據。 查看全部

  Python微信公眾號文章爬取一.思路(圖)
  Python微信公共帳戶(hù)文章爬行
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)絡(luò )版圖形消息中的超鏈接獲得所需的界面
  
  
  從界面中,我們可以獲得相應的微信公眾號和所有相應的微信公眾號文章。二.界面分析
  訪(fǎng)問(wèn)微信官方帳戶(hù):
  參數:
  action = search_biz
  開(kāi)始= 0
  count = 5
  query =官方帳戶(hù)名
  token =每個(gè)帳戶(hù)對應的令牌值
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  因此在此界面中,我們只需要獲取令牌,查詢(xún)就是您需要搜索的官方帳戶(hù),并且可以在登錄后通過(guò)Web鏈接獲取令牌。
  
  獲取與官方帳戶(hù)對應的文章界面:
  參數:
  action = list_ex
  開(kāi)始= 0
  count = 5
  fakeid = MjM5NDAwMTA2MA ==
  type = 9
  query =
  token = 557131216
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  我們需要在該接口中獲取的值是上一步中的令牌和偽標識,并且可以在第一個(gè)接口中獲取該偽標識。這樣我們就可以獲得微信公眾號文章的數據。
  
  三.要實(shí)現的第一步:
  首先,我們需要模擬通過(guò)硒的登錄,然后獲取cookie和相應的令牌
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get(&#39;https://mp.weixin.qq.com/&#39;)
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class=&#39;login__type__container__select-type&#39;]").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name=&#39;account&#39;]")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name=&#39;password&#39;]")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class=&#39;btn_login&#39;]").click()
sleep(2)
# 微信登錄驗證
print(&#39;請掃描二維碼&#39;)
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get(&#39;https://mp.weixin.qq.com/&#39;)
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item[&#39;name&#39;]] = item[&#39;value&#39;]
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open(&#39;cookie.txt&#39;, &#39;w+&#39;, encoding=&#39;utf-8&#39;) as f:
f.write(cookie_str)
print(&#39;cookie保存到本地成功&#39;)
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split(&#39;?&#39;)[1].split(&#39;&&#39;)
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split(&#39;=&#39;)[0]] = item.split(&#39;=&#39;)[1]
# 返回token
return paramdict[&#39;token&#39;]
  定義一個(gè)登錄方法,其中的參數是登錄帳戶(hù)和密碼,然后定義一個(gè)字典來(lái)存儲cookie值。通過(guò)模擬用戶(hù),輸入相應的帳戶(hù)密碼,然后單擊“登錄”,然后將出現一個(gè)掃描驗證碼,只需使用登錄微信進(jìn)行掃描即可。
  刷新當前網(wǎng)頁(yè)后,獲取當前的cookie和令牌,然后返回。
  步驟2:1.請求相應的官方帳戶(hù)界面,并獲取我們需要的偽造品
  url= &#39;https://mp.weixin.qq.com&#39;
headers = {
&#39;HOST&#39;: &#39;mp.weixin.qq.com&#39;,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63&#39;
}
with open(&#39;cookie.txt&#39;, &#39;r&#39;, encoding=&#39;utf-8&#39;) as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = &#39;https://mp.weixin.qq.com/cgi-b ... 39%3B
params = {
&#39;action&#39;: &#39;search_biz&#39;,
&#39;begin&#39;: &#39;0&#39;,
&#39;count&#39;: &#39;5&#39;,
&#39;query&#39;: &#39;搜索的公眾號名稱(chēng)&#39;,
&#39;token&#39;: token,
&#39;lang&#39;: &#39;zh_CN&#39;,
&#39;f&#39;: &#39;json&#39;,
&#39;ajax&#39;: &#39;1&#39;
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲得的令牌和cookie,然后通過(guò)request.get請求獲取返回的微信官方帳戶(hù)的json數據
  lists= search_resp.json().get(&#39;list&#39;)[0]
  可以通過(guò)上面的代碼獲取相應的官方帳戶(hù)數據
  fakeid= lists.get(&#39;fakeid&#39;)
  可以通過(guò)上面的代碼獲得相應的偽造物
  2.請求獲取微信公眾號文章界面,并獲取我們需要的文章數據
  appmsg_url= &#39;https://mp.weixin.qq.com/cgi-bin/appmsg?&#39;
params_data = {
&#39;action&#39;: &#39;list_ex&#39;,
&#39;begin&#39;: &#39;0&#39;,
&#39;count&#39;: &#39;5&#39;,
&#39;fakeid&#39;: fakeid,
&#39;type&#39;: &#39;9&#39;,
&#39;query&#39;: &#39;&#39;,
&#39;token&#39;: token,
&#39;lang&#39;: &#39;zh_CN&#39;,
&#39;f&#39;: &#39;json&#39;,
&#39;ajax&#39;: &#39;1&#39;
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入了fakeid和token,然后調用request.get請求接口以獲取返回的json數據。
  我們已經(jīng)意識到抓取微信官方帳戶(hù)文章。
  四.摘要
  通過(guò)抓取微信公眾號文章,您需要掌握硒的使用和請求,以及如何獲取請求接口。但是需要注意的是,當我們循環(huán)獲得文章時(shí),必須設置延遲時(shí)間,否則帳戶(hù)將很容易被阻塞,并且無(wú)法獲得返回的數據。

Python爬蟲(chóng)、數據分析、網(wǎng)站開(kāi)發(fā)等案例教程視頻免費在線(xiàn)觀(guān)看

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

  Python爬蟲(chóng)、數據分析、網(wǎng)站開(kāi)發(fā)等案例教程視頻免費在線(xiàn)觀(guān)看
  前言
  本文中的文本和圖片過(guò)濾網(wǎng)絡(luò )可以用于學(xué)習,交流,并且沒(méi)有任何商業(yè)用途。如有任何疑問(wèn),請與我們聯(lián)系進(jìn)行處理。
  免費在線(xiàn)觀(guān)看有關(guān)Python采集器,數據分析,網(wǎng)站開(kāi)發(fā)等的案例教程視頻
  https://space.bilibili.com/523606542
  
  基本開(kāi)發(fā)環(huán)境抓取了兩個(gè)官方帳戶(hù)的文章:
  1。爬網(wǎng)Cyan Light編程官方帳戶(hù)的所有文章
  2,抓取有關(guān)python 文章的所有官方帳戶(hù)
  檢索Cyan Light編程官方帳戶(hù)的所有文章
  1,登錄正式帳戶(hù)后,單擊圖片和文字
  
  2,打開(kāi)開(kāi)發(fā)人員工具
  
  3,單擊超鏈接
  
  加載相關(guān)數據后,會(huì )出現一個(gè)數據包,包括文章標題,鏈接,摘要,發(fā)布時(shí)間等。您還可以選擇其他官方帳戶(hù)進(jìn)行抓取,但這需要您擁有一個(gè)微信公眾號帳戶(hù)。
  添加cookie
  import pprint
import time
import requests
import csv
f = open('青燈公眾號文章.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['標題', '文章發(fā)布時(shí)間', '文章地址'])
csv_writer.writeheader()
for page in range(0, 40, 5):
url = f'https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin={page}&count=5&fakeid=&type=9&query=&token=1252678642&lang=zh_CN&f=json&ajax=1'
headers = {
'cookie': '加cookie',
'referer': 'https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&createType=0&token=1252678642&lang=zh_CN',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
}
response = requests.get(url=url, headers=headers)
html_data = response.json()
pprint.pprint(response.json())
lis = html_data['app_msg_list']
for li in lis:
title = li['title']
link_url = li['link']
update_time = li['update_time']
timeArray = time.localtime(int(update_time))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
'標題': title,
'文章發(fā)布時(shí)間': otherStyleTime,
'文章地址': link_url,
}
csv_writer.writerow(dit)
print(dit)
  檢索有關(guān)python 文章的所有正式帳戶(hù)
  1,搜狗搜索python選擇微信
  
  注意:如果不登錄,則只能抓取數據的前十頁(yè)。登錄后,您可以檢索2W以上的文章文章。
  2。直接檢索靜態(tài)網(wǎng)頁(yè)的標題,官方帳戶(hù),文章地址和發(fā)布時(shí)間。
  import time
import requests
import parsel
import csv
f = open('公眾號文章.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['標題', '公眾號', '文章發(fā)布時(shí)間', '文章地址'])
csv_writer.writeheader()
for page in range(1, 2447):
url = f'https://weixin.sogou.com/weixin?query=python&_sug_type_=&s_from=input&_sug_=n&type=2&page={page}&ie=utf8'
headers = {
'Cookie': '自己的cookie',
'Host': 'weixin.sogou.com',
'Referer': 'https://www.sogou.com/web?query=python&_asf=www.sogou.com&_ast=&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=1396&sst0=1610779538290&lkt=0%2C0%2C0&sugsuv=1590216228113568&sugtime=1610779538290',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
}
response = requests.get(url=url, headers=headers)
selector = parsel.Selector(response.text)
lis = selector.css('.news-list li')
for li in lis:
title_list = li.css('.txt-box h3 a::text').getall()
num = len(title_list)
if num == 1:
title_str = 'python' + title_list[0]
else:
title_str = 'python'.join(title_list)
href = li.css('.txt-box h3 a::attr(href)').get()
article_url = 'https://weixin.sogou.com' + href
name = li.css('.s-p a::text').get()
date = li.css('.s-p::attr(t)').get()
timeArray = time.localtime(int(date))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
'標題': title_str,
'公眾號': name,
'文章發(fā)布時(shí)間': otherStyleTime,
'文章地址': article_url,
}
csv_writer.writerow(dit)
print(title_str, name, otherStyleTime, article_url)
   查看全部

  Python爬蟲(chóng)、數據分析、網(wǎng)站開(kāi)發(fā)等案例教程視頻免費在線(xiàn)觀(guān)看
  前言
  本文中的文本和圖片過(guò)濾網(wǎng)絡(luò )可以用于學(xué)習,交流,并且沒(méi)有任何商業(yè)用途。如有任何疑問(wèn),請與我們聯(lián)系進(jìn)行處理。
  免費在線(xiàn)觀(guān)看有關(guān)Python采集器,數據分析,網(wǎng)站開(kāi)發(fā)等的案例教程視頻
  https://space.bilibili.com/523606542
  
  基本開(kāi)發(fā)環(huán)境抓取了兩個(gè)官方帳戶(hù)的文章:
  1。爬網(wǎng)Cyan Light編程官方帳戶(hù)的所有文章
  2,抓取有關(guān)python 文章的所有官方帳戶(hù)
  檢索Cyan Light編程官方帳戶(hù)的所有文章
  1,登錄正式帳戶(hù)后,單擊圖片和文字
  
  2,打開(kāi)開(kāi)發(fā)人員工具
  
  3,單擊超鏈接
  
  加載相關(guān)數據后,會(huì )出現一個(gè)數據包,包括文章標題,鏈接,摘要,發(fā)布時(shí)間等。您還可以選擇其他官方帳戶(hù)進(jìn)行抓取,但這需要您擁有一個(gè)微信公眾號帳戶(hù)。
  添加cookie
  import pprint
import time
import requests
import csv
f = open('青燈公眾號文章.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['標題', '文章發(fā)布時(shí)間', '文章地址'])
csv_writer.writeheader()
for page in range(0, 40, 5):
url = f'https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin={page}&count=5&fakeid=&type=9&query=&token=1252678642&lang=zh_CN&f=json&ajax=1'
headers = {
'cookie': '加cookie',
'referer': 'https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&createType=0&token=1252678642&lang=zh_CN',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
}
response = requests.get(url=url, headers=headers)
html_data = response.json()
pprint.pprint(response.json())
lis = html_data['app_msg_list']
for li in lis:
title = li['title']
link_url = li['link']
update_time = li['update_time']
timeArray = time.localtime(int(update_time))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
'標題': title,
'文章發(fā)布時(shí)間': otherStyleTime,
'文章地址': link_url,
}
csv_writer.writerow(dit)
print(dit)
  檢索有關(guān)python 文章的所有正式帳戶(hù)
  1,搜狗搜索python選擇微信
  
  注意:如果不登錄,則只能抓取數據的前十頁(yè)。登錄后,您可以檢索2W以上的文章文章。
  2。直接檢索靜態(tài)網(wǎng)頁(yè)的標題,官方帳戶(hù),文章地址和發(fā)布時(shí)間。
  import time
import requests
import parsel
import csv
f = open('公眾號文章.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['標題', '公眾號', '文章發(fā)布時(shí)間', '文章地址'])
csv_writer.writeheader()
for page in range(1, 2447):
url = f'https://weixin.sogou.com/weixin?query=python&_sug_type_=&s_from=input&_sug_=n&type=2&page={page}&ie=utf8'
headers = {
'Cookie': '自己的cookie',
'Host': 'weixin.sogou.com',
'Referer': 'https://www.sogou.com/web?query=python&_asf=www.sogou.com&_ast=&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=1396&sst0=1610779538290&lkt=0%2C0%2C0&sugsuv=1590216228113568&sugtime=1610779538290',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
}
response = requests.get(url=url, headers=headers)
selector = parsel.Selector(response.text)
lis = selector.css('.news-list li')
for li in lis:
title_list = li.css('.txt-box h3 a::text').getall()
num = len(title_list)
if num == 1:
title_str = 'python' + title_list[0]
else:
title_str = 'python'.join(title_list)
href = li.css('.txt-box h3 a::attr(href)').get()
article_url = 'https://weixin.sogou.com' + href
name = li.css('.s-p a::text').get()
date = li.css('.s-p::attr(t)').get()
timeArray = time.localtime(int(date))
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dit = {
'標題': title_str,
'公眾號': name,
'文章發(fā)布時(shí)間': otherStyleTime,
'文章地址': article_url,
}
csv_writer.writerow(dit)
print(title_str, name, otherStyleTime, article_url)
  

微信公眾號文章采集的入口歷史消息頁(yè)信息獲取方法

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

  微信公眾號文章采集的入口歷史消息頁(yè)信息獲取方法
  我解釋了如何在微信公眾號文章采集的進(jìn)入歷史消息頁(yè)面上獲取信息。有需要的朋友可以參考此內容。
  采集 WeChat文章和采集 網(wǎng)站具有相同的內容,都需要從列表頁(yè)面開(kāi)始。而微信文章的列表頁(yè)面是官方賬戶(hù)中的觀(guān)看歷史信息頁(yè)面?;ヂ?lián)網(wǎng)上的其他一些微信采集器現在使用搜狗進(jìn)行搜索。盡管采集的方法簡(jiǎn)單得多,但內容并不完整。因此,我們仍然必須來(lái)自最標準,最全面的官方帳戶(hù)歷史記錄信息頁(yè)面采集。
  由于微信的限制,我們可以復制到的鏈接不完整,并且無(wú)法在瀏覽器中打開(kāi)內容。因此,我們需要使用anyproxy通過(guò)上一篇文章文章中介紹的方法來(lái)獲取完整的微信官方帳戶(hù)歷史記錄消息頁(yè)面的鏈接地址。
 ?。?BBoEMdPDBtOun1F%2F9ENSz&wx_header = 1
  如前一篇文章文章所述,biz參數是官方帳戶(hù)的ID,而uin是用戶(hù)的ID。目前,uin是所有官方帳戶(hù)中唯一的帳戶(hù)。另外兩個(gè)重要參數key和pass_ticket是微信客戶(hù)端上的補充參數。
  因此,在該地址過(guò)期之前,我們可以通過(guò)在瀏覽器中查看原創(chuàng )文本來(lái)獲取歷史消息的文章列表。如果我們想自動(dòng)分析內容,我們還可以使用尚未過(guò)期的密鑰來(lái)編寫(xiě)程序。例如,使用pass_ticket的鏈接地址提交它,然后通過(guò)php程序獲取文章列表。
  最近,一個(gè)朋友告訴我,他的采集目標是一個(gè)單一的正式帳戶(hù),我認為沒(méi)有必要使用上一篇文章文章中編寫(xiě)的批處理采集方法。因此,讓我們看一下歷史新聞頁(yè)面中如何獲取文章列表。通過(guò)分析文章列表,我們可以獲得該官方帳戶(hù)的所有內容鏈接地址,然后采集內容就可以了。
  如果在anyproxy Web界面中正確配置了證書(shū),則可以顯示https的內容。 Web界面的地址為:8002,其中localhost可以替換為您自己的IP地址或域名。從列表中找到以getmasssendmsg開(kāi)頭的記錄,然后單擊它,該記錄的詳細信息將顯示在右側:
  
  紅色框是完整的鏈接地址。將微信公眾平臺的域名拼接起來(lái)后,可以在瀏覽器中打開(kāi)。
  然后將頁(yè)面下拉至html內容的末尾,我們可以看到j(luò )son變量是歷史新聞的文章列表:
  
  我們復制msgList的變量值并使用json格式化工具對其進(jìn)行分析,我們可以看到j(luò )son具有以下結構:
  
{
"list": [
{
"app_msg_ext_info": {
"author": "",
"content": "",
"content_url": "http://mp.weixin.qq.com/s%3F__ ... ot%3B,
"copyright_stat": 100,
"cover": "http://mmbiz.qpic.cn/mmbiz/Mof ... ot%3B,
"digest": "擦亮雙眼,遠離謠言。",
"fileid": 505283695,
"is_multi": 1,
"multi_app_msg_item_list": [
{
"author": "",
"content": "",
"content_url": "http://mp.weixin.qq.com/s%3F__ ... ot%3B,
"copyright_stat": 100,
"cover": "http://mmbiz.qpic.cn/mmbiz_png ... ot%3B,
"digest": "12月28日,廣州亞運城綜合體育館,內附購票入口~",
"fileid": 0,
"source_url": "http://wechat.show.wepiao.com/ ... ot%3B,
"title": "2017微信公開(kāi)課Pro版即將召開(kāi)"
},
...//循環(huán)被省略
],
"source_url": "",
"subtype": 9,
"title": "謠言熱榜 | 十一月朋友圈十大謠言"
},
"comm_msg_info": {
"content": "",
"datetime": 1480933315,
"fakeid": "3093134871",
"id": 1000000010,
"status": 2,
"type": 49 //類(lèi)型為49的時(shí)候是圖文消息
}
},
...//循環(huán)被省略
]
}
  對此json的簡(jiǎn)要分析(此處僅介紹一些重要信息,而其他信息則省略):
  
"list": [ //最外層的鍵名;只出現一次,所有內容都被它包含。
{//這個(gè)大闊號之內是一條多圖文或單圖文消息,通俗的說(shuō)就是一天的群發(fā)都在這里
"app_msg_ext_info":{//圖文消息的擴展信息
"content_url": "圖文消息的鏈接地址",
"cover": "封面圖片",
"digest": "??",
"is_multi": "是否多圖文,值為1和0",
"multi_app_msg_item_list": [//這里面包含的是從第二條開(kāi)始的圖文消息,如果is_multi=0,這里將為空
{
"content_url": "圖文消息的鏈接地址",
"cover": "封面圖片",
"digest": ""??"",
"source_url": "閱讀原文的地址",
"title": "子內容標題"
},
...//循環(huán)被省略
],
"source_url": "閱讀原文的地址",
"title": "頭條標題"
},
"comm_msg_info":{//圖文消息的基本信息
"datetime": '發(fā)布時(shí)間,值為unix時(shí)間戳',
"type": 49 //類(lèi)型為49的時(shí)候是圖文消息
}
},
...//循環(huán)被省略
]
  這里要提到的另一件事是,如果您想獲得更長(cháng)的消息內容歷史記錄,則需要在電話(huà)或仿真器中下拉頁(yè)面。當您到達底部時(shí),微信會(huì )自動(dòng)讀取它。下一頁(yè)的內容。下一頁(yè)的鏈接地址和歷史消息頁(yè)的鏈接地址也是以getmasssendmsg開(kāi)頭的地址。但是內容只是json,沒(méi)有html。只需直接解析json。
  這時(shí),您可以使用上一篇文章文章中介紹的方法來(lái)使用anyproxy匹配msgList變量值并將其異步提交到服務(wù)器,然后使用php的json_decode將json解析為服務(wù)器。然后遍歷循環(huán)數組。我們可以獲取每篇文章的標題和鏈接地址文章。
  如果您只需要采集個(gè)官方帳戶(hù)的內容,則可以在每日批量發(fā)布后通過(guò)anyproxy獲得帶有key和pass_ticket的完整鏈接地址。然后自己制作一個(gè)程序,然后手動(dòng)將地址提交給您的程序。使用php等語(yǔ)言定期匹配msgList,然后解析json。這樣,無(wú)需修改anyproxy規則,也無(wú)需制作采集隊列和跳轉頁(yè)面。 查看全部

  微信公眾號文章采集的入口歷史消息頁(yè)信息獲取方法
  我解釋了如何在微信公眾號文章采集的進(jìn)入歷史消息頁(yè)面上獲取信息。有需要的朋友可以參考此內容。
  采集 WeChat文章和采集 網(wǎng)站具有相同的內容,都需要從列表頁(yè)面開(kāi)始。而微信文章的列表頁(yè)面是官方賬戶(hù)中的觀(guān)看歷史信息頁(yè)面?;ヂ?lián)網(wǎng)上的其他一些微信采集器現在使用搜狗進(jìn)行搜索。盡管采集的方法簡(jiǎn)單得多,但內容并不完整。因此,我們仍然必須來(lái)自最標準,最全面的官方帳戶(hù)歷史記錄信息頁(yè)面采集。
  由于微信的限制,我們可以復制到的鏈接不完整,并且無(wú)法在瀏覽器中打開(kāi)內容。因此,我們需要使用anyproxy通過(guò)上一篇文章文章中介紹的方法來(lái)獲取完整的微信官方帳戶(hù)歷史記錄消息頁(yè)面的鏈接地址。
 ?。?BBoEMdPDBtOun1F%2F9ENSz&wx_header = 1
  如前一篇文章文章所述,biz參數是官方帳戶(hù)的ID,而uin是用戶(hù)的ID。目前,uin是所有官方帳戶(hù)中唯一的帳戶(hù)。另外兩個(gè)重要參數key和pass_ticket是微信客戶(hù)端上的補充參數。
  因此,在該地址過(guò)期之前,我們可以通過(guò)在瀏覽器中查看原創(chuàng )文本來(lái)獲取歷史消息的文章列表。如果我們想自動(dòng)分析內容,我們還可以使用尚未過(guò)期的密鑰來(lái)編寫(xiě)程序。例如,使用pass_ticket的鏈接地址提交它,然后通過(guò)php程序獲取文章列表。
  最近,一個(gè)朋友告訴我,他的采集目標是一個(gè)單一的正式帳戶(hù),我認為沒(méi)有必要使用上一篇文章文章中編寫(xiě)的批處理采集方法。因此,讓我們看一下歷史新聞頁(yè)面中如何獲取文章列表。通過(guò)分析文章列表,我們可以獲得該官方帳戶(hù)的所有內容鏈接地址,然后采集內容就可以了。
  如果在anyproxy Web界面中正確配置了證書(shū),則可以顯示https的內容。 Web界面的地址為:8002,其中localhost可以替換為您自己的IP地址或域名。從列表中找到以getmasssendmsg開(kāi)頭的記錄,然后單擊它,該記錄的詳細信息將顯示在右側:
  
  紅色框是完整的鏈接地址。將微信公眾平臺的域名拼接起來(lái)后,可以在瀏覽器中打開(kāi)。
  然后將頁(yè)面下拉至html內容的末尾,我們可以看到j(luò )son變量是歷史新聞的文章列表:
  
  我們復制msgList的變量值并使用json格式化工具對其進(jìn)行分析,我們可以看到j(luò )son具有以下結構:
  
{
"list": [
{
"app_msg_ext_info": {
"author": "",
"content": "",
"content_url": "http://mp.weixin.qq.com/s%3F__ ... ot%3B,
"copyright_stat": 100,
"cover": "http://mmbiz.qpic.cn/mmbiz/Mof ... ot%3B,
"digest": "擦亮雙眼,遠離謠言。",
"fileid": 505283695,
"is_multi": 1,
"multi_app_msg_item_list": [
{
"author": "",
"content": "",
"content_url": "http://mp.weixin.qq.com/s%3F__ ... ot%3B,
"copyright_stat": 100,
"cover": "http://mmbiz.qpic.cn/mmbiz_png ... ot%3B,
"digest": "12月28日,廣州亞運城綜合體育館,內附購票入口~",
"fileid": 0,
"source_url": "http://wechat.show.wepiao.com/ ... ot%3B,
"title": "2017微信公開(kāi)課Pro版即將召開(kāi)"
},
...//循環(huán)被省略
],
"source_url": "",
"subtype": 9,
"title": "謠言熱榜 | 十一月朋友圈十大謠言"
},
"comm_msg_info": {
"content": "",
"datetime": 1480933315,
"fakeid": "3093134871",
"id": 1000000010,
"status": 2,
"type": 49 //類(lèi)型為49的時(shí)候是圖文消息
}
},
...//循環(huán)被省略
]
}
  對此json的簡(jiǎn)要分析(此處僅介紹一些重要信息,而其他信息則省略):
  
"list": [ //最外層的鍵名;只出現一次,所有內容都被它包含。
{//這個(gè)大闊號之內是一條多圖文或單圖文消息,通俗的說(shuō)就是一天的群發(fā)都在這里
"app_msg_ext_info":{//圖文消息的擴展信息
"content_url": "圖文消息的鏈接地址",
"cover": "封面圖片",
"digest": "??",
"is_multi": "是否多圖文,值為1和0",
"multi_app_msg_item_list": [//這里面包含的是從第二條開(kāi)始的圖文消息,如果is_multi=0,這里將為空
{
"content_url": "圖文消息的鏈接地址",
"cover": "封面圖片",
"digest": ""??"",
"source_url": "閱讀原文的地址",
"title": "子內容標題"
},
...//循環(huán)被省略
],
"source_url": "閱讀原文的地址",
"title": "頭條標題"
},
"comm_msg_info":{//圖文消息的基本信息
"datetime": '發(fā)布時(shí)間,值為unix時(shí)間戳',
"type": 49 //類(lèi)型為49的時(shí)候是圖文消息
}
},
...//循環(huán)被省略
]
  這里要提到的另一件事是,如果您想獲得更長(cháng)的消息內容歷史記錄,則需要在電話(huà)或仿真器中下拉頁(yè)面。當您到達底部時(shí),微信會(huì )自動(dòng)讀取它。下一頁(yè)的內容。下一頁(yè)的鏈接地址和歷史消息頁(yè)的鏈接地址也是以getmasssendmsg開(kāi)頭的地址。但是內容只是json,沒(méi)有html。只需直接解析json。
  這時(shí),您可以使用上一篇文章文章中介紹的方法來(lái)使用anyproxy匹配msgList變量值并將其異步提交到服務(wù)器,然后使用php的json_decode將json解析為服務(wù)器。然后遍歷循環(huán)數組。我們可以獲取每篇文章的標題和鏈接地址文章。
  如果您只需要采集個(gè)官方帳戶(hù)的內容,則可以在每日批量發(fā)布后通過(guò)anyproxy獲得帶有key和pass_ticket的完整鏈接地址。然后自己制作一個(gè)程序,然后手動(dòng)將地址提交給您的程序。使用php等語(yǔ)言定期匹配msgList,然后解析json。這樣,無(wú)需修改anyproxy規則,也無(wú)需制作采集隊列和跳轉頁(yè)面。

分享:Python 微信公眾號文章爬取的示例代碼

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

  分享:Python 微信公眾號文章爬取的示例代碼
  Python微信官方帳戶(hù)文章抓取的示例代碼
  更新時(shí)間:2020年11月30日08:31:45作者:少年白
  此文章主要介紹了Python微信公共帳戶(hù)文章抓取的示例代碼。本文將詳細介紹示例代碼,該示例代碼對于每個(gè)人的學(xué)習或工作都具有一定的參考學(xué)習價(jià)值。有需要的朋友讓我們與編輯一起學(xué)習。
  ?.?·
  我們通過(guò)微信公眾平臺網(wǎng)絡(luò )版圖形消息中的超鏈接獲得所需的界面
  
  
  從界面中,我們可以獲得相應的微信公眾號和所有相應的微信公眾號文章。
  二.界面分析
  訪(fǎng)問(wèn)微信官方帳戶(hù):
  參數:
  action = search_biz
  開(kāi)始= 0
  count = 5
  query =官方帳戶(hù)名
  token =每個(gè)帳戶(hù)對應的令牌值
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  因此在此界面中,我們只需要獲取令牌,查詢(xún)就是您需要搜索的官方帳戶(hù),并且可以在登錄后通過(guò)Web鏈接獲取令牌。
  
  獲取與官方帳戶(hù)對應的文章界面:
  參數:
  action = list_ex
  開(kāi)始= 0
  count = 5
  fakeid = MjM5NDAwMTA2MA ==
  type = 9
  query =
  token = 557131216
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  我們需要在該接口中獲取的值是上一步中的令牌和偽標識,并且可以在第一個(gè)接口中獲取該偽標識。這樣我們就可以獲得微信公眾號文章的數據。
  
  三.實(shí)施
  第一步:
  首先,我們需要模擬通過(guò)硒的登錄,然后獲取cookie和相應的令牌
  
def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義一個(gè)登錄方法,其中的參數是登錄帳戶(hù)和密碼,然后定義一個(gè)字典來(lái)存儲cookie值。通過(guò)模擬用戶(hù),輸入相應的帳戶(hù)密碼,然后單擊“登錄”,然后將出現一個(gè)掃描驗證碼,只需使用登錄微信進(jìn)行掃描即可。
  刷新當前網(wǎng)頁(yè)后,獲取當前的cookie和令牌,然后返回。
  第2步:
  1.請求獲得相應的官方帳戶(hù)界面,并獲取我們需要的偽造物
  
url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲得的令牌和cookie,然后通過(guò)request.get請求獲取返回的微信官方帳戶(hù)的json數據
  
lists = search_resp.json().get('list')[0]
  可以通過(guò)上面的代碼獲取相應的官方帳戶(hù)數據
  
fakeid = lists.get('fakeid')
  可以通過(guò)上面的代碼獲得相應的偽造物
  2.請求微信公眾號文章界面,并獲取了我們需要的文章數據
  
appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入了fakeid和token,然后調用request.get請求接口以獲取返回的json數據。
  我們已經(jīng)意識到抓取微信官方帳戶(hù)文章。
  四.摘要
  通過(guò)抓取微信公眾號文章,您需要掌握硒的使用和請求,以及如何獲取請求接口。但是需要注意的是,當我們循環(huán)獲得文章時(shí),必須設置延遲時(shí)間,否則帳戶(hù)將很容易被阻塞,并且無(wú)法獲得返回的數據。
  這是本文文章的結尾,有關(guān)Python微信公共帳戶(hù)文章抓取的示例代碼。有關(guān)Python微信公眾號文章爬網(wǎng)內容的更多相關(guān)信息,請搜索以前的腳本文章或繼續瀏覽相關(guān)的文章,希望您將來(lái)會(huì )支持腳本屋! 查看全部

  分享:Python 微信公眾號文章爬取的示例代碼
  Python微信官方帳戶(hù)文章抓取的示例代碼
  更新時(shí)間:2020年11月30日08:31:45作者:少年白
  此文章主要介紹了Python微信公共帳戶(hù)文章抓取的示例代碼。本文將詳細介紹示例代碼,該示例代碼對于每個(gè)人的學(xué)習或工作都具有一定的參考學(xué)習價(jià)值。有需要的朋友讓我們與編輯一起學(xué)習。
  ?.?·
  我們通過(guò)微信公眾平臺網(wǎng)絡(luò )版圖形消息中的超鏈接獲得所需的界面
  
  
  從界面中,我們可以獲得相應的微信公眾號和所有相應的微信公眾號文章。
  二.界面分析
  訪(fǎng)問(wèn)微信官方帳戶(hù):
  參數:
  action = search_biz
  開(kāi)始= 0
  count = 5
  query =官方帳戶(hù)名
  token =每個(gè)帳戶(hù)對應的令牌值
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  因此在此界面中,我們只需要獲取令牌,查詢(xún)就是您需要搜索的官方帳戶(hù),并且可以在登錄后通過(guò)Web鏈接獲取令牌。
  
  獲取與官方帳戶(hù)對應的文章界面:
  參數:
  action = list_ex
  開(kāi)始= 0
  count = 5
  fakeid = MjM5NDAwMTA2MA ==
  type = 9
  query =
  token = 557131216
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  我們需要在該接口中獲取的值是上一步中的令牌和偽標識,并且可以在第一個(gè)接口中獲取該偽標識。這樣我們就可以獲得微信公眾號文章的數據。
  
  三.實(shí)施
  第一步:
  首先,我們需要模擬通過(guò)硒的登錄,然后獲取cookie和相應的令牌
  
def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義一個(gè)登錄方法,其中的參數是登錄帳戶(hù)和密碼,然后定義一個(gè)字典來(lái)存儲cookie值。通過(guò)模擬用戶(hù),輸入相應的帳戶(hù)密碼,然后單擊“登錄”,然后將出現一個(gè)掃描驗證碼,只需使用登錄微信進(jìn)行掃描即可。
  刷新當前網(wǎng)頁(yè)后,獲取當前的cookie和令牌,然后返回。
  第2步:
  1.請求獲得相應的官方帳戶(hù)界面,并獲取我們需要的偽造物
  
url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲得的令牌和cookie,然后通過(guò)request.get請求獲取返回的微信官方帳戶(hù)的json數據
  
lists = search_resp.json().get('list')[0]
  可以通過(guò)上面的代碼獲取相應的官方帳戶(hù)數據
  
fakeid = lists.get('fakeid')
  可以通過(guò)上面的代碼獲得相應的偽造物
  2.請求微信公眾號文章界面,并獲取了我們需要的文章數據
  
appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入了fakeid和token,然后調用request.get請求接口以獲取返回的json數據。
  我們已經(jīng)意識到抓取微信官方帳戶(hù)文章。
  四.摘要
  通過(guò)抓取微信公眾號文章,您需要掌握硒的使用和請求,以及如何獲取請求接口。但是需要注意的是,當我們循環(huán)獲得文章時(shí),必須設置延遲時(shí)間,否則帳戶(hù)將很容易被阻塞,并且無(wú)法獲得返回的數據。
  這是本文文章的結尾,有關(guān)Python微信公共帳戶(hù)文章抓取的示例代碼。有關(guān)Python微信公眾號文章爬網(wǎng)內容的更多相關(guān)信息,請搜索以前的腳本文章或繼續瀏覽相關(guān)的文章,希望您將來(lái)會(huì )支持腳本屋!

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

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

  分享文章:Python爬蟲(chóng)實(shí)戰練習:爬取微信公眾號文章
  為了實(shí)現此采集器,我們需要使用以下工具
  此外,此采集器使用微信官方帳戶(hù)后臺編輯界面。原理是,當我們插入超鏈接時(shí),微信將調用特殊的API(請參見(jiàn)下圖)以獲取指定官方帳戶(hù)的文章列表。因此,我們還需要擁有一個(gè)官方帳戶(hù)。
  
  PS:如果您需要Python學(xué)習資料,可以加入下面的小組,找到免費的管理員來(lái)獲取
  
  您可以免費獲取源代碼,投影實(shí)戰視頻,PDF文件等
  
  正式開(kāi)始
  我們需要登錄到WeChat官方帳戶(hù),依次單擊“物料管理”,“新建圖形消息”,然后單擊上方的超鏈接。
  
  下一步,按F12鍵打開(kāi)Chrome的開(kāi)發(fā)人員工具,然后選擇“網(wǎng)絡(luò )”
  
  這時(shí),在上一個(gè)超鏈接界面中,單擊“選擇另一個(gè)官方帳戶(hù)”,然后輸入您需要抓取的官方帳戶(hù)(例如中國移動(dòng))
  
  這時(shí),以前的網(wǎng)絡(luò )將刷新一些鏈接,其中以“ appmsg”開(kāi)頭的內容是我們需要分析的
  
  我們解析請求的網(wǎng)址
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  分為三個(gè)部分
  通過(guò)不斷瀏覽下一頁(yè),我們發(fā)現每次都只會(huì )開(kāi)始更改,并且每次增加5(即count的值)。
  接下來(lái),我們使用Python獲取相同的資源,但是不可能通過(guò)直接運行以下代碼來(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ú)效。我們需要在請求中設置headers參數,并傳入Cookie和User-Agent以模擬登錄
  因為標題信息的內容每次都會(huì )改變,所以我將這些內容放在一個(gè)單獨的文件“ wechat.yaml”中,信息如下
  cookie: ua_id=wuzWM9FKE14...
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中,我們可以看到每個(gè)文章的標題(標題),摘要(摘要),鏈接(鏈接),推送時(shí)間(update_time)和封面地址(封面)。
  appmsgid是每個(gè)推文的唯一標識符,而aid是每個(gè)推文的唯一標識符。
  
  實(shí)際上,除了cookie之外,URL中的token參數還將用于限制采集器,因此上述代碼很可能輸出{'base_resp':{'ret':200040,'err_msg':'無(wú)效的csrf令牌'}}
  接下來(lái),我們編寫(xiě)一個(gè)循環(huán)以獲取所有文章 JSON并將其保存。
  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
  在上面的代碼中,我還將偽造品和令牌存儲在“ wechat.yaml”文件中。這是因為fakeid是每個(gè)正式帳戶(hù)唯一的標識符,并且令牌會(huì )經(jīng)常更改。此信息可以通過(guò)解析URL獲得,也可以從開(kāi)發(fā)人員工具中查看
  
  爬行一段時(shí)間后,您會(huì )遇到以下問(wèn)題
  {'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
  這時(shí),當您嘗試在官方帳戶(hù)的背景中插入超鏈接時(shí),會(huì )出現以下提示
  
  這是官方帳戶(hù)的流量限制,通常需要等待30-60分鐘才能繼續。為了完美地解決此問(wèn)題,您可能需要申請多個(gè)官方帳戶(hù),可能需要與微信官方帳戶(hù)登錄系統進(jìn)行對抗,或者可能需要建立代理池。
  但是我不需要工業(yè)級的采集器,我只想搜尋我自己的官方帳戶(hù)信息,因此請等待一個(gè)小時(shí),再次登錄到官方帳戶(hù),獲取Cookie和令牌并運行它。我不想為自己的利益挑戰別人的工作。
  最后,將結果保存為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。
  info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list)) 查看全部

  分享文章:Python爬蟲(chóng)實(shí)戰練習:爬取微信公眾號文章
  為了實(shí)現此采集器,我們需要使用以下工具
  此外,此采集器使用微信官方帳戶(hù)后臺編輯界面。原理是,當我們插入超鏈接時(shí),微信將調用特殊的API(請參見(jiàn)下圖)以獲取指定官方帳戶(hù)的文章列表。因此,我們還需要擁有一個(gè)官方帳戶(hù)。
  
  PS:如果您需要Python學(xué)習資料,可以加入下面的小組,找到免費的管理員來(lái)獲取
  
  您可以免費獲取源代碼,投影實(shí)戰視頻,PDF文件等
  
  正式開(kāi)始
  我們需要登錄到WeChat官方帳戶(hù),依次單擊“物料管理”,“新建圖形消息”,然后單擊上方的超鏈接。
  
  下一步,按F12鍵打開(kāi)Chrome的開(kāi)發(fā)人員工具,然后選擇“網(wǎng)絡(luò )”
  
  這時(shí),在上一個(gè)超鏈接界面中,單擊“選擇另一個(gè)官方帳戶(hù)”,然后輸入您需要抓取的官方帳戶(hù)(例如中國移動(dòng))
  
  這時(shí),以前的網(wǎng)絡(luò )將刷新一些鏈接,其中以“ appmsg”開(kāi)頭的內容是我們需要分析的
  
  我們解析請求的網(wǎng)址
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  分為三個(gè)部分
  通過(guò)不斷瀏覽下一頁(yè),我們發(fā)現每次都只會(huì )開(kāi)始更改,并且每次增加5(即count的值)。
  接下來(lái),我們使用Python獲取相同的資源,但是不可能通過(guò)直接運行以下代碼來(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ú)效。我們需要在請求中設置headers參數,并傳入Cookie和User-Agent以模擬登錄
  因為標題信息的內容每次都會(huì )改變,所以我將這些內容放在一個(gè)單獨的文件“ wechat.yaml”中,信息如下
  cookie: ua_id=wuzWM9FKE14...
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中,我們可以看到每個(gè)文章的標題(標題),摘要(摘要),鏈接(鏈接),推送時(shí)間(update_time)和封面地址(封面)。
  appmsgid是每個(gè)推文的唯一標識符,而aid是每個(gè)推文的唯一標識符。
  
  實(shí)際上,除了cookie之外,URL中的token參數還將用于限制采集器,因此上述代碼很可能輸出{'base_resp':{'ret':200040,'err_msg':'無(wú)效的csrf令牌'}}
  接下來(lái),我們編寫(xiě)一個(gè)循環(huán)以獲取所有文章 JSON并將其保存。
  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
  在上面的代碼中,我還將偽造品和令牌存儲在“ wechat.yaml”文件中。這是因為fakeid是每個(gè)正式帳戶(hù)唯一的標識符,并且令牌會(huì )經(jīng)常更改。此信息可以通過(guò)解析URL獲得,也可以從開(kāi)發(fā)人員工具中查看
  
  爬行一段時(shí)間后,您會(huì )遇到以下問(wèn)題
  {'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
  這時(shí),當您嘗試在官方帳戶(hù)的背景中插入超鏈接時(shí),會(huì )出現以下提示
  
  這是官方帳戶(hù)的流量限制,通常需要等待30-60分鐘才能繼續。為了完美地解決此問(wèn)題,您可能需要申請多個(gè)官方帳戶(hù),可能需要與微信官方帳戶(hù)登錄系統進(jìn)行對抗,或者可能需要建立代理池。
  但是我不需要工業(yè)級的采集器,我只想搜尋我自己的官方帳戶(hù)信息,因此請等待一個(gè)小時(shí),再次登錄到官方帳戶(hù),獲取Cookie和令牌并運行它。我不想為自己的利益挑戰別人的工作。
  最后,將結果保存為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。
  info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list))

分享文章:如何使用python3抓取微信公眾號文章,了解一下?

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

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

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

解決方案:2.請求獲取微信公眾號文章接口,取到我們需要的文章數據

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

  2.請求獲取微信官方帳戶(hù)文章界面,并獲取我們需要的文章數據
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)絡(luò )版圖形消息中的超鏈接獲得所需的界面
  
  
  從界面中,我們可以獲得相應的微信公眾號和所有相應的微信公眾號文章。
  二.界面分析
  訪(fǎng)問(wèn)微信官方帳戶(hù):
  參數:
  action = search_biz
  開(kāi)始= 0
  count = 5
  query =官方帳戶(hù)名
  token =每個(gè)帳戶(hù)對應的令牌值
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  因此在此界面中,我們只需要獲取令牌,查詢(xún)就是您需要搜索的官方帳戶(hù),并且可以在登錄后通過(guò)Web鏈接獲取令牌。
  
  獲取與官方帳戶(hù)對應的文章界面:
  參數:
  action = list_ex
  開(kāi)始= 0
  count = 5
  fakeid = MjM5NDAwMTA2MA ==
  type = 9
  query =
  token = 557131216
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  我們需要在此接口中獲取的值是上一步中的令牌和假I(mǎi)D,并且可以在第一個(gè)接口中獲得此假I(mǎi)D。這樣我們就可以獲得微信公眾號文章的數據。
  
  三.要實(shí)現的第一步:
  首先,我們需要模擬通過(guò)硒的登錄,然后獲取cookie和相應的令牌
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義一個(gè)登錄方法,其中的參數是登錄帳戶(hù)和密碼,然后定義一個(gè)字典來(lái)存儲cookie值。通過(guò)模擬用戶(hù),輸入相應的帳戶(hù)密碼,然后單擊“登錄”,然后將出現一個(gè)掃描驗證碼,只需使用登錄微信進(jìn)行掃描即可。
  刷新當前網(wǎng)頁(yè)后,獲取當前的cookie和令牌,然后返回。
  第2步:1.請求相應的官方帳戶(hù)界面,并獲取我們需要的偽造物
   url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲得的令牌和cookie,然后通過(guò)request.get請求獲取返回的微信官方帳戶(hù)的json數據
  lists = search_resp.json().get('list')[0]
  可以通過(guò)上面的代碼獲取相應的官方帳戶(hù)數據
  fakeid = lists.get('fakeid')
  可以通過(guò)上面的代碼獲得相應的偽造物
  2.請求獲取微信官方帳戶(hù)文章界面,并獲取我們需要的文章數據
   appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入了fakeid和token,然后調用request.get請求接口以獲取返回的json數據。
  我們已經(jīng)實(shí)現了對微信官方帳戶(hù)文章的抓取。
  四.摘要
  通過(guò)抓取微信公眾號文章,您需要掌握硒的使用和請求,以及如何獲取請求接口。但是需要注意的是,當我們循環(huán)獲得文章時(shí),必須設置延遲時(shí)間,否則帳戶(hù)將很容易被阻塞,并且無(wú)法獲得返回的數據。
  完成代碼后臺私人消息編輯器01可以 查看全部

  2.請求獲取微信官方帳戶(hù)文章界面,并獲取我們需要的文章數據
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)絡(luò )版圖形消息中的超鏈接獲得所需的界面
  
  
  從界面中,我們可以獲得相應的微信公眾號和所有相應的微信公眾號文章。
  二.界面分析
  訪(fǎng)問(wèn)微信官方帳戶(hù):
  參數:
  action = search_biz
  開(kāi)始= 0
  count = 5
  query =官方帳戶(hù)名
  token =每個(gè)帳戶(hù)對應的令牌值
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  因此在此界面中,我們只需要獲取令牌,查詢(xún)就是您需要搜索的官方帳戶(hù),并且可以在登錄后通過(guò)Web鏈接獲取令牌。
  
  獲取與官方帳戶(hù)對應的文章界面:
  參數:
  action = list_ex
  開(kāi)始= 0
  count = 5
  fakeid = MjM5NDAwMTA2MA ==
  type = 9
  query =
  token = 557131216
  lang = zh_CN
  f = json
  ajax = 1
  請求方法:
  獲取
  我們需要在此接口中獲取的值是上一步中的令牌和假I(mǎi)D,并且可以在第一個(gè)接口中獲得此假I(mǎi)D。這樣我們就可以獲得微信公眾號文章的數據。
  
  三.要實(shí)現的第一步:
  首先,我們需要模擬通過(guò)硒的登錄,然后獲取cookie和相應的令牌
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義一個(gè)登錄方法,其中的參數是登錄帳戶(hù)和密碼,然后定義一個(gè)字典來(lái)存儲cookie值。通過(guò)模擬用戶(hù),輸入相應的帳戶(hù)密碼,然后單擊“登錄”,然后將出現一個(gè)掃描驗證碼,只需使用登錄微信進(jìn)行掃描即可。
  刷新當前網(wǎng)頁(yè)后,獲取當前的cookie和令牌,然后返回。
  第2步:1.請求相應的官方帳戶(hù)界面,并獲取我們需要的偽造物
   url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲得的令牌和cookie,然后通過(guò)request.get請求獲取返回的微信官方帳戶(hù)的json數據
  lists = search_resp.json().get('list')[0]
  可以通過(guò)上面的代碼獲取相應的官方帳戶(hù)數據
  fakeid = lists.get('fakeid')
  可以通過(guò)上面的代碼獲得相應的偽造物
  2.請求獲取微信官方帳戶(hù)文章界面,并獲取我們需要的文章數據
   appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入了fakeid和token,然后調用request.get請求接口以獲取返回的json數據。
  我們已經(jīng)實(shí)現了對微信官方帳戶(hù)文章的抓取。
  四.摘要
  通過(guò)抓取微信公眾號文章,您需要掌握硒的使用和請求,以及如何獲取請求接口。但是需要注意的是,當我們循環(huán)獲得文章時(shí),必須設置延遲時(shí)間,否則帳戶(hù)將很容易被阻塞,并且無(wú)法獲得返回的數據。
  完成代碼后臺私人消息編輯器01可以

橫空出世:基于PC端的爬取公眾號歷史文章

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

  基于PC文章爬行官方帳戶(hù)的歷史記錄
  前言
  許多處于微信后臺的消息尚未得到回復:看到它們后我無(wú)法回復。如有任何疑問(wèn),可以添加我的微信:菜單->與我聯(lián)系
  因為我最近需要官方帳戶(hù)的歷史文章信息,所以我嘗試對其進(jìn)行爬網(wǎng)。盡管目前可以對數據進(jìn)行爬網(wǎng),但是它還不能對很多自動(dòng)化進(jìn)行爬網(wǎng)。原因是參數鍵值對時(shí)間敏感(特定時(shí)間未驗證為20分鐘),并且我不知道如何生成它。
  文章歷史記錄列表爬網(wǎng)
  進(jìn)入搜狗微信的第一件事是搜狗微信,但搜狗微信只能看到前十篇文章文章,而我無(wú)法確定閱讀量和觀(guān)看次數。我試圖爬網(wǎng)手機包裝,發(fā)現沒(méi)有信息被捕獲。我知道原因:
  1、Android系統7.低于0的微信信任系統證書(shū)。
  2、Android系統7. 0或更高版本,微信7. 0版本,微信信任系統提供的證書(shū)。
  3、Android系統7. 0或更高版本,微信7. 0或更高版本,微信僅信任自己的證書(shū)。
  我也嘗試使用appium自動(dòng)進(jìn)行爬網(wǎng),我個(gè)人覺(jué)得有點(diǎn)麻煩。因此,嘗試從PC抓取請求。
  這次進(jìn)入主題,我使用Fiddler捕獲數據包。下載鏈接:
  Fiddler如何捕獲數據包將不在此處一一解釋。首先,首次安裝Fiddler時(shí),需要安裝證書(shū)以捕獲HTTPS請求。
  如何安裝?
  打開(kāi)Fiddler并從菜單欄中找到工具->選項->單擊HTTPS->單擊操作,將安裝證書(shū),配置如下:
  以我自己的官方帳戶(hù)為例:登錄PC上的微信,打開(kāi)Fiddler,按F12鍵開(kāi)始/停止抓包,進(jìn)入官方帳戶(hù)歷史記錄文章頁(yè),請參見(jiàn)Fiddler有很多請求,如圖所示下方:
  因為查看歷史記錄是為了跳轉到新頁(yè)面,所以您可以從正文中返回更多內容,并且通過(guò)Content-Type,您還可以知道返回的內容是css或html或js,因此您可以查看首先在html上,所以幾乎可以在上面顯示的紅色框中找到鏈接,單擊它,然后您可以從右側查看返回結果和參數:
  從右側的頁(yè)眉中,您可以看到請求鏈接,方法,參數等。如果要更清晰地查看參數,可以單擊WebForms進(jìn)行查看,其結果如上圖所示。這是重要參數的說(shuō)明:
  __ biz:微信官方帳號的唯一標識(同一官方帳號保持不變)
  uin:唯一的用戶(hù)標識(同一微信用戶(hù)保持不變)
  鍵:微信的內部算法對時(shí)間敏感,所以我不知道它是如何計算的。
  pass_ticket:有一個(gè)閱讀權限加密,該加密已更改(在我的實(shí)際爬網(wǎng)中,我發(fā)現它是不必要的,可以忽略)
  在這一點(diǎn)上,您實(shí)際上可以編寫(xiě)代碼來(lái)爬網(wǎng)第一頁(yè)的文章,但是返回的是html頁(yè),顯然解析該頁(yè)很麻煩。
  您可以嘗試向下滑動(dòng),加載下一頁(yè)數據,然后查看它是json還是html。如果是json,則很容易處理,如果仍然是html,則必須對其進(jìn)行一些解析。繼續往下走,您會(huì )發(fā)現:
  此請求是返回的文章列表,它是json數據,這對我們進(jìn)行解析非常方便。從參數中,我們發(fā)現有一個(gè)偏移量為10的參數,這顯然是頁(yè)面的偏移量。此請求為10,以加載第二頁(yè)的歷史記錄,將其果斷地修改為0,然后發(fā)送請求,并獲取第一頁(yè)的數據,則無(wú)需解析html頁(yè),再次分析參數,并找到許多參數。他們中許多人是無(wú)用的。最終參數為:
  action:getmsg(固定值,應表示獲取更多信息)
  上面已經(jīng)描述了__biz,uin和key的三個(gè)值,它們也是此處的必需參數。
  f:json(固定值,表示返回json數據)
  偏移量:頁(yè)面偏移量
  如果要獲取官方帳戶(hù)的歷史記錄列表,則這6個(gè)參數是必需的,并且不需要帶其他參數。如圖所示,讓我們分析請求標頭中的聽(tīng)眾:
  參數很多,我不知道應該帶哪些參數,不需要帶那些參數。最后,我只需要攜帶UA。最后編寫(xiě)一個(gè)腳本來(lái)嘗試獲取它:
  import requests
url = "鏈接:http://鏈接:mp.weixin鏈接:.qq.com/mp/profile_ext"
headers= {
&#x27;User-Agent&#x27;:&#x27;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&#x27;
}
param = {
&#x27;action&#x27;: &#x27;getmsg&#x27;,
&#x27;__biz&#x27;: &#x27;MzU0NDg3NDg0Ng==&#x27;,
&#x27;f&#x27;: &#x27;json&#x27;,
&#x27;offset&#x27;: 0,
&#x27;uin&#x27;: &#x27;MTY5OTE4Mzc5Nw==&#x27;,
&#x27;key&#x27;: &#x27;0295ce962daa06881b1fbddd606f47252d0273a7280069e55e1daa347620284614629cd08ef0413941d46dc737cf866bc3ed3012ec202ffa9379c2538035a662e9ffa3f84852a0299a6590811b17de96&#x27;
}
index_josn = requests.get(url, params=param, headers=headers)
print(index_josn.json())
print(index_josn.json().get(&#x27;general_msg_list&#x27;))
  獲取json對象中的general_msg_list,并獲取結果:
  獲取文章詳細信息
  我有上面的鏈接,只是請求解析html頁(yè)面。這里沒(méi)有更多說(shuō)明(可以在完整代碼中查看)。 查看全部

  基于PC文章爬行官方帳戶(hù)的歷史記錄
  前言
  許多處于微信后臺的消息尚未得到回復:看到它們后我無(wú)法回復。如有任何疑問(wèn),可以添加我的微信:菜單->與我聯(lián)系
  因為我最近需要官方帳戶(hù)的歷史文章信息,所以我嘗試對其進(jìn)行爬網(wǎng)。盡管目前可以對數據進(jìn)行爬網(wǎng),但是它還不能對很多自動(dòng)化進(jìn)行爬網(wǎng)。原因是參數鍵值對時(shí)間敏感(特定時(shí)間未驗證為20分鐘),并且我不知道如何生成它。
  文章歷史記錄列表爬網(wǎng)
  進(jìn)入搜狗微信的第一件事是搜狗微信,但搜狗微信只能看到前十篇文章文章,而我無(wú)法確定閱讀量和觀(guān)看次數。我試圖爬網(wǎng)手機包裝,發(fā)現沒(méi)有信息被捕獲。我知道原因:
  1、Android系統7.低于0的微信信任系統證書(shū)。
  2、Android系統7. 0或更高版本,微信7. 0版本,微信信任系統提供的證書(shū)。
  3、Android系統7. 0或更高版本,微信7. 0或更高版本,微信僅信任自己的證書(shū)。
  我也嘗試使用appium自動(dòng)進(jìn)行爬網(wǎng),我個(gè)人覺(jué)得有點(diǎn)麻煩。因此,嘗試從PC抓取請求。
  這次進(jìn)入主題,我使用Fiddler捕獲數據包。下載鏈接:
  Fiddler如何捕獲數據包將不在此處一一解釋。首先,首次安裝Fiddler時(shí),需要安裝證書(shū)以捕獲HTTPS請求。
  如何安裝?
  打開(kāi)Fiddler并從菜單欄中找到工具->選項->單擊HTTPS->單擊操作,將安裝證書(shū),配置如下:
  以我自己的官方帳戶(hù)為例:登錄PC上的微信,打開(kāi)Fiddler,按F12鍵開(kāi)始/停止抓包,進(jìn)入官方帳戶(hù)歷史記錄文章頁(yè),請參見(jiàn)Fiddler有很多請求,如圖所示下方:
  因為查看歷史記錄是為了跳轉到新頁(yè)面,所以您可以從正文中返回更多內容,并且通過(guò)Content-Type,您還可以知道返回的內容是css或html或js,因此您可以查看首先在html上,所以幾乎可以在上面顯示的紅色框中找到鏈接,單擊它,然后您可以從右側查看返回結果和參數:
  從右側的頁(yè)眉中,您可以看到請求鏈接,方法,參數等。如果要更清晰地查看參數,可以單擊WebForms進(jìn)行查看,其結果如上圖所示。這是重要參數的說(shuō)明:
  __ biz:微信官方帳號的唯一標識(同一官方帳號保持不變)
  uin:唯一的用戶(hù)標識(同一微信用戶(hù)保持不變)
  鍵:微信的內部算法對時(shí)間敏感,所以我不知道它是如何計算的。
  pass_ticket:有一個(gè)閱讀權限加密,該加密已更改(在我的實(shí)際爬網(wǎng)中,我發(fā)現它是不必要的,可以忽略)
  在這一點(diǎn)上,您實(shí)際上可以編寫(xiě)代碼來(lái)爬網(wǎng)第一頁(yè)的文章,但是返回的是html頁(yè),顯然解析該頁(yè)很麻煩。
  您可以嘗試向下滑動(dòng),加載下一頁(yè)數據,然后查看它是json還是html。如果是json,則很容易處理,如果仍然是html,則必須對其進(jìn)行一些解析。繼續往下走,您會(huì )發(fā)現:
  此請求是返回的文章列表,它是json數據,這對我們進(jìn)行解析非常方便。從參數中,我們發(fā)現有一個(gè)偏移量為10的參數,這顯然是頁(yè)面的偏移量。此請求為10,以加載第二頁(yè)的歷史記錄,將其果斷地修改為0,然后發(fā)送請求,并獲取第一頁(yè)的數據,則無(wú)需解析html頁(yè),再次分析參數,并找到許多參數。他們中許多人是無(wú)用的。最終參數為:
  action:getmsg(固定值,應表示獲取更多信息)
  上面已經(jīng)描述了__biz,uin和key的三個(gè)值,它們也是此處的必需參數。
  f:json(固定值,表示返回json數據)
  偏移量:頁(yè)面偏移量
  如果要獲取官方帳戶(hù)的歷史記錄列表,則這6個(gè)參數是必需的,并且不需要帶其他參數。如圖所示,讓我們分析請求標頭中的聽(tīng)眾:
  參數很多,我不知道應該帶哪些參數,不需要帶那些參數。最后,我只需要攜帶UA。最后編寫(xiě)一個(gè)腳本來(lái)嘗試獲取它:
  import requests
url = "鏈接:http://鏈接:mp.weixin鏈接:.qq.com/mp/profile_ext"
headers= {
&#x27;User-Agent&#x27;:&#x27;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&#x27;
}
param = {
&#x27;action&#x27;: &#x27;getmsg&#x27;,
&#x27;__biz&#x27;: &#x27;MzU0NDg3NDg0Ng==&#x27;,
&#x27;f&#x27;: &#x27;json&#x27;,
&#x27;offset&#x27;: 0,
&#x27;uin&#x27;: &#x27;MTY5OTE4Mzc5Nw==&#x27;,
&#x27;key&#x27;: &#x27;0295ce962daa06881b1fbddd606f47252d0273a7280069e55e1daa347620284614629cd08ef0413941d46dc737cf866bc3ed3012ec202ffa9379c2538035a662e9ffa3f84852a0299a6590811b17de96&#x27;
}
index_josn = requests.get(url, params=param, headers=headers)
print(index_josn.json())
print(index_josn.json().get(&#x27;general_msg_list&#x27;))
  獲取json對象中的general_msg_list,并獲取結果:
  獲取文章詳細信息
  我有上面的鏈接,只是請求解析html頁(yè)面。這里沒(méi)有更多說(shuō)明(可以在完整代碼中查看)。

分享:如何爬取微信公眾號的所有文章

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

  如何抓取所有文章微信官方帳戶(hù)
  準備階段
  為了實(shí)現此采集器,我們需要使用以下工具
  此外,此采集器使用微信官方帳戶(hù)后臺編輯界面。原理是,當我們插入超鏈接時(shí),微信將調用特殊的API(請參見(jiàn)下圖)以獲取指定官方帳戶(hù)的文章列表。因此,我們還需要擁有一個(gè)官方帳戶(hù)。
  
  fig1
  正式開(kāi)始
  我們需要登錄到WeChat官方帳戶(hù),依次單擊“物料管理”,“新建圖形消息”,然后單擊上方的超鏈接。
  
  fig2
  下一步,按F12鍵打開(kāi)Chrome的開(kāi)發(fā)者工具,然后選擇“網(wǎng)絡(luò )”
  
  fig3
  這時(shí),在上一個(gè)超鏈接界面中,單擊“選擇另一個(gè)官方帳戶(hù)”,然后輸入您要抓取的官方帳戶(hù)(例如,中國移動(dòng))
  
  fig4
  這時(shí),先前的網(wǎng)絡(luò )將刷新一些鏈接,其中以“ appmsg”開(kāi)頭的內容是我們需要分析的
  
  fig5
  我們解析請求的網(wǎng)址
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  分為三個(gè)部分
  通過(guò)不斷瀏覽下一頁(yè),我們發(fā)現每次僅開(kāi)始更改,并且每次增加5(即count的值)。
  接下來(lái),我們使用Python獲取相同的資源,但是直接運行以下代碼無(wú)法獲取資源
  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ú)效。我們需要在請求中設置headers參數,并傳入Cookie和User-Agent以模擬登錄
  因為標題信息的內容每次都會(huì )改變,所以我將這些內容放在一個(gè)單獨的文件“ wechat.yaml”中,信息如下
  cookie: ua_id=wuzWM9FKE14...
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中,我們可以看到每個(gè)文章的標題(標題),摘要(摘要),鏈接(鏈接),推送時(shí)間(update_time)和封面地址(封面)。
  appmsgid是每個(gè)推文的唯一標識符,而aid是每個(gè)推文的唯一標識符。
  
  fig6
  實(shí)際上,除了cookie外,URL中的token參數還將用于限制采集器,因此上述代碼的輸出可能為{'base_resp':{'ret':200040,'err_msg ':'無(wú)效的csrf令牌'}}
  接下來(lái),我們編寫(xiě)一個(gè)循環(huán)以獲取文章的所有JSON并保存。
  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
  在上面的代碼中,我還將偽造品和令牌存儲在“ wechat.yaml”文件中。這是因為fakeid是每個(gè)正式帳戶(hù)唯一的標識符,并且令牌會(huì )經(jīng)常更改。此信息可以通過(guò)解析URL獲得,也可以從開(kāi)發(fā)人員工具中查看
  
  fig7
  爬行一段時(shí)間后,您會(huì )遇到以下問(wèn)題
  {'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
  這時(shí),當您嘗試在官方帳戶(hù)的背景中插入超鏈接時(shí),會(huì )出現以下提示
  
  fig8
  這是官方帳戶(hù)的流量限制,通常需要等待30-60分鐘才能繼續。為了完美地解決此問(wèn)題,您可能需要申請多個(gè)官方帳戶(hù),您可能需要與微信官方帳戶(hù)登錄系統進(jìn)行對抗,或者您可能需要建立代理池。
  但是我不需要工業(yè)級的采集器,我只想搜尋我自己的官方帳戶(hù)信息,因此請等待一個(gè)小時(shí),再次登錄到官方帳戶(hù),獲取Cookie和令牌并運行它。我不想為自己的利益挑戰別人的工作。
  最后,將結果保存為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。
  info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list)) 查看全部

  如何抓取所有文章微信官方帳戶(hù)
  準備階段
  為了實(shí)現此采集器,我們需要使用以下工具
  此外,此采集器使用微信官方帳戶(hù)后臺編輯界面。原理是,當我們插入超鏈接時(shí),微信將調用特殊的API(請參見(jiàn)下圖)以獲取指定官方帳戶(hù)的文章列表。因此,我們還需要擁有一個(gè)官方帳戶(hù)。
  
  fig1
  正式開(kāi)始
  我們需要登錄到WeChat官方帳戶(hù),依次單擊“物料管理”,“新建圖形消息”,然后單擊上方的超鏈接。
  
  fig2
  下一步,按F12鍵打開(kāi)Chrome的開(kāi)發(fā)者工具,然后選擇“網(wǎng)絡(luò )”
  
  fig3
  這時(shí),在上一個(gè)超鏈接界面中,單擊“選擇另一個(gè)官方帳戶(hù)”,然后輸入您要抓取的官方帳戶(hù)(例如,中國移動(dòng))
  
  fig4
  這時(shí),先前的網(wǎng)絡(luò )將刷新一些鏈接,其中以“ appmsg”開(kāi)頭的內容是我們需要分析的
  
  fig5
  我們解析請求的網(wǎng)址
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  分為三個(gè)部分
  通過(guò)不斷瀏覽下一頁(yè),我們發(fā)現每次僅開(kāi)始更改,并且每次增加5(即count的值)。
  接下來(lái),我們使用Python獲取相同的資源,但是直接運行以下代碼無(wú)法獲取資源
  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ú)效。我們需要在請求中設置headers參數,并傳入Cookie和User-Agent以模擬登錄
  因為標題信息的內容每次都會(huì )改變,所以我將這些內容放在一個(gè)單獨的文件“ wechat.yaml”中,信息如下
  cookie: ua_id=wuzWM9FKE14...
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中,我們可以看到每個(gè)文章的標題(標題),摘要(摘要),鏈接(鏈接),推送時(shí)間(update_time)和封面地址(封面)。
  appmsgid是每個(gè)推文的唯一標識符,而aid是每個(gè)推文的唯一標識符。
  
  fig6
  實(shí)際上,除了cookie外,URL中的token參數還將用于限制采集器,因此上述代碼的輸出可能為{'base_resp':{'ret':200040,'err_msg ':'無(wú)效的csrf令牌'}}
  接下來(lái),我們編寫(xiě)一個(gè)循環(huán)以獲取文章的所有JSON并保存。
  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
  在上面的代碼中,我還將偽造品和令牌存儲在“ wechat.yaml”文件中。這是因為fakeid是每個(gè)正式帳戶(hù)唯一的標識符,并且令牌會(huì )經(jīng)常更改。此信息可以通過(guò)解析URL獲得,也可以從開(kāi)發(fā)人員工具中查看
  
  fig7
  爬行一段時(shí)間后,您會(huì )遇到以下問(wèn)題
  {'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
  這時(shí),當您嘗試在官方帳戶(hù)的背景中插入超鏈接時(shí),會(huì )出現以下提示
  
  fig8
  這是官方帳戶(hù)的流量限制,通常需要等待30-60分鐘才能繼續。為了完美地解決此問(wèn)題,您可能需要申請多個(gè)官方帳戶(hù),您可能需要與微信官方帳戶(hù)登錄系統進(jìn)行對抗,或者您可能需要建立代理池。
  但是我不需要工業(yè)級的采集器,我只想搜尋我自己的官方帳戶(hù)信息,因此請等待一個(gè)小時(shí),再次登錄到官方帳戶(hù),獲取Cookie和令牌并運行它。我不想為自己的利益挑戰別人的工作。
  最后,將結果保存為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。
  info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list))

分享文章:如何爬取微信公眾號的所有文章

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

  如何抓取所有文章微信官方帳戶(hù)
  準備階段
  為了實(shí)現此采集器,我們需要使用以下工具
  此外,此采集器使用微信官方帳戶(hù)后臺編輯界面。原理是,當我們插入超鏈接時(shí),微信將調用特殊的API(請參見(jiàn)下圖)以獲取指定官方帳戶(hù)的文章列表。因此,我們還需要擁有一個(gè)官方帳戶(hù)。
  
  fig1
  正式開(kāi)始
  我們需要登錄到WeChat官方帳戶(hù),依次單擊“物料管理”,“新建圖形消息”,然后單擊上方的超鏈接。
  
  fig2
  下一步,按F12鍵打開(kāi)Chrome的開(kāi)發(fā)者工具,然后選擇“網(wǎng)絡(luò )”
  
  fig3
  這時(shí),在上一個(gè)超鏈接界面中,單擊“選擇另一個(gè)官方帳戶(hù)”,然后輸入您要抓取的官方帳戶(hù)(例如,中國移動(dòng))
  
  fig4
  這時(shí),先前的網(wǎng)絡(luò )將刷新一些鏈接,其中以“ appmsg”開(kāi)頭的內容是我們需要分析的
  
  fig5
  我們解析請求的網(wǎng)址
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  分為三個(gè)部分
  通過(guò)不斷瀏覽下一頁(yè),我們發(fā)現每次僅開(kāi)始更改,并且每次增加5(即count的值)。
  接下來(lái),我們使用Python獲取相同的資源,但是直接運行以下代碼無(wú)法獲取資源
  import requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {&#39;base_resp&#39;: {&#39;ret&#39;: 200003, &#39;err_msg&#39;: &#39;invalid session&#39;}}
  之所以能夠在瀏覽器上獲取資源,是因為我們登錄了微信官方賬號后端。而且Python沒(méi)有我們的登錄信息,因此該請求無(wú)效。我們需要在請求中設置headers參數,并傳入Cookie和User-Agent以模擬登錄
  因為標題信息的內容每次都會(huì )改變,所以我將這些內容放在一個(gè)單獨的文件“ wechat.yaml”中,信息如下
  cookie: ua_id=wuzWM9FKE14...
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[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
requests.get(url, headers=headers, verify=False).json()
  在返回的JSON中,我們可以看到每個(gè)文章的標題(標題),摘要(摘要),鏈接(鏈接),推送時(shí)間(update_time)和封面地址(封面)。
  appmsgid是每個(gè)推文的唯一標識符,而aid是每個(gè)推文的唯一標識符。
  
  fig6
  實(shí)際上,除了cookie外,URL中的token參數還將用于限制采集器,因此上述代碼的輸出可能為{'base_resp':{'ret':200040,'err_msg ':'無(wú)效的csrf令牌'}}
  接下來(lái),我們編寫(xiě)一個(gè)循環(huán)以獲取文章的所有JSON并保存。
  import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
break

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

app_msg_list.append(resp.json())
# 翻頁(yè)
i += 1
  在上面的代碼中,我還將偽造品和令牌存儲在“ wechat.yaml”文件中。這是因為fakeid是每個(gè)正式帳戶(hù)唯一的標識符,并且令牌會(huì )經(jīng)常更改。此信息可以通過(guò)解析URL獲得,也可以從開(kāi)發(fā)人員工具中查看
  
  fig7
  爬行一段時(shí)間后,您會(huì )遇到以下問(wèn)題
  {&#39;base_resp&#39;: {&#39;err_msg&#39;: &#39;freq control&#39;, &#39;ret&#39;: 200013}}
  這時(shí),當您嘗試在官方帳戶(hù)的背景中插入超鏈接時(shí),會(huì )出現以下提示
  
  fig8
  這是官方帳戶(hù)的流量限制,通常需要等待30-60分鐘才能繼續。為了完美地解決此問(wèn)題,您可能需要申請多個(gè)官方帳戶(hù),您可能需要與微信官方帳戶(hù)登錄系統進(jìn)行對抗,或者您可能需要建立代理池。
  但是我不需要工業(yè)級的采集器,我只想搜尋我自己的官方帳戶(hù)信息,因此請等待一個(gè)小時(shí),再次登錄到官方帳戶(hù),獲取Cookie和令牌并運行它。我不想為自己的利益挑戰別人的工作。
  最后,將結果保存為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。
  info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list)) 查看全部

  如何抓取所有文章微信官方帳戶(hù)
  準備階段
  為了實(shí)現此采集器,我們需要使用以下工具
  此外,此采集器使用微信官方帳戶(hù)后臺編輯界面。原理是,當我們插入超鏈接時(shí),微信將調用特殊的API(請參見(jiàn)下圖)以獲取指定官方帳戶(hù)的文章列表。因此,我們還需要擁有一個(gè)官方帳戶(hù)。
  
  fig1
  正式開(kāi)始
  我們需要登錄到WeChat官方帳戶(hù),依次單擊“物料管理”,“新建圖形消息”,然后單擊上方的超鏈接。
  
  fig2
  下一步,按F12鍵打開(kāi)Chrome的開(kāi)發(fā)者工具,然后選擇“網(wǎng)絡(luò )”
  
  fig3
  這時(shí),在上一個(gè)超鏈接界面中,單擊“選擇另一個(gè)官方帳戶(hù)”,然后輸入您要抓取的官方帳戶(hù)(例如,中國移動(dòng))
  
  fig4
  這時(shí),先前的網(wǎng)絡(luò )將刷新一些鏈接,其中以“ appmsg”開(kāi)頭的內容是我們需要分析的
  
  fig5
  我們解析請求的網(wǎng)址
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  分為三個(gè)部分
  通過(guò)不斷瀏覽下一頁(yè),我們發(fā)現每次僅開(kāi)始更改,并且每次增加5(即count的值)。
  接下來(lái),我們使用Python獲取相同的資源,但是直接運行以下代碼無(wú)法獲取資源
  import requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {&#39;base_resp&#39;: {&#39;ret&#39;: 200003, &#39;err_msg&#39;: &#39;invalid session&#39;}}
  之所以能夠在瀏覽器上獲取資源,是因為我們登錄了微信官方賬號后端。而且Python沒(méi)有我們的登錄信息,因此該請求無(wú)效。我們需要在請求中設置headers參數,并傳入Cookie和User-Agent以模擬登錄
  因為標題信息的內容每次都會(huì )改變,所以我將這些內容放在一個(gè)單獨的文件“ wechat.yaml”中,信息如下
  cookie: ua_id=wuzWM9FKE14...
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[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
requests.get(url, headers=headers, verify=False).json()
  在返回的JSON中,我們可以看到每個(gè)文章的標題(標題),摘要(摘要),鏈接(鏈接),推送時(shí)間(update_time)和封面地址(封面)。
  appmsgid是每個(gè)推文的唯一標識符,而aid是每個(gè)推文的唯一標識符。
  
  fig6
  實(shí)際上,除了cookie外,URL中的token參數還將用于限制采集器,因此上述代碼的輸出可能為{'base_resp':{'ret':200040,'err_msg ':'無(wú)效的csrf令牌'}}
  接下來(lái),我們編寫(xiě)一個(gè)循環(huán)以獲取文章的所有JSON并保存。
  import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
break

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

app_msg_list.append(resp.json())
# 翻頁(yè)
i += 1
  在上面的代碼中,我還將偽造品和令牌存儲在“ wechat.yaml”文件中。這是因為fakeid是每個(gè)正式帳戶(hù)唯一的標識符,并且令牌會(huì )經(jīng)常更改。此信息可以通過(guò)解析URL獲得,也可以從開(kāi)發(fā)人員工具中查看
  
  fig7
  爬行一段時(shí)間后,您會(huì )遇到以下問(wèn)題
  {&#39;base_resp&#39;: {&#39;err_msg&#39;: &#39;freq control&#39;, &#39;ret&#39;: 200013}}
  這時(shí),當您嘗試在官方帳戶(hù)的背景中插入超鏈接時(shí),會(huì )出現以下提示
  
  fig8
  這是官方帳戶(hù)的流量限制,通常需要等待30-60分鐘才能繼續。為了完美地解決此問(wèn)題,您可能需要申請多個(gè)官方帳戶(hù),您可能需要與微信官方帳戶(hù)登錄系統進(jìn)行對抗,或者您可能需要建立代理池。
  但是我不需要工業(yè)級的采集器,我只想搜尋我自己的官方帳戶(hù)信息,因此請等待一個(gè)小時(shí),再次登錄到官方帳戶(hù),獲取Cookie和令牌并運行它。我不想為自己的利益挑戰別人的工作。
  最后,將結果保存為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。
  info_list = []
for msg in app_msg_list:
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list))

意外:采集亂七八糟記錄下

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

  采集亂七八糟的記錄
  最近正在做采集條新聞,只需對其進(jìn)行記錄
  微信公眾號采集
  使用了PHP QueryList庫,并且可以很好地安裝作曲家
  __ biz微信官方帳戶(hù)的唯一標識符,可以通過(guò)在PC上登錄微信并復制鏈接來(lái)查看
  場(chǎng)景= 124寫(xiě)死
  wxtokenkey = 777很難寫(xiě)
  wxuin = 1146460420當前微信登錄的ID
  用戶(hù)代理UA是必須的
  wap_sid2這是最重要的參數
  獲取cookie是由老板完成的。這里只是對所依賴(lài)的思想和軟件的簡(jiǎn)要介紹:按鈕向導,查找器
  服務(wù)器數據庫配置有官方帳戶(hù)數據,例如__biz參數
  在win系統上安裝按鈕向導。在PC版微信中,使用按鈕向導進(jìn)行個(gè)性化編程可自動(dòng)打開(kāi)官方帳戶(hù)頁(yè)面
  安裝fidder數據包捕獲工具,獲取微信歷史記錄頁(yè)面請求,然后將cookie同步到服務(wù)器數據庫
  可以對自定義程序編程:抓取cookie并同步到服務(wù)器
  按鈕向導可以自動(dòng)編程:獲取cookie的正式帳戶(hù)已過(guò)期,重新打開(kāi)歷史記錄頁(yè)面,以方便查找該cookie的食物
  服務(wù)器采集程序負責采集,將頁(yè)面解析到數據庫中,并發(fā)現cookie過(guò)期并更新與官方帳戶(hù)相對應的cookie的狀態(tài)
  ... item 一個(gè)公眾號好數據
QueryList::get($page, [
&#39;action&#39; => &#39;home&#39;,
&#39;__biz&#39; => $item[&#39;biz&#39;],
&#39;scene&#39; => 124,
], [
&#39;headers&#39; => [
&#39;Accept&#39; => &#39;text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3&#39;,
&#39;User-Agent&#39; => &#39;Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1&#39;,
//&#39;Cookie&#39;=>&#39;wxtokenkey=777; wxuin=1146460420; devicetype=iMacMacBookPro121OSXOSX10.12.6build(16G1114); version=12030c10; lang=zh_CN; wap_sid2=CISy1qIEElxZYXdfanZra01NRS1DTGo5RndaeWNBQjEyaDhZQ3BaRHc5LVREQ1NjMFpHT1lPWFdDajVlandhaU9RLTZmWE9KemIxU3U1Q2lXXzZOMFBfVjlueGhXZjBEQUFBfjDbz87qBTgNQJVO&#39;
//&#39;Cookie&#39;=>&#39;wxtokenkey=777; wxuin=1146460420; devicetype=iMacMacBookPro121OSXOSX10.12.6build(16G1114); version=12030c10; lang=zh_CN; wap_sid2=CISy1qIEEnBFQzkyUy1oZW5fWDNBMVFUY3NlUFBsZm51NGdUbFBvVDg1SG5iZXY0UWFjb29hT2VPWXF1U3FiN3A2M2RLWktWVXFReWg5OHhjME1uUVRRa1JvNnJoeGttRHRDc3poWU9nc19sTy1Wek1uZi1Bd0FBMLPAz+oFOA1AlU4=&#39;
&#39;Cookie&#39; => $item[&#39;cookie&#39;],
],
]);
  列表數據的解析非常簡(jiǎn)單。頁(yè)面數據是輸出到html的json數據,只需處理匹配即可獲得數據列表。 查看全部

  采集亂七八糟的記錄
  最近正在做采集條新聞,只需對其進(jìn)行記錄
  微信公眾號采集
  使用了PHP QueryList庫,并且可以很好地安裝作曲家
  __ biz微信官方帳戶(hù)的唯一標識符,可以通過(guò)在PC上登錄微信并復制鏈接來(lái)查看
  場(chǎng)景= 124寫(xiě)死
  wxtokenkey = 777很難寫(xiě)
  wxuin = 1146460420當前微信登錄的ID
  用戶(hù)代理UA是必須的
  wap_sid2這是最重要的參數
  獲取cookie是由老板完成的。這里只是對所依賴(lài)的思想和軟件的簡(jiǎn)要介紹:按鈕向導,查找器
  服務(wù)器數據庫配置有官方帳戶(hù)數據,例如__biz參數
  在win系統上安裝按鈕向導。在PC版微信中,使用按鈕向導進(jìn)行個(gè)性化編程可自動(dòng)打開(kāi)官方帳戶(hù)頁(yè)面
  安裝fidder數據包捕獲工具,獲取微信歷史記錄頁(yè)面請求,然后將cookie同步到服務(wù)器數據庫
  可以對自定義程序編程:抓取cookie并同步到服務(wù)器
  按鈕向導可以自動(dòng)編程:獲取cookie的正式帳戶(hù)已過(guò)期,重新打開(kāi)歷史記錄頁(yè)面,以方便查找該cookie的食物
  服務(wù)器采集程序負責采集,將頁(yè)面解析到數據庫中,并發(fā)現cookie過(guò)期并更新與官方帳戶(hù)相對應的cookie的狀態(tài)
  ... item 一個(gè)公眾號好數據
QueryList::get($page, [
&#39;action&#39; => &#39;home&#39;,
&#39;__biz&#39; => $item[&#39;biz&#39;],
&#39;scene&#39; => 124,
], [
&#39;headers&#39; => [
&#39;Accept&#39; => &#39;text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3&#39;,
&#39;User-Agent&#39; => &#39;Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1&#39;,
//&#39;Cookie&#39;=>&#39;wxtokenkey=777; wxuin=1146460420; devicetype=iMacMacBookPro121OSXOSX10.12.6build(16G1114); version=12030c10; lang=zh_CN; wap_sid2=CISy1qIEElxZYXdfanZra01NRS1DTGo5RndaeWNBQjEyaDhZQ3BaRHc5LVREQ1NjMFpHT1lPWFdDajVlandhaU9RLTZmWE9KemIxU3U1Q2lXXzZOMFBfVjlueGhXZjBEQUFBfjDbz87qBTgNQJVO&#39;
//&#39;Cookie&#39;=>&#39;wxtokenkey=777; wxuin=1146460420; devicetype=iMacMacBookPro121OSXOSX10.12.6build(16G1114); version=12030c10; lang=zh_CN; wap_sid2=CISy1qIEEnBFQzkyUy1oZW5fWDNBMVFUY3NlUFBsZm51NGdUbFBvVDg1SG5iZXY0UWFjb29hT2VPWXF1U3FiN3A2M2RLWktWVXFReWg5OHhjME1uUVRRa1JvNnJoeGttRHRDc3poWU9nc19sTy1Wek1uZi1Bd0FBMLPAz+oFOA1AlU4=&#39;
&#39;Cookie&#39; => $item[&#39;cookie&#39;],
],
]);
  列表數據的解析非常簡(jiǎn)單。頁(yè)面數據是輸出到html的json數據,只需處理匹配即可獲得數據列表。

總結:帶大家寫(xiě)一波微信公眾號的爬??!誰(shuí)說(shuō)微信爬不了的

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

  帶大家去寫(xiě)一波微信公眾號爬網(wǎng)!誰(shuí)說(shuō)微信無(wú)法攀登
  x5
  其他參數的含義可以根據經(jīng)驗和簡(jiǎn)單的測試來(lái)判斷:
  1.偏移
  控制翻頁(yè)的偏移參數
  2.個(gè)計數
  每頁(yè)文章的數量
  3.__ biz
  官方帳戶(hù)標識,不同的__biz對應于不同的官方帳戶(hù)
  4.pass_ticket
  它應該是微信登錄后返回的參數,
  去年我嘗試登錄微信網(wǎng)絡(luò )版本時(shí),在返回的參數中看到了它,
  但是現在微信網(wǎng)絡(luò )版本已被正式禁止T_T。
  5.appmsg_token
  它還應該是登錄微信后的標識參數,以及您閱讀的微信官方帳戶(hù)
  相關(guān),查看不同的微信公眾號時(shí)的值也不同。
  前三個(gè)變量參數很容易求解,但后兩個(gè)參數似乎更難。但是,在測試之后,我們可以發(fā)現pass_ticket實(shí)際上是一個(gè)可選參數,因此我們可以忽略它。而且appmsg_token的有效期至少為10個(gè)小時(shí),這段時(shí)間足以讓我們抓取目標官方帳戶(hù)的所有文章,因此只需直接將其復制,就無(wú)需浪費時(shí)間分析這些東西(您也應該知道您是否認為騰訊對白人賣(mài)淫(T_T)絕對不那么容易。編寫(xiě)一段代碼對其進(jìn)行簡(jiǎn)短測試:
  import requests
session = requests.Session()
session.headers.update(headers)
session.cookies.update(cookies)
profile_url = '前面抓包得到的請求地址'
biz = 'MzAwNTA5NTYxOA=='
pass_ticket = ''
appmsg_token = '1055_YAmuAw2QG7dM3aTwSVZVqgtRdct6ilAMTwlz7g'
params = {
'action': 'getmsg',
'__biz': biz,
'f': 'json',
'offset': '0',
'count': '10',
'is_ok': '1',
'scene': '123',
'uin': '777',
'key': '777',
'pass_ticket': pass_ticket,
'wxtoken': '',
'appmsg_token': appmsg_token,
'x5': '0'
}
res = session.get(profile_url, params=params, verify=False)
print(res.text)
  運行后,您會(huì )發(fā)現返回的數據如下:
  
  似乎沒(méi)有問(wèn)題。重新調整打包代碼以爬網(wǎng)正式帳戶(hù)的所有文章鏈接。具體來(lái)說(shuō),核心代碼實(shí)現如下:
  '''獲得所有文章的鏈接'''
def __getArticleLinks(self):
print('[INFO]: 正在獲取目標公眾號的所有文章鏈接...')
fp = open('links_tmp.json', 'w', encoding='utf-8')
article_infos = {}
params = {
'action': 'getmsg',
'__biz': self.cfg.biz,
'f': 'json',
'offset': '0',
'count': '10',
'is_ok': '1',
'scene': '123',
'uin': '777',
'key': '777',
'pass_ticket': self.cfg.pass_ticket,
'wxtoken': '',
'appmsg_token': self.cfg.appmsg_token,
'x5': '0'
}
while True:
res = self.session.get(self.profile_url, params=params, verify=False)
res_json = res.json()
can_msg_continue = res_json.get('can_msg_continue', '')
next_offset = res_json.get('next_offset', 10)
general_msg_list = json.loads(res_json.get('general_msg_list', '{}'))
params.update({'offset': next_offset})
for item in general_msg_list['list']:
app_msg_ext_info = item.get('app_msg_ext_info', {})
if not app_msg_ext_info: continue
title = app_msg_ext_info.get('title', '')
content_url = app_msg_ext_info.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if app_msg_ext_info.get('is_multi', '') == 1:
for article in app_msg_ext_info.get('multi_app_msg_item_list', []):
title = article.get('title', '')
content_url = article.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if can_msg_continue != 1: break
else: time.sleep(1+random.random())
json.dump(article_infos, fp)
fp.close()
print('[INFO]: 已成功獲取目標公眾號的所有文章鏈接, 數量為%s...' % len(list(article_infos.keys())))
  運行后,我們可以獲得目標官方帳戶(hù)的所有文章鏈接:
  
  
  現在,我們只需要基于這些文章鏈接來(lái)抓取文章的內容。在這里,我們使用python的第三方軟件包pdfkit將每篇文章文章保存為pdf文件。具體來(lái)說(shuō),核心代碼實(shí)現如下:
  '''下載所有文章'''
def __downloadArticles(self):
print('[INFO]: 開(kāi)始爬取目標公眾號的所有文章內容...')
if not os.path.exists(self.savedir):
os.mkdir(self.savedir)
fp = open('links_tmp.json', 'r', encoding='utf-8')
article_infos = json.load(fp)
for key, value in article_infos.items():
print('[INFO]: 正在抓取文章 ——> %s' % key)
pdfkit.from_url(value, os.path.join(self.savedir, key+'.pdf'), configuration=pdfkit.configuration(wkhtmltopdf=self.cfg.wkhtmltopdf_path))
print('[INFO]: 已成功爬取目標公眾號的所有文章內容...')
  請注意,在使用pdfkit之前,您需要安裝wkhtmltox。如下圖所示:
  
  運行的效果可能是這樣的:
  
  
  所有源代碼
  根據您自己的數據包捕獲結果修改cfg.py文件:
  ## cfg.py
# 目標公眾號標識
biz = 'MzAwNTA5NTYxOA=='
# 微信登錄后的一些標識參數
pass_ticket = ''
appmsg_token = '1055_YAmuAw2QG7dM3aTwSVZVqgtRdct6ilAMTwlz7g~~'
# 安裝的wkhtmltopdf.exe文件路徑
wkhtmltopdf_path = r'D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'
12345678
  ## articlesSpider.py
import os
import time
import json
import pdfkit
import random
import requests
import warnings
warnings.filterwarnings('ignore')
'''微信公眾號文章爬取類(lèi)'''
class articlesSpider(object):
def __init__(self, cfg, **kwargs):
self.cfg = cfg
self.session = requests.Session()
self.__initialize()
'''外部調用'''
def run(self):
self.__getArticleLinks()
self.__downloadArticles()
'''獲得所有文章的鏈接'''
def __getArticleLinks(self):
print('[INFO]: 正在獲取目標公眾號的所有文章鏈接...')
fp = open('links_tmp.json', 'w', encoding='utf-8')
article_infos = {}
params = {
'action': 'getmsg',
'__biz': self.cfg.biz,
'f': 'json',
'offset': '0',
'count': '10',
'is_ok': '1',
'scene': '123',
'uin': '777',
'key': '777',
'pass_ticket': self.cfg.pass_ticket,
'wxtoken': '',
'appmsg_token': self.cfg.appmsg_token,
'x5': '0'
}
while True:
res = self.session.get(self.profile_url, params=params, verify=False)
res_json = res.json()
can_msg_continue = res_json.get('can_msg_continue', '')
next_offset = res_json.get('next_offset', 10)
general_msg_list = json.loads(res_json.get('general_msg_list', '{}'))
params.update({'offset': next_offset})
for item in general_msg_list['list']:
app_msg_ext_info = item.get('app_msg_ext_info', {})
if not app_msg_ext_info: continue
title = app_msg_ext_info.get('title', '')
content_url = app_msg_ext_info.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if app_msg_ext_info.get('is_multi', '') == 1:
for article in app_msg_ext_info.get('multi_app_msg_item_list', []):
title = article.get('title', '')
content_url = article.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if can_msg_continue != 1: break
else: time.sleep(1+random.random())
json.dump(article_infos, fp)
fp.close()
print('[INFO]: 已成功獲取目標公眾號的所有文章鏈接, 數量為%s...' % len(list(article_infos.keys())))
'''下載所有文章'''
def __downloadArticles(self):
print('[INFO]: 開(kāi)始爬取目標公眾號的所有文章內容...')
if not os.path.exists(self.savedir):
os.mkdir(self.savedir)
fp = open('links_tmp.json', 'r', encoding='utf-8')
article_infos = json.load(fp)
for key, value in article_infos.items():
print('[INFO]: 正在抓取文章 ——> %s' % key)
key = key.replace('\\', '').replace('/', '').replace(':', '').replace(':', '') \
.replace('*', '').replace('?', '').replace('?', '').replace('“', '') \
.replace('"', '').replace('', '').replace('|', '_')
pdfkit.from_url(value, os.path.join(self.savedir, key+'.pdf'), configuration=pdfkit.configuration(wkhtmltopdf=self.cfg.wkhtmltopdf_path))
print('[INFO]: 已成功爬取目標公眾號的所有文章內容...')
'''類(lèi)初始化'''
def __initialize(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1295.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat'
}
self.cookies = {
'wxuin': '913366226',
'devicetype': 'iPhoneiOS13.3.1',
'version': '17000c27',
'lang': 'zh_CN',
'pass_ticket': self.cfg.pass_ticket,
'wap_sid2': 'CNK5w7MDElxvQU1fdWNuU05qNV9lb2t3cEkzNk12ZHBsNmdXX3FETlplNUVTNzVfRmwyUUtKZzN4QkxJRUZIYkMtMkZ1SDU5S0FWQmtSNk9mTTQ1Q1NDOXpUYnJQaDhFQUFBfjDX5LD0BTgNQJVO'
}
self.profile_url = 'https://mp.weixin.qq.com/mp/profile_ext'
self.savedir = 'articles'
self.session.headers.update(self.headers)
self.session.cookies.update(self.cookies)
'''run'''
if __name__ == '__main__':
import cfg
spider = articlesSpider(cfg)
spider.run()
  要簡(jiǎn)單。如果不能的話(huà),請將我添加到企鵝群組中,以接收視頻教程和源代碼。私人消息編輯器01 查看全部

  帶大家去寫(xiě)一波微信公眾號爬網(wǎng)!誰(shuí)說(shuō)微信無(wú)法攀登
  x5
  其他參數的含義可以根據經(jīng)驗和簡(jiǎn)單的測試來(lái)判斷:
  1.偏移
  控制翻頁(yè)的偏移參數
  2.個(gè)計數
  每頁(yè)文章的數量
  3.__ biz
  官方帳戶(hù)標識,不同的__biz對應于不同的官方帳戶(hù)
  4.pass_ticket
  它應該是微信登錄后返回的參數,
  去年我嘗試登錄微信網(wǎng)絡(luò )版本時(shí),在返回的參數中看到了它,
  但是現在微信網(wǎng)絡(luò )版本已被正式禁止T_T。
  5.appmsg_token
  它還應該是登錄微信后的標識參數,以及您閱讀的微信官方帳戶(hù)
  相關(guān),查看不同的微信公眾號時(shí)的值也不同。
  前三個(gè)變量參數很容易求解,但后兩個(gè)參數似乎更難。但是,在測試之后,我們可以發(fā)現pass_ticket實(shí)際上是一個(gè)可選參數,因此我們可以忽略它。而且appmsg_token的有效期至少為10個(gè)小時(shí),這段時(shí)間足以讓我們抓取目標官方帳戶(hù)的所有文章,因此只需直接將其復制,就無(wú)需浪費時(shí)間分析這些東西(您也應該知道您是否認為騰訊對白人賣(mài)淫(T_T)絕對不那么容易。編寫(xiě)一段代碼對其進(jìn)行簡(jiǎn)短測試:
  import requests
session = requests.Session()
session.headers.update(headers)
session.cookies.update(cookies)
profile_url = '前面抓包得到的請求地址'
biz = 'MzAwNTA5NTYxOA=='
pass_ticket = ''
appmsg_token = '1055_YAmuAw2QG7dM3aTwSVZVqgtRdct6ilAMTwlz7g'
params = {
'action': 'getmsg',
'__biz': biz,
'f': 'json',
'offset': '0',
'count': '10',
'is_ok': '1',
'scene': '123',
'uin': '777',
'key': '777',
'pass_ticket': pass_ticket,
'wxtoken': '',
'appmsg_token': appmsg_token,
'x5': '0'
}
res = session.get(profile_url, params=params, verify=False)
print(res.text)
  運行后,您會(huì )發(fā)現返回的數據如下:
  
  似乎沒(méi)有問(wèn)題。重新調整打包代碼以爬網(wǎng)正式帳戶(hù)的所有文章鏈接。具體來(lái)說(shuō),核心代碼實(shí)現如下:
  '''獲得所有文章的鏈接'''
def __getArticleLinks(self):
print('[INFO]: 正在獲取目標公眾號的所有文章鏈接...')
fp = open('links_tmp.json', 'w', encoding='utf-8')
article_infos = {}
params = {
'action': 'getmsg',
'__biz': self.cfg.biz,
'f': 'json',
'offset': '0',
'count': '10',
'is_ok': '1',
'scene': '123',
'uin': '777',
'key': '777',
'pass_ticket': self.cfg.pass_ticket,
'wxtoken': '',
'appmsg_token': self.cfg.appmsg_token,
'x5': '0'
}
while True:
res = self.session.get(self.profile_url, params=params, verify=False)
res_json = res.json()
can_msg_continue = res_json.get('can_msg_continue', '')
next_offset = res_json.get('next_offset', 10)
general_msg_list = json.loads(res_json.get('general_msg_list', '{}'))
params.update({'offset': next_offset})
for item in general_msg_list['list']:
app_msg_ext_info = item.get('app_msg_ext_info', {})
if not app_msg_ext_info: continue
title = app_msg_ext_info.get('title', '')
content_url = app_msg_ext_info.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if app_msg_ext_info.get('is_multi', '') == 1:
for article in app_msg_ext_info.get('multi_app_msg_item_list', []):
title = article.get('title', '')
content_url = article.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if can_msg_continue != 1: break
else: time.sleep(1+random.random())
json.dump(article_infos, fp)
fp.close()
print('[INFO]: 已成功獲取目標公眾號的所有文章鏈接, 數量為%s...' % len(list(article_infos.keys())))
  運行后,我們可以獲得目標官方帳戶(hù)的所有文章鏈接:
  
  
  現在,我們只需要基于這些文章鏈接來(lái)抓取文章的內容。在這里,我們使用python的第三方軟件包pdfkit將每篇文章文章保存為pdf文件。具體來(lái)說(shuō),核心代碼實(shí)現如下:
  '''下載所有文章'''
def __downloadArticles(self):
print('[INFO]: 開(kāi)始爬取目標公眾號的所有文章內容...')
if not os.path.exists(self.savedir):
os.mkdir(self.savedir)
fp = open('links_tmp.json', 'r', encoding='utf-8')
article_infos = json.load(fp)
for key, value in article_infos.items():
print('[INFO]: 正在抓取文章 ——> %s' % key)
pdfkit.from_url(value, os.path.join(self.savedir, key+'.pdf'), configuration=pdfkit.configuration(wkhtmltopdf=self.cfg.wkhtmltopdf_path))
print('[INFO]: 已成功爬取目標公眾號的所有文章內容...')
  請注意,在使用pdfkit之前,您需要安裝wkhtmltox。如下圖所示:
  
  運行的效果可能是這樣的:
  
  
  所有源代碼
  根據您自己的數據包捕獲結果修改cfg.py文件:
  ## cfg.py
# 目標公眾號標識
biz = 'MzAwNTA5NTYxOA=='
# 微信登錄后的一些標識參數
pass_ticket = ''
appmsg_token = '1055_YAmuAw2QG7dM3aTwSVZVqgtRdct6ilAMTwlz7g~~'
# 安裝的wkhtmltopdf.exe文件路徑
wkhtmltopdf_path = r'D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'
12345678
  ## articlesSpider.py
import os
import time
import json
import pdfkit
import random
import requests
import warnings
warnings.filterwarnings('ignore')
'''微信公眾號文章爬取類(lèi)'''
class articlesSpider(object):
def __init__(self, cfg, **kwargs):
self.cfg = cfg
self.session = requests.Session()
self.__initialize()
'''外部調用'''
def run(self):
self.__getArticleLinks()
self.__downloadArticles()
'''獲得所有文章的鏈接'''
def __getArticleLinks(self):
print('[INFO]: 正在獲取目標公眾號的所有文章鏈接...')
fp = open('links_tmp.json', 'w', encoding='utf-8')
article_infos = {}
params = {
'action': 'getmsg',
'__biz': self.cfg.biz,
'f': 'json',
'offset': '0',
'count': '10',
'is_ok': '1',
'scene': '123',
'uin': '777',
'key': '777',
'pass_ticket': self.cfg.pass_ticket,
'wxtoken': '',
'appmsg_token': self.cfg.appmsg_token,
'x5': '0'
}
while True:
res = self.session.get(self.profile_url, params=params, verify=False)
res_json = res.json()
can_msg_continue = res_json.get('can_msg_continue', '')
next_offset = res_json.get('next_offset', 10)
general_msg_list = json.loads(res_json.get('general_msg_list', '{}'))
params.update({'offset': next_offset})
for item in general_msg_list['list']:
app_msg_ext_info = item.get('app_msg_ext_info', {})
if not app_msg_ext_info: continue
title = app_msg_ext_info.get('title', '')
content_url = app_msg_ext_info.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if app_msg_ext_info.get('is_multi', '') == 1:
for article in app_msg_ext_info.get('multi_app_msg_item_list', []):
title = article.get('title', '')
content_url = article.get('content_url', '')
if title and content_url:
article_infos[title] = content_url
if can_msg_continue != 1: break
else: time.sleep(1+random.random())
json.dump(article_infos, fp)
fp.close()
print('[INFO]: 已成功獲取目標公眾號的所有文章鏈接, 數量為%s...' % len(list(article_infos.keys())))
'''下載所有文章'''
def __downloadArticles(self):
print('[INFO]: 開(kāi)始爬取目標公眾號的所有文章內容...')
if not os.path.exists(self.savedir):
os.mkdir(self.savedir)
fp = open('links_tmp.json', 'r', encoding='utf-8')
article_infos = json.load(fp)
for key, value in article_infos.items():
print('[INFO]: 正在抓取文章 ——> %s' % key)
key = key.replace('\\', '').replace('/', '').replace(':', '').replace(':', '') \
.replace('*', '').replace('?', '').replace('?', '').replace('“', '') \
.replace('"', '').replace('', '').replace('|', '_')
pdfkit.from_url(value, os.path.join(self.savedir, key+'.pdf'), configuration=pdfkit.configuration(wkhtmltopdf=self.cfg.wkhtmltopdf_path))
print('[INFO]: 已成功爬取目標公眾號的所有文章內容...')
'''類(lèi)初始化'''
def __initialize(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1295.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat'
}
self.cookies = {
'wxuin': '913366226',
'devicetype': 'iPhoneiOS13.3.1',
'version': '17000c27',
'lang': 'zh_CN',
'pass_ticket': self.cfg.pass_ticket,
'wap_sid2': 'CNK5w7MDElxvQU1fdWNuU05qNV9lb2t3cEkzNk12ZHBsNmdXX3FETlplNUVTNzVfRmwyUUtKZzN4QkxJRUZIYkMtMkZ1SDU5S0FWQmtSNk9mTTQ1Q1NDOXpUYnJQaDhFQUFBfjDX5LD0BTgNQJVO'
}
self.profile_url = 'https://mp.weixin.qq.com/mp/profile_ext'
self.savedir = 'articles'
self.session.headers.update(self.headers)
self.session.cookies.update(self.cookies)
'''run'''
if __name__ == '__main__':
import cfg
spider = articlesSpider(cfg)
spider.run()
  要簡(jiǎn)單。如果不能的話(huà),請將我添加到企鵝群組中,以接收視頻教程和源代碼。私人消息編輯器01

技巧干貨:超實(shí)用技巧:如何采集微信公眾號文章

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

  超實(shí)用技巧:如何采集微信公眾號文章
  當我們看到一個(gè)很好的官方帳戶(hù)文章時(shí),如果要將其重新打印到我們的官方帳戶(hù)中,我們將直接復制并粘貼全文。但是,盡管此方法很簡(jiǎn)單,但不是很實(shí)用。因為粘貼之后,我們會(huì )發(fā)現格式或樣式通常是錯誤的,并且更難修改。
  實(shí)際上,該方法已經(jīng)過(guò)時(shí)了?,F在,新媒體編輯經(jīng)常使用一些微信編輯器來(lái)幫助解決此問(wèn)題。今天,我將以當前主流的微信編輯器為例,向您展示如何從其他微信公共帳戶(hù)采集 文章到您的微信公共平臺。
  步驟1:首先在百度上搜索Little Ant Editor,點(diǎn)擊以輸入網(wǎng)址
  
  第2步:點(diǎn)擊采集,然后將采集的微信文章鏈接地址粘貼到“ 文章 URL”框中
  
  第3步:?jiǎn)螕簟?采集”,此時(shí)文章的所有內容已在微信編輯器中為采集,您可以編輯和修改文章。編輯后,可以單擊其旁邊的副本(相當于全文副本),然后將其粘貼到微信材質(zhì)編輯的文本中。
  
  ps:這里有兩種主要的方法來(lái)獲取微信文章鏈接:
  方法1:直接在手機上找到文章,然后單擊右上角的復制
  
  方法2:使用Little Ant Editor的微信營(yíng)銷(xiāo)工具在熱搜索圖片和文本中搜索材料,然后將所需的材料文章直接復制到上面的URL。
  
  ,
  
  怎么樣?您是否獲得了另一項技能(括號中的笑聲)。這只是Little Ant的微信編輯器中的一個(gè)小功能,它還收錄一些常用功能,例如微信圖形和視頻提取,微信超鏈接,微信短URL,微信一鍵跟隨頁(yè)面等。新媒體的數量編輯喜歡使用它的主要原因。 查看全部

  超實(shí)用技巧:如何采集微信公眾號文章
  當我們看到一個(gè)很好的官方帳戶(hù)文章時(shí),如果要將其重新打印到我們的官方帳戶(hù)中,我們將直接復制并粘貼全文。但是,盡管此方法很簡(jiǎn)單,但不是很實(shí)用。因為粘貼之后,我們會(huì )發(fā)現格式或樣式通常是錯誤的,并且更難修改。
  實(shí)際上,該方法已經(jīng)過(guò)時(shí)了?,F在,新媒體編輯經(jīng)常使用一些微信編輯器來(lái)幫助解決此問(wèn)題。今天,我將以當前主流的微信編輯器為例,向您展示如何從其他微信公共帳戶(hù)采集 文章到您的微信公共平臺。
  步驟1:首先在百度上搜索Little Ant Editor,點(diǎn)擊以輸入網(wǎng)址
  
  第2步:點(diǎn)擊采集,然后將采集的微信文章鏈接地址粘貼到“ 文章 URL”框中
  
  第3步:?jiǎn)螕簟?采集”,此時(shí)文章的所有內容已在微信編輯器中為采集,您可以編輯和修改文章。編輯后,可以單擊其旁邊的副本(相當于全文副本),然后將其粘貼到微信材質(zhì)編輯的文本中。
  
  ps:這里有兩種主要的方法來(lái)獲取微信文章鏈接:
  方法1:直接在手機上找到文章,然后單擊右上角的復制
  
  方法2:使用Little Ant Editor的微信營(yíng)銷(xiāo)工具在熱搜索圖片和文本中搜索材料,然后將所需的材料文章直接復制到上面的URL。
  
  ,
  
  怎么樣?您是否獲得了另一項技能(括號中的笑聲)。這只是Little Ant的微信編輯器中的一個(gè)小功能,它還收錄一些常用功能,例如微信圖形和視頻提取,微信超鏈接,微信短URL,微信一鍵跟隨頁(yè)面等。新媒體的數量編輯喜歡使用它的主要原因。

官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

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