Python之微信公众号自动化运营实践

初步想法:
1.抓取每日最新资讯,得到一个初步的文章列表及内容
2.利用AI工具重写去重,得到优化后的文章内容
3.通过自动化方法推送至公众号后台
4.审核修改后发送
重点在前3步,希望通过前3步减少前期内容准备工作,最后仅需确认即可发布。当然上面的方法仅适用于资讯类公众号,其他类型比如内容为王的公众号可能参考意义有限。

下面就开始吧!

首先第一步:抓取每日最新资讯

一、确定目标网站及爬虫规则

1.确定抓取的内容来源

1.1 主题是什么?
抓取的内容要与公众号主题切合
1.2 关键词是什么?
关键词是技术相关,比如:前端、后端、AI、互联网行业动态等。
1.3 网站是什么?
抓取的网站合法是前提!
爬取网站内容需要遵守相关法律和规定,并尊重网站的隐私政策和服务条款。在进行爬取之前,建议先查看网站的 robots.txt 文件,以了解网站是否允许爬取,并遵守网站的爬取规则

2.确定爬虫规则

示例一:IT之家:https://www.ithome.com/
(1)首先我们打开网站,打开控制台,刷新一下网页,可以看到网站采用的是服务端渲染(SSR:Server-Side Rendering)的方式

(2)接着我们查看一下网站的robots.txt文件,以了解网站是否允许爬取以及网站的爬取规则
在浏览器中输入 "https://www.ithome.com/robots.txt" 并访问该 URL

可以看到 /ithome、/keywords/、/search/、/comment/、/*?*(不允许爬虫访问带有问号(?)的URL)、/?*(不允许爬虫访问根路径下带有问号(?)的URL)、/html/zixun这些路径禁止爬取

(3)点击网页发现/list路径不在robots.txt禁止路径内,符合爬虫规则。最终确定爬取的路径:​​​​​​https://www.ithome.com/list/和要爬取的内容:滚动新闻部分


 二、爬取数据

技术栈:python 

1.爬取文章类型及标题

python简单入门,可以参考下这篇博文:https://blog.csdn.net/bookssea/article/details/107309591

参照上面博文,稍微修改下代码,我们可以得到滚动新闻区域的 新闻类型、文章标题和时间excel表格。

 代码如下:

# -*- codeing = utf-8 -*-
from bs4 import BeautifulSoup  # 网页解析,获取数据
import re  # 正则表达式,进行文字匹配`
import urllib.request, urllib.error  # 制定URL,获取网页数据
import xlwt  # 进行excel操作

findType = re.compile(r'\[(.*?)\]')
findTitle = re.compile(r'<a class="t".*target="_blank">(.*?)</a>', re.S)
findTime = re.compile(r'<i>(.*?)</i>')

def main():
    baseurl = "https://www.ithome.com/list/"  #要爬取的网页链接
    # 1.爬取网页
    datalist = getData(baseurl)
    savepath = "IT之家滚动新闻.xls"    #当前目录新建XLS,存储进去
    # 3.保存数据
    saveData(datalist,savepath)      


# 爬取网页
def getData(baseurl):
    datalist = []  #用来存储爬取的网页信息
    for i in range(0, 1):  # 调用获取页面信息的函数,1次
        html = askURL(baseurl)  # 保存获取到的网页源码
        # 2.逐一解析数据
        soup = BeautifulSoup(html, "html.parser")
        datel_ul = soup.find("ul", class_="datel")
        for item in datel_ul.find_all("li"):  # 查找符合要求的字符串
            data = []  # 保存所有信息
            item = str(item)
            type = re.findall(findType, item)[0]  # 通过正则表达式查找
            data.append(type)
            title = re.findall(findTitle, item)[0]
            data.append(title)
            time = re.findall(findTime, item)[0]
            data.append(time)
            datalist.append(data)

    return datalist


# 得到指定一个URL的网页内容
def askURL(url):
    head = {  # 模拟浏览器头部信息,向服务器发送消息
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122  Safari / 537.36"
    }
    # 用户代理,表示告诉服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)

    request = urllib.request.Request(url, headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode("utf-8")
    except urllib.error.URLError as e:
        if hasattr(e, "code"):
            print(e.code)
        if hasattr(e, "reason"):
            print(e.reason)
    return html

# 保存数据到表格
def saveData(datalist,savepath):
    book = xlwt.Workbook(encoding="utf-8",style_compression=0) #创建workbook对象
    sheet = book.add_sheet('IT之家滚动新闻', cell_overwrite_ok=True) #创建工作表
    col = ("类型","文章标题","时间")
    for i in range(0,3):
        sheet.write(0,i,col[i])  #列名
    for i in range(0,50):
        data = datalist[i]
        for j in range(0,3):
            sheet.write(i+1,j,data[j])  #数据
    book.save(savepath) #保存

if __name__ == "__main__":  # 当程序执行时
    # 调用函数
     main()

 目前只拿到了文章标题,这显然是不行的,我们还需要文章内容,并且单页数据有50条,并不是所有类型的文章都是我们所需要的,需要筛选出合适的文章。

2.获取文章详情

点击文章标题会跳转一个新的页面,新页面里包含了文章的内容详情,我们需要模拟用户的点击操作来获取文章详情,这里用selenium来模拟用户操作。

from selenium import webdriver
driver = webdriver.Edge()

# 获取详情数据
def getDetail(baseurl):
    detailList = []  
    driver.get(baseurl)
    for i in range(0,3):
        element = driver.find_element(By.XPATH,f"//li[{i+1}]/a[@class='t']")
        element.click()
        # 获取打开的多个窗口句柄
        windows = driver.window_handles
        # 切换到当前最新打开的窗口
        driver.switch_to.window(windows[-1])
        selenium_page = driver.page_source
        detailSoup = BeautifulSoup(selenium_page, 'html.parser')
        content = detailSoup.find("div", class_="post_content")
        detailList.append(content.get_text())
        driver.close()
        driver.switch_to.window(windows[0])
    driver.quit()
    return detailList

拿到详情数据后可以将数据写入excel表格中,这样我们就得到了所有想要的数据。表格内容如下:

3.筛选符合要求的数据

文章有很多类型(【游戏之家】、【IT资讯】、【智车之家】......),并不是所有类型的文章都是我们感兴趣的,这里我们只取类型是IT资讯、软件之家、科学探索、VR之家......的数据。

在获取类型时加一个筛选逻辑,修改类型的匹配规则,并且不符合类型的数据不加入数组中。

findType = re.compile(r'\[(IT资讯|软件之家|科学探索|VR之家|智能时代)\]')

def getData(baseurl):
    datalist = []  #用来存储爬取的网页信息
    for i in range(0, 1):  # 调用获取页面信息的函数,1次
        html = askURL(baseurl)  # 保存获取到的网页源码
        # 2.逐一解析数据
        soup = BeautifulSoup(html, "html.parser")
        datel_ul = soup.find("ul", class_="datel")
        for item in datel_ul.find_all("li"):  # 查找符合要求的字符串
            data = []  # 保存所有信息
            item = str(item)
            type_result = re.findall(findType, item)  # 通过正则表达式查找
            if not type_result:
                continue  # 如果 type_result 为空,则跳过当前迭代,进入下一次循环
            type = type_result[0]
            data.append(type)
            title = re.findall(findTitle, item)[0]
            data.append(title)
            time = re.findall(findTime, item)[0]
            data.append(time)
            href = re.findall(findHref, item)[0]
            data.append(href)
            datalist.append(data)
    return datalist

 同时在获取内容详情是也需要对应修改,只获取符合要求类型的内容详情。

// 将element的获取方式改为匹配详情链接
element = driver.find_element(By.XPATH,f'//a[@href="{datalist[i][3]}"]')

这样,我们就拿到符合要求的数据啦!


三、推送至公众号后台

1.获取access_token

调用上传至素材库接口前需先获取通用access_token,appid和secret可从微信公众号后台【设置与开发】-【基本配置】处获取,记得一定要把调用接口的IP地址加入白名单,并且等待10min后再本地调试,否则会报错40164拿不到access_token,代码如下:

import json
from urllib import parse, request
import time


## 此函数用于获取access_token,微信公众号开发文档:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html

# // 获取token
def get_wxCode_token():
    try:
        appid = ""
        secret = ""
        textmod = {"grant_type": "client_credential",
            "appid": appid,
            "secret": secret
        }
        textmod = parse.urlencode(textmod)
        header_dict = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'}
        url = 'https://api.weixin.qq.com/cgi-bin/token'
        req = request.Request(url='%s%s%s' % (url, '?', textmod), headers=header_dict)
        res = request.urlopen(req)
        res = res.read().decode(encoding='utf-8')
        res = json.loads(res)
        access_token = res["access_token"]
        print('access_token:',(access_token,time.time()))
        return (access_token,time.time())
    except Exception as e:
        print(e)
        return False


if __name__ == '__main__':
    # 获取access_token,公众号后台需  添加 你的ip地址 为白名单
    get_wxCode_token()

2.上传至草稿箱 

使用新建草稿接口,微信开发者文档:https://developers.weixin.qq.com/doc/offiaccount/Draft_Box/Add_draft.html

由于thumb_media_id(图文消息的封面图片素材id)是新建草稿接口的必传项,我们需要先得到一个thumb_media_id,这里使用新增其他类型永久素材接口:

接口调试工具调用接口新增一个图片素材 ,返回值可以拿到我们需要的media_id

最后,调用新建草稿接口,就可以把我们拿到的数据推送到推送到公众号后台了 。

def add_draft(access_token, title, content):
    url = 'https://api.weixin.qq.com/cgi-bin/draft/add?access_token={}'.format(access_token)
    data = {
    "articles": [
        {
            "title": title,
            "content": content,
            "thumb_media_id": ''
        }
    ]}
    headers = {'Content-Type': 'application/json'}
    requests.post(url, data=json.dumps(data, ensure_ascii=False).encode('utf-8'), headers=headers)

大功告成! 


总结 

  1. 确定目标网站和公众号:确定你要爬取信息的目标网站和微信公众号。确保目标网站允许爬取并遵守相关的爬虫规则。

  2. 选择合适的编程语言爬虫框架:选择一种适合你的编程语言,如Python,并选择一个方便的爬虫框架,如Scrapy或BeautifulSoup。

  3. 编写爬虫代码:使用选定的编程语言和爬虫框架编写代码。首先,通过发送HTTP请求获取目标网页的HTML内容。然后,使用HTML解析技术从HTML内容中提取出你感兴趣的信息,如标题、发布日期、链接等。

  4. 设计数据存储方案:确定如何存储爬取的信息。你可以选择将数据保存到本地文件、数据库或云存储等。

  5. 设置定时任务:使用定时任务工具,如crontab(Linux)或Windows任务计划程序(Windows),设置每天自动运行爬虫程序的时间。

  6. 处理反爬机制:一些网站可能会采取反爬机制,如验证码、IP封锁等。你可以使用代理IP池、设置请求头信息、延时请求等方法来绕过反爬机制。

  7. 监控和错误处理:设置适当的日志记录和错误处理机制,以便在爬虫运行过程中及时发现和处理错误,确保爬虫的稳定性和可靠性。

请注意,在实施爬虫之前,你应该确保你遵守相关的法律法规和网站的爬虫规定,以确保合法使用爬虫技术。此外,尊重网站的隐私政策和数据使用规定,避免过度爬取或滥用爬取到的信息。

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用Python开发微信公众号,常用的Python库包括itchat、wechatpy、wxpy等。这些库可以帮助开发者实现微信公众号的功能,例如自动回复、消息推送、菜单设置等。 其中,itchat是一个非常流行的Python库,提供了微信个人号和公众号的API,可以通过Python代码来实现微信的自动化操作。而wechatpy则是一个专门针对微信公众号Python库,支持高级接口和企业微信接口,可以方便地进行公众号开发。 wxpy则是一个基于itchat的Python库,可以快速地实现微信机器人的开发,具有良好的扩展性和定制性。通过wxpy,开发者可以轻松地实现微信自动回复、消息推送和群聊机器人等功能。 总之,使用Python开发微信公众号可以大大提高开发效率,使得开发者可以更加专注于业务逻辑的实现。 ### 回答2: Python 微信公众号是一个使用Python编程语言开发的微信服务平台。它提供了丰富的功能和工具,可以帮助开发者创建和管理自己的微信公众号。 首先,Python 微信公众号可以实现接收和发送消息的功能。开发者可以通过编写Python代码来处理用户发送的文本、图片、音频等消息,并根据需要进行相应的回复。这为开发者提供了与用户实时互动的机会,可以更好地满足用户的需求。 其次,Python 微信公众号还支持自定义菜单的创建和管理。开发者可以通过简单的配置文件或代码来创建自己的菜单,包括一级菜单和二级菜单。这样用户在关注公众号后,就可以通过菜单快速访问所需的功能,提高用户的使用体验。 此外,Python 微信公众号还可以实现素材管理的功能。开发者可以上传和管理素材,包括图文消息、图片、视频等,方便随时更新公众号的内容。通过这个功能,开发者可以灵活地运营公众号,提供更多有趣和有用的内容。 最后值得一提的是,Python 微信公众号还支持数据统计和分析功能。开发者可以获取公众号的用户数量、关注和取消关注的动态等信息,并可以通过分析工具进行数据分析,了解用户的兴趣和行为习惯,从而更好地为用户提供个性化的服务。 综上所述,Python 微信公众号是一个强大的工具,可以帮助开发者轻松创建和管理自己的微信公众号,提供更好的用户体验和优质的服务。无论是个人开发者还是企业,都可以通过Python 微信公众号实现自己的创业梦想或运营需求。 ### 回答3: Python 微信公众号是基于Python开发的一个平台,可以通过微信公众号进行各种与Python相关的操作和交流。在这个公众号中,用户可以学习Python语言的基础知识、进阶技巧以及实际应用。公众号会提供Python编程入门教程, 提供一些编程示例和案例,帮助用户更好地理解和掌握Python的使用。 公众号的功能还包括推送最新的Python技术热点和行业动态,让用户了解Python在各个领域的应用和发展趋势。同时,公众号还会分享一些Python编程的实践经验和技巧,帮助用户解决实际应用中遇到的问题。 此外,Python 微信公众号还会定期举办一些线上线下的活动,如Python编程比赛、技术分享会等,旨在促进Python开发者之间的交流和学习。 总体来说,Python微信公众号是一个面向Python开发者和爱好者的平台,通过这个公众号,用户可以获取到Python语言相关的最新资讯、学习资源和社区互动,提升自己的编程能力和技术水平。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值