querylist采集微信公眾號文章(谷歌瀏覽器微信公眾號申請門(mén)檻低,服務(wù)號需要營(yíng)業(yè)執照等)
優(yōu)采云 發(fā)布時(shí)間: 2021-11-02 06:05querylist采集微信公眾號文章(谷歌瀏覽器微信公眾號申請門(mén)檻低,服務(wù)號需要營(yíng)業(yè)執照等)
一、網(wǎng)上的方法:
1.在訂閱賬號功能中使用查詢(xún)鏈接,(這個(gè)鏈接現在是嚴重的反亂碼措施,抓取幾十個(gè)頁(yè)面會(huì )屏蔽訂閱賬號,僅供參考)
更多詳情,請訪(fǎng)問(wèn)此鏈接:/4652.html
2.使用搜狗搜索微信搜索(此方法只能查看每個(gè)微信公眾號的前10條文章)
詳情請訪(fǎng)問(wèn)此鏈接:/qiqiyingse/article/details/70050113
3.先搶公眾號界面,進(jìn)入界面獲取所有文章連接
二、環(huán)境配置及材料準備
1.需要安裝python selenium模塊包,使用selenium中的webdriver驅動(dòng)瀏覽器獲取cookie,達到登錄的效果;
2. 使用webdriver功能需要安裝瀏覽器對應的驅動(dòng)插件。我在這里測試的是 Google Chrome。
3.微信公眾號申請(個(gè)人訂閱號申請門(mén)檻低,服務(wù)號需要營(yíng)業(yè)執照等)
4、。微信公眾號文章界面地址可以在微信公眾號后臺新建圖文消息,可以通過(guò)超鏈接功能獲??;
通過(guò)搜索關(guān)鍵字獲取所有相關(guān)公眾號信息,但我只取第一個(gè)進(jìn)行測試,其他感興趣的人也可以全部獲取
5.獲取要爬取的公眾號的fakeid
6.選擇要爬取的公眾號,獲取文章接口地址
從 selenium 導入 webdriver
導入時(shí)間
導入json
導入請求
重新導入
隨機導入
user=""
password="weikuan3344520"
gzlist=['熊貓']
#登錄微信公眾號,登錄后獲取cookie信息,保存在本地文本
def weChat_login():
#定義一個(gè)空字典來(lái)存儲cookies的內容
post={}
#使用網(wǎng)絡(luò )驅動(dòng)程序啟動(dòng)谷歌瀏覽器
print("啟動(dòng)瀏覽器,打開(kāi)微信公眾號登錄界面")
driver = webdriver.Chrome(executable_path='C:\chromedriver.exe')
#打開(kāi)微信公眾號登錄頁(yè)面
driver.get('/')
#等待 5 秒
time.sleep(5)
print("輸入微信公眾號賬號和密碼...")
#清除帳號框中的內容
driver.find_element_by_xpath("./*//input[@name='account'][@type='text']").clear()
#自動(dòng)填寫(xiě)登錄用戶(hù)名
driver.find_element_by_xpath("./*//input[@name='account'][@type='text']").send_keys(user)
#清空密碼框內容
driver.find_element_by_xpath("./*//input[@name='password'][@type='password']").clear()
#自動(dòng)填寫(xiě)登錄密碼
driver.find_element_by_xpath("./*//input[@name='password'][@type='password']").send_keys(password)
//這是重點(diǎn),最近改版后
#自動(dòng)輸入密碼后,需要手動(dòng)點(diǎn)擊記住我
print("請點(diǎn)擊登錄界面:記住您的賬號")
time.sleep(10)
#自動(dòng)點(diǎn)擊登錄按鈕登錄
driver.find_element_by_xpath("./*//a[@class='btn_login']").click()
#用手機掃描二維碼!
print("請用手機掃描二維碼登錄公眾號")
time.sleep(20)
print("登錄成功")
#重新加載公眾號登錄頁(yè)面,登錄后會(huì )顯示公眾號后臺首頁(yè),從返回的內容中獲取cookies信息
driver.get('/')
#獲取cookies
cookie_items = driver.get_cookies()
#獲取的cookies為列表形式,將cookies轉換為json形式存放在名為cookie的本地文本中
對于 cookie_items 中的 cookie_item:
post[cookie_item['name']] = cookie_item['value']
cookie_str = json.dumps(post)
with open('cookie.txt','w+', encoding='utf-8') as f:
f.write(cookie_str)
print("Cookies 信息已保存在本地")
#Crawl 微信公眾號文章并存入本地文本
def get_content(query):
#query 是要抓取的公眾號名稱(chēng)
#公眾號首頁(yè)
url =''
#設置標題
標題 = {
"主機":"",
"用戶(hù)代理": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/5< @3.0"
}
#讀取上一步獲取的cookie
with open('cookie.txt','r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
#登錄后微信公眾號首頁(yè)url改為:/cgi-bin/home?t=home/index&lang=zh_CN&token=1849751598,獲取token信息
response = requests.get(url=url, cookies=cookies)
token = re.findall(r'token=(\d+)', str(response.url))[0]
#搜索微信公眾號接口地址
search_url ='/cgi-bin/searchbiz?'
#搜索微信公眾號接口需要傳入的參數,共有三個(gè)變量:微信公眾號token、隨機數random、搜索微信公眾號名稱(chēng)
query_id = {
'action':'search_biz',
'token':令牌,
'lang':'zh_CN',
'f':'json',
'ajax': '1',
'random': random.random(),
'查詢(xún)':查詢(xún),
'開(kāi)始':'0',
'計數':'5'
}
#打開(kāi)搜索微信公眾號接口地址,需要傳入cookies、params、headers等相關(guān)參數信息
search_response = requests.get(search_url, cookies=cookies, headers=header, params=query_id)
#取搜索結果第一個(gè)公眾號
lists = search_response.json().get('list')[0]
#獲取這個(gè)公眾號的fakeid,然后抓取公眾號文章需要這個(gè)字段
fakeid = list.get('fakeid')
#微信公眾號文章界面地址
appmsg_url ='/cgi-bin/appmsg?'
#Search文章 需要傳入幾個(gè)參數:登錄公眾號token、爬取文章公眾號fakeid、隨機數random
query_id_data = {
'token':令牌,
'lang':'zh_CN',
'f':'json',
'ajax': '1',
'random': random.random(),
'action':'list_ex',
'begin': '0',#不同的頁(yè)面,這個(gè)參數改變,改變規則是每頁(yè)加5
'計數':'5',
'查詢(xún)':'',
'fakeid':fakeid,
'類(lèi)型':'9'
}
#打開(kāi)搜索微信公眾號文章列表頁(yè)
appmsg_response = requests.get(appmsg_url, cookies=cookies, headers=header, params=query_id_data)
#獲取文章總數
max_num = appmsg_response.json().get('app_msg_cnt')
#每頁(yè)至少有5個(gè)條目,獲取文章頁(yè)總數,爬取時(shí)需要頁(yè)面爬取
num = int(int(max_num) / 5)
#起始頁(yè)begin參數,后續每頁(yè)加5
開(kāi)始 = 0
當 num + 1> 0 :
query_id_data = {
'token':令牌,
'lang':'zh_CN',
'f':'json',
'ajax': '1',
'random': random.random(),
'action':'list_ex',
'begin':'{}'.format(str(begin)),
'計數':'5',
'查詢(xún)':'',
'fakeid':fakeid,
'類(lèi)型':'9'
}
print('翻頁(yè):--------------',begin)
#獲取每個(gè)頁(yè)面的標題和鏈接地址文章,并寫(xiě)入本地文本
query_fakeid_response = requests.get(appmsg_url, cookies=cookies, headers=header, params=query_id_data)
fakeid_list = query_fakeid_response.json().get('app_msg_list')
對于 fakeid_list 中的項目:
content_link=item.get('link')
content_title=item.get('title')
fileName=query+'.txt'
with open(fileName,'a',encoding='utf-8') as fh:
fh.write(content_title+":\n"+content_link+"\n")
數量 -= 1
begin = int(begin)
開(kāi)始+=5
time.sleep(2)
如果 __name__=='__main__':
試試:
#登錄微信公眾號,登錄后獲取cookie信息,保存在本地文本
weChat_login()
#登錄后,爬取微信公眾號文章微信公眾號后臺提供的界面文章
在 gzlist 中查詢(xún):
#Crawl 微信公眾號文章并存入本地文本






