如何优雅的将微信推文自动拷贝成CSDN博文?
为什么要批量将微信推文转成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
- 点赞
- 收藏
- 关注作者
评论(0)