querylist采集微信公众号文章(I.素材管理II.新建图文III.超链接IV.查找文章(图) )
优采云 发布时间: 2021-09-26 04:37querylist采集微信公众号文章(I.素材管理II.新建图文III.超链接IV.查找文章(图)
)
使用官方帐户官方帐户获取所需信息。首先,它应该搜索其官方账户中的文章>或公共号码,并分析数据包中的信息。该过程中最重要的几点是:
1.调用接口以查找文章@>
转到主页->;物料管理->;新图形->;超链接->;查找文章@>
一,。物资管理
二,。新文本
三,。超链接
四,。查找文章@>
2.获取所有相关的官方帐户信息
输入关键字并单击搜索后,相应的数据包将显示在右侧。在这里更容易找到。选择XHR后,将只显示一个唯一的数据包
一,。查看访问参数
选择它,选择标题栏并滑动到底部以查看一系列请求参数。更重要的参数是令牌、查询(搜索关键字)、开始(起始值)和计数(每页显示的值)。您还可以在标题中看到数据的真实URL,然后向他发送请求
二,。查看数据包内容
官方帐户是官方帐户
可以查看包中返回的所有内容(通常为JSON格式),并检查内容是否与页面上的内容相对应。在这里,我们可以在返回的数据列表中看到每个官方账户的信息,包括fakeid(访问官方账户后将使用文章@>)、公众号名称、公众号和总搜索量
三,。过程分析
通过模拟登录获得cookie后,我们访问主页以获取URL上的令牌ID,并通过向捕获的数据包上的真实URL发送请求和数据来获取相应的信息。在返回的信息中,我们通过解析总量来判断总量,更改“开始翻页”的值,最后将信息写入文件
class Public(metaclass=SingletonType):
def __init__(self, search_key, token, cookie):
self.search_key = search_key
self.url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
self.headers = {
'cookie': cookie,
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/74.0.3729.169 Safari/537.36'
}
self.data = {
'action': 'search_biz',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'random': '0.012103784566473319',
'query': self.search_key,
'count': '5'
}
def get_total(self):
self.data['begin'] = 0
content = requests.get(self.url, headers=self.headers, params=self.data).json()
total = content['total']
if total % 5:
return int(total / 5) + 1
else:
return int(total / 5)
def parse_public(self, num):
self.data['begin'] = num
content = requests.get(self.url, headers=self.headers, params=self.data).json()
return content
def get_data(self):
for num in range(0, self.get_total() + 1, 5):
for data in self.parse_public(num)['list']:
yield {
"name": data['nickname'],
"id": data['fakeid'],
'number': data['alias']
}
time.sleep(random.randint(1, 3))
def write_data(result, filename):
for data in result:
print(data)
with open(filename, 'a', encoding='utf-8') as f:
f.write(json.dumps(data, ensure_ascii=False) + '\n')
3.抓斗文章@>
在“官方帐号”下,选择相应的官方帐号并执行数据包捕获
可以查看新数据包,包括下的所有文章@>列表
I数据包捕获
二,。查看请求参数
显然,我们之前获得的伪造信息在这里使用。其他一切都和以前一样。查询也是一个搜索关键字。指定查询后,将返回相关的搜索词。如果未指定,则默认为空,并返回默认值
三,。查看数据内容
四,。过程分析
模拟登陆后获取cookie和token,fakeid可以自行获取,查阅上一部分获取官方账户信息的内容,然后将请求发送到数据包的真实URL,通过app解析返回的数据。msg_ucnt获取总量、更改开始值、翻页、获取文章@>标题、创建时间(时间戳需要转换为时间格式)、文章@>简要说明、文章@>链接等信息,最后执行写入文件操作
class Articls(metaclass=SingletonType):
def __init__(self, token, fakeid, cookie, search_key=""):
self.search_key = search_key
self.url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
self.headers = {
'cookie': cookie,
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/74.0.3729.169 Safari/537.36',
'host': 'mp.weixin.qq.com',
'Connection': 'keep-alive',
'Accept': 'application/json, text/javascript, */*; q=0.01'
}
self.data = {
"token": token,
"lang": "zh_CN",
"f": "json",
"ajax": "1",
"action": "list_ex",
"count": "5",
"query": self.search_key,
"fakeid": fakeid,
"type": "9",
}
def parse_articles(self, num):
self.data['begin'] = num
content = requests.get(self.url, headers=self.headers, params=self.data).json()
return content
def get_total(self):
self.data['begin'] = 0
content = requests.get(self.url, headers=self.headers, params=self.data).json()
total = content['app_msg_cnt']
if total % 5:
return int(total / 5) + 1
else:
return int(total / 5)
@staticmethod
def convert_2_time(stamp):
return time.strftime("%Y-%m-%d", time.localtime(stamp))
def get_data(self):
if self.get_total():
for num in range(0, self.get_total() + 1, 5):
for data in self.parse_articles(num)['app_msg_list']:
yield {
"title": data['title'],
"create_time": self.convert_2_time(data['create_time']),
# 摘要
'digest': data['digest'],
'link': data['link']
}
time.sleep(random.randint(1, 3))
else:
print("No search item")
exit()
def write_data(result, filename):
for data in result:
print(data)
with open(filename, 'a', encoding='utf-8') as f:
f.write(json.dumps(data, ensure_ascii=False) + '\n')
4.模拟登录
我们都知道具体的操作流程。现在我们缺少两样东西,饼干和代币。我们仔细观察主页。代币随处可见。HTML代码和URL随处可见。我们可以简单地从URL获取cookies。我们可以通过selenium登录后获取cookies
一,。Cookie获取
通过selenium调用Chrome浏览器以输入用户名和密码。登录后单击“睡眠”一段时间以扫描用户的代码。登录成功后,再次访问主页并获取要写入文件的cookie(是否写入文件取决于您的个人偏好,您可以返回)
def login(username, passwd):
cookies = {}
driver = webdriver.Chrome() # 谷歌驱动
driver.get('https://mp.weixin.qq.com/')
# 用户名
driver.find_element_by_xpath('//input[@name="account"]').clear()
driver.find_element_by_xpath('//input[@name="account"]').send_keys(username)
driver.find_element_by_xpath('//input[@name="password"]').clear()
driver.find_element_by_xpath('//input[@name="password"]').send_keys(passwd)
# 登录
driver.find_element_by_xpath('//a[@class="btn_login"]').click()
time.sleep(20)
# 获取cookie
driver.get('https://mp.weixin.qq.com/')
time.sleep(5)
cookie_items = driver.get_cookies()
for cookie_item in cookie_items:
cookies[cookie_item['name']] = cookie_item['value']
with open('cookie.txt', 'w') as f:
f.write(json.dumps(cookies))
driver.close()
二,。代币获取
读取文件解析cookie,启动主页请求,并在获得令牌后将其与cookie一起返回
def get_cookie_token():
url = 'https://mp.weixin.qq.com'
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/74.0.3729.169 Safari/537.36',
'host': 'mp.weixin.qq.com',
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
response = requests.get(url=url, cookies=cookies)
token = re.findall(r'token=(\d+)', str(response.url))[0]
result = []
for k, v in cookies.items():
result.append(k + '=' + v)
return "; ".join(result), token