如何优雅的将微信推文自动拷贝成CSDN博文?

为什么要批量将微信推文转成CSDN博文?

在原来运维了三年的推文公众号TSINGHUAJOKING中, 总共包含了近一千篇原创推文。除了实时性很强的交互推文之外,还有大量的技术相关的推文。今天准备将原来在自己的微信公众号里的相关技术推文转移到CSDN中的博文。
在这里插入图片描述
但是发现手工转换效率太低了。如果使用富文本方式编辑,就会看到一些图片格式对齐以及文本编辑比较麻烦。如果使用Markdown编辑器,更可气的连图片链接都无法一次性的粘贴。只能分别粘贴文字和图片。粘贴过来的GIF(动图)还都是静态的图片。

最终还是求助于万能的PYTHON的网页爬取功能,通过简短的编程,将原来微信推文的信息自动拷贝到MARKDOWN编辑器中形成推文。
 ~ 
 ~ 

所使用的PYTHON工具包

使用python中request, lxml.etree, bs4.BeautifulSoup这三个软件包。

使用requests获得微信推文网页所对应的HTML的文本信息。

html = requests.get('%s'%htmlstr)

上面代码中的htmlstr是通过python命令行参数串入微信推文的URL地址。

 

使用BeautifulSoup对html进行解析,其中解析工具使用了快速轻量级的lxml解析器。

soup = BeautifulSoup(html.text 'lxml')

 
通过Chrome浏览器中的工具,查看微信推文网页中的结构信息,分别寻找得到推文的题目、内容所在的结构。

推文的题目在head 段,通过如下代码获得TITLE字符串,并存储的量titlestring中。

    titlestring = ''
    content = soup.find('head')
    for c in content:
        if c.name == 'meta':
            if 'property' in c.attrs:
                if c.attrs['property'] == 'twitter:title':
                    titlestring = c.attrs['content']
                    printf(titlestring)

在这里插入图片描述
通过CHROME的右上角的三条横杠中菜单“更多工具”-“开发者”查找网页中各部分内容所在的HTML结构框架
 

推文的主要内容在 “rich_media_content” 中,对于其中的每一部分分别处理其中的普通的字符、被加重的字符、图片链接等信息。

    content = soup.find('div', class_='rich_media_content')
    if content != None:
        ## processing the content lines.

具体处理方式可以参见后面完整的PYTHON程序。

 
将相应的信息转换成Markdown格式,然后通过往CSDN的Markdown编辑器发送Windows剪切板粘贴命令,将处理之后的推文内容逐一粘贴到Markdown编辑器中;这部分可以是借助于TEASOFT软件提供的功能,这就使得编程大大简化了。

使用csdntitle='写文章-CSDN博客’来寻找Markdown编辑器所在的窗口。将需要粘贴的内容首先拷贝到Windows剪切板,然后在往csdn发送相应的粘贴快捷键:ctrl-v。具体代码如下:

#------------------------------------------------------------
csdntitle = '写文章-CSDN博客'
#------------------------------------------------------------
def csdnpasteclipboard():
    tspsendwindowkey(csdntitle, 'v', control=1)

def csdndelete():
    tspsendwindowkey(csdntitle, 'a', control=1)
    tspsendwindowkey(csdntitle, '%c'%M1_DELETE, vk=1)

def csdnpaste(str):
    clipboard.copy(str)
    csdnpasteclipboard()



自动转帖PYTHON程序

下面是程序的完整版本。

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TRANSFER.PY                  -- by Dr. ZhuoQing 2020-02-01
#
# Note:
#============================================================

from headm import *
import requests, json, time
from lxml import etree
from bs4 import BeautifulSoup


#------------------------------------------------------------
csdntitle = '写文章-CSDN博客'
#------------------------------------------------------------
def csdnpasteclipboard():
    tspsendwindowkey(csdntitle, 'v', control=1)

def csdndelete():
    tspsendwindowkey(csdntitle, 'a', control=1)
    tspsendwindowkey(csdntitle, '%c'%M1_DELETE, vk=1)

def csdnpaste(str):
    clipboard.copy(str)
    csdnpasteclipboard()


#============================================================

if __name__ == "__main__":

    csdndelete()
    #--------------------------------------------------------
    htmlstr = ''
    if len(sys.argv) <= 1:
        htmlstr = clipboard.paste()
    else: htmlstr = sys.argv[1]

    if len(htmlstr) == 0:
        printf('\aUsage: mp2csdn url')
        exit()

    #--------------------------------------------------------
    html = requests.get('%s'%htmlstr)


    soup = BeautifulSoup(html.text, 'lxml')

    #--------------------------------------------------------
    titlestring = ''
    content = soup.find('head')
    for c in content:
        if c.name == 'meta':
            if 'property' in c.attrs:
                if c.attrs['property'] == 'twitter:title':
                    titlestring = c.attrs['content']
                    printf(titlestring)



#    exit()
    #--------------------------------------------------------
    content = soup.find('div', class_='rich_media_content')


    if content != None:
        count = 0
        for c in content:
            try:
                for i in c:
                    if i.name == 'span':
                        insertstring = i.string

                        if i.attrs['style'].find('14px') >= 0:
                            insertstring = '^%s^'%i.string + '\r\n\r\n'

                        if i.attrs['style'] == 'font-size: 20px;' or\
                           i.attrs['style'] == 'font-size: 18px;':
                            insertstring = '**%s**'%i.string

                        csdnpaste(insertstring)
                        continue

                    if i.name == 'strong':
                        csdnpaste(i.string)

                    if i.name == None:
                        csdnpaste(i + '\r\n\r\n')


                    if i.name == 'img':
                        csdnpaste("![image](%s#pic_center)"%i.attrs['data-src'] + '\r\n\r\n')


            except:
                continue

            count = count + 1
    else:
        printf('Content is none.')


    #--------------------------------------------------------
    if len(titlestring) > 0: clipboard.copy(titlestring)

#    csdnpastetitle(titlestring)

    #--------------------------------------------------------

    printf('\a')


#------------------------------------------------------------
#        END OF FILE : TRANSFER.PY
#============================================================

微信模板HTML是一种用于制作微信的模板件,它使用HTML语言编写,并结合CSS和JavaScript来实现丰富的排版和交互效果。微信模板HTML通常包含了微信公众号特有的样式和格式要求,能够让用户在微信平台上发布富有吸引力的内容。 一个标准的微信模板HTML件包括了头部的配置信息,比如微信公众号的AppID和AppSecret等,然后是文章的标题、作者、发布时间等基本信息,接着是文章的正内容,可以包含字、图片、视频等丰富的展示效果,最后还有一些额外的功能模块,比如点赞、评论、分享等。 制作微信模板HTML需要对HTML、CSS和JavaScript有一定的了解和熟练掌握,同时还需要了解微信公众号平台的功能和样式需求。一般来说,可以通过代码编辑器如VS Code等工具来编写和修改模板件,然后在微信公众号后台进行发布和管理。 在使用微信模板HTML时,需要注意保持模板件的简洁和清晰,避免过多的嵌套和冗余代码,以提高页面加载速度和用户体验。同时,也要注意遵守微信公众平台的发布规定和法律法规,确保所发布的内容合法合规。 总之,微信模板HTML是一种用于制作微信内容的件模板,能够帮助用户快速高效地发布富有吸引力的,同时需要注意代码编写和内容合规性。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卓晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值