如何使⽤python3抓取⽂章,了解⼀下?通过公众平台的查⽂章接⼝,抓取我们需要的相关⽂章
1.⾸先我们先看⼀下,通过正常的登录⾃⼰的,然后⽤⽂章搜索功能,搜索⼀下我们需要查的相关⽂章。
打开mp.weixin.qq
登录,打开素材管理,点击新建分享图⽂
打开⼀个⽂章搜索接⼝
输⼊要搜索的内容后,可以搜索到相关⽂章的标题、出⾃哪个等信息。
2.实现思路
3.获取cookies,话不多说,贴个代码
#!/usr/bin/env python
# _*_ coding: utf-8 _*_
from selenium import webdriver
import time
import json
driver = webdriver.Chrome()    #需要⼀个⾕歌驱动,要⽀持你当前⾕歌浏览器的版
<('mp.weixin.qq/')    #发起get请求打开平台登录页⾯,然后输⼊账号密码登录
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秒后执⾏下⼀步操作,避免因为⽹络延迟,浏览器来不及加载出输⼊框,从⽽导致以下的操作失败
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()  #点击记住密码
time.sleep(3)    #原因和以上相同
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div/form/div[4]/a').click()  #点击登录
time.sleep(15)    #15秒内扫码登录
cookies = _cookies()  #获取扫码登录成功之后的cookies
print(cookies)      #打印出来看看,如果超时了还不扫码,获取到的cookies是不完整的,不能⽤来登录,所以第⼀次必须扫码登录以获取完整的cookies cookie = {}      #定义⼀个空字典,以便把获取的cookies以字典的形式写⼊
for items in cookies:            #把登录成功后获取的cookies提取name和value参数写⼊空字典cookie
('name')] = ('value')
with open('','w') as file:          #新建并打开⼀个⽂件
file.write(json.dumps(cookie))  #写⼊转成字符串的字典
driver.close()      #关闭浏览器
4.新建⼀个py⽂件,代码如下
#!/usr/bin/env python
# _*_ coding: utf-8 _*_
import requests
import json
import re      #正则模块
import random  #随机数模块
import time
#query = 'python'
#读取之前登录后保存的cookies
python怎么读取py文件with open('','r') as file:
cookie = ad()
url = 'mp.weixin.qq/'
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': 'mp.weixin.qq/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',
}
cookies = json.loads(cookie)    #加载之前获取的cookies
print(cookies)    #可以打印看看,和之前保存的cookies是⼀样的
response = (url, cookies = cookies)    #请求mp.weixin.qq/,传cookies参数,登录成功
token = re.findall(r'token=(\d+)',str(response.url))[0]    #登录成功后,这是的url⾥是包含token的,要把token参数拿出来,⽅便后⾯构造data数据包发起post请求
#print(token)
#random.random()返回0到1之间随机数
#构造data数据包发起post请求
data = {
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'random': random.random(),
'url': 'python',
'begin': '0',
'count': '3',
}
search_url = 'mp.weixin.qq/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)    #发起post请求,传cookies、data、headers参数
max_num = search_response.json().get('total')  #获取所有⽂章的条数
num = int(int(max_num/3)) #每页显⽰3篇⽂章,要翻total/3页,不过实际上我搜索了⼏个关键词,发现⽂章搜索的接⼝最多显⽰667页,其实后⾯还有页数
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('',mode='a',)                            #打开⼀个txt⽂档,把获取的内容写进去,mode='a'是追加的⽅式写⼊,不覆盖
print('⽂章标题:',('title'))  #获取⽂章标题
f.write('⽂章标题:')
f.('title'))
f.write("\n")
f.write('⽂章url:')
f.('url'))
f.write("\n")
f.write(':')
f.('nickname'))
f.write("\n")
f.write('作者:')
f.('author'))
f.write("\n")
f.write("\n")
f.write("\n")
print('⽂章url:',('url'))    #获取⽂章的url
print(':',('nickname'))  #获取出⾃哪个        print('⽂章作者:',('author'))  #获取⽂章作者
num -= 1
begin = int(begin)
begin += 3
time.sleep(3)
运⾏结果如下:
<⾥保存的内容如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。