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

举报
tsinghuazhuoqing 发表于 2021/12/27 00:12:33 2021/12/27
【摘要】 为什么要批量将微信推文转成CSDN博文? 在原来运维了三年的推文公众号TSINGHUAJOKING中, 总共包含了近一千篇原创推文。除了实时性很强的交互推文之外,还有大量的技术相关的推文。今天准备将原来...

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

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

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

所使用的PYTHON工具包

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

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

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

  
 
  • 1

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

 

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

soup = BeautifulSoup(html.text 'lxml')

  
 
  • 1

 
通过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)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

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

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

  
 
  • 1
  • 2
  • 3

具体处理方式可以参见后面完整的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()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13



自动转帖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
#============================================================


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/104136535

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。