最新采集⽅案详细介绍
省委办公厅⽬前⽐较有效的⼏种的采集⽅式:
1、通过web端素材管理接⼝的⽅式
2、通过appium从⼿机端
3、通过逆向⼯程暴⼒获取
4、通过第三⽅服务接⼝
5、搜狗接⼝(已凉)
个⼈及⼩团体对内容获取数量不多的情况下⼀般都会采⽤前两种相对简单便捷成本低的⽅式去获取内容,不差钱的团队肯定就买第三⽅服务了,靠提供采集接⼝的服务盈利的肯定就是逆向⼯程了.我介绍第⼀种⽐较简单适合⼩规模采集的⽅案
1、⾸先我们需要注册个属于⾃⼰的平台
2、注册成功后进⼊点击如图所⽰的素材管理
3、点击素材管理后点击如图所⽰的新建图⽂消息
4、点击新建图⽂消息后点击如图所⽰的超链接
5、点解超链接后点击如图所⽰的选择其他
6、这时候就可以输⼊我们想要获取内容的名字去搜索查询
7、我们通过抓包查看分析下
通过抓包也不难分析出请求参数的话就是我截图那样,稍后代码中将会呈现出来,然后通过请求response返回的内容也可以看到例如title、link、概要、更新时间等等的内容这⾥我们主要取title和url,我要说明⼀下我们通过这种⽅式获取的link是临时链接并不是⼿机端打开那样的永久链接但是也⽆妨我们只要通过访问临时链接把内容下载下来就可以了这个临时链接的有效时长其实也是很长时间的,如果我们想转换成永久链接我们可以通过⼿机端打开得到的就是永久链接地址了虾干
⼤体概述下代码流程
1、调⽤登录函数login_wechat通过webdrive扫码登录,这⾥不采⽤⾃动输⼊账号密码的⽅式登录是因为即便输⼊账号密码还是需要扫码确认
2、登录成功获取cookie信息保存本地⽂件
我很快乐的歌词3、调⽤采集函数get_content获取的cookie值并提取token
4、拼接好我们需要的请求参数后请求素材管理中接⼝中我们待采集信息
5、通过请求接⼝获取⽂章的title、link并实现翻页功能
6、拿到我们待采集⽂章的link后请求link地址下载⽂章内容
7、将title、link、内容对应保存csv⽂件
# -*- coding: utf-8 -*-
import re
import csv
import json
import time
import random
import requests
from selenium import webdriver
def login_wechat():
browser = webdriver.Chrome()
<("mp.weixin.qq/")
time.sleep(2)
print("请拿⼿机扫码⼆维码登录")
time.sleep(30)
print("登录成功")
# 获取cookies
cookie_items = _cookies()
post ={}
# 获取到的cookies是列表形式,将cookies转成json形式并存⼊本地名为cookie的⽂本中
for cookie_item in cookie_items:
post[cookie_item['name']]= cookie_item['value']
cookie_str = json.dumps(post)
with open('','w+', encoding='utf-8')as f:
f.write(cookie_str)
print("cookies信息已保存到本地")
browser.quit()
def get_content(ky):
# ky为要爬取的名称
url ='mp.weixin.qq'# 主页
header ={
"HOST":"mp.weixin.qq",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
}
# 读取上⼀步获取到的cookies
with open('','r', encoding='utf-8')as f:
cookie = f.read()
cookies = json.loads(cookie)
# 增加重试连接次数
session = requests.Session()
session.keep_alive =False
# 增加重试连接次数
session.adapters.DEFAULT_RETRIES =10
time.sleep(5)
# 登录之后的⾸页url变化为:mp.weixin.qq/cgi-bin/home?t=home/index&lang=zh_CN&token=657944522,从这⾥获取token信息 response = (url=url, cookies=cookies)
token = re.findall(r'token=(\d+)',str(response.url))[0]
time.sleep(2)
踏青诗句# 搜索的接⼝地址
search_url ='mp.weixin.qq/cgi-bin/searchbiz?'
# 搜索接⼝需要传⼊的参数,有三个变量:token、随机数random、搜索的名字
query_id ={
'action':'search_biz',
'token': token,
'lang':'zh_CN',
'f':'json',
'ajax':'1',
'random': random.random(),
'query': ky,
'begin':'0',
'count':'5'
}
# 打开搜索接⼝地址,需要传⼊相关参数信息如:cookies、params、headers
search_response = (search_url,cookies=cookies,headers=header,params=query_id)
# 取搜索结果中的第⼀个
lists = search_response.json().get('list')[0]
print(lists)
# 获取这个的fakeid,后⾯爬取⽂章需要此字段
fakeid = ('fakeid')
# ⽂章接⼝地址
appmsg_url ='mp.weixin.qq/cgi-bin/appmsg?'
# 搜索⽂章需要传⼊⼏个参数:登录的token、要爬取⽂章的fakeid、随机数random
# 搜索⽂章需要传⼊⼏个参数:登录的token、要爬取⽂章的fakeid、随机数random
query_id_data ={
'token': token,
'lang':'zh_CN',
'f':'json',
'ajax':'1',
'random': random.random(),
'action':'list_ex',
'begin':'0',# 不同页,此参数变化,变化规则为每页加5
宝我想你了涨的好难受啊说说'count':'5',
'query':'',
'fakeid': fakeid,
'type':'9'
}
# 打开搜索的⽂章列表页
appmsg_response = (appmsg_url,cookies=cookies,headers=header,params=query_id_data)
# 获取⽂章总数
max_num = appmsg_response.json().get('app_msg_cnt')
# 每页⾄少有5条,获取⽂章总的页数,爬取时需要分页爬
num =int(int(max_num)/5)
print(num)
# 起始页begin参数,往后每页加5
begin =0
seq =0
while num +1>0:
query_id_data ={
'token': token,
'lang':'zh_CN',
'f':'json',
'ajax':'1',
'random': random.random(),
'action':'list_ex',
'begin':'{}'.format(str(begin)),
'count':'5',
'query':'',
'fakeid': fakeid,
'type':'9'
}
print('正在翻页:--------------', begin/5)
time.sleep(8)
# 获取每⼀页⽂章的标题和链接地址,并写⼊本地⽂本中
query_fakeid_response = (appmsg_url,cookies=cookies,headers=header,params=query_id_data) fakeid_list = query_fakeid_response.json().get('app_msg_list')
if fakeid_list:
for item in fakeid_list:
content_link = ('link')
content_title = ('title')
fileName = ky +'.txt'
seq +=1
content_body = (content_link).text
info =[content_title, content_link, content_body]
save(ky,info)
begin =int(begin)
begin +=5
# csv head
def csv_head(ky):
ky = ky
head =['content_title','content_link','content_body',]
csvFile =open(fr'{ky}.csv','w', newline='', encoding='utf-8-sig')# 设置newline,否则两⾏之间会空⼀⾏
writer = csv.writer(csvFile)
writer.writerow(head)
csvFile.close()
# 存储csv
def save(ky,info):
ky = ky
csvFile =open(fr'{ky}.csv','a+', newline='', encoding='utf-8-sig')# 设置newline,否则两⾏之间会空⼀⾏ writer = csv.writer(csvFile)
writer.writerow(info)
csvFile.close()
if __name__ =='__main__':
ky ='肯德基'
login_wechat()
csv_head(ky)
get_content(ky)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论