Python实现快速保存微信公众号文章中的图片
作者:用余生去守护 发布时间:2021-02-18 23:03:25
标签:Python,保存,公众号,文章,图片
一、实现效果(以槿泉壁纸为例)
二、实现过程
1.新建一个link文本,将需要下载的文章链接依次保存;
2.新建一个.py文件,将下面的源码复制进去;
3.新建一个pic文件夹,用来保存图片;
4.运行即可;
三、源码
sound code
代码如下(示例):
import requests
from re import findall
from bs4 import BeautifulSoup
import time
import os
import sys
weixin_title=""
weixin_time=""
#获取微信公众号内容,保存标题和时间
def get_weixin_html(url):
global weixin_time,weixin_title
res=requests.get(url)
soup=BeautifulSoup(res.text,"html.parser")
#获取标题
temp=soup.find('h1')
weixin_title=temp.string.strip()
#使用正则表达式获取时间
# result=findall(r'[0-9]{4}-[0-9]{2}-[0-9]{2}.+:[0-9]{2}',res.text)
result=findall(r"(\d{4}-\d{1,2}-\d{1,2})",res.text)
weixin_time=result[0]
#获取正文html并修改
content=soup.find(id='js_content')
soup2=BeautifulSoup((str(content)),"html.parser")
soup2.div['style']='visibility: visible;'
html=str(soup2)
pattern=r'http[s]?:\/\/[a-z.A-Z_0-9\/\?=-_-]+'
result = findall(pattern, html)
#将data-src修改为src
for url in result:
html=html.replace('data-src="'+url+'"','src="'+url+'"')
return html
#上传图片至服务器
def download_pic(content):
pic_path= 'pic/' + str(path)+ '/'
if not os.path.exists(pic_path):
os.makedirs(pic_path)
#使用正则表达式查找所有需要下载的图片链接
pattern=r'http[s]?:\/\/[a-z.A-Z_0-9\/\?=-_-]+'
pic_list = findall(pattern, content)
for index, item in enumerate(pic_list,1):
count=1
flag=True
pic_url=str(item)
while flag and count<=10:
try:
data=requests.get(pic_url);
if pic_url.find('png')>0:
file_name = str(index)+'.png'
elif pic_url.find('gif')>0:
file_name=str(index)+'.gif'
else:
file_name=str(index)+'.jpg'
with open( pic_path + file_name,"wb") as f:
f.write(data.content)
#将图片链接替换为本地链接
content = content.replace(pic_url, pic_path + file_name)
flag = False
print('已下载第' + str(index) +'张图片.')
count += 1
time.sleep(1)
except:
count+=1
time.sleep(1)
if count>10:
print("下载出错:",pic_url)
return content
def get_link(dir):
link = []
with open(dir,'r') as file_to_read:
while True:
line = file_to_read.readline()
if not line:
break
line = line.strip('\n')
link.append(line)
return link
path = 'link.txt'
linklist = get_link(path)
print(linklist)
s = len(linklist)
if __name__ == "__main__":
#获取html
input_flag=True
while input_flag:
# for j in range(0,s):
# pic = str(j)
j = 1
for i in linklist:
weixin_url = i
path = j
j += 1
#weixin_url=input()
re=findall(r'http[s]?:\/\/mp.weixin.qq.com\/s\/[0-9a-zA-Z_]+',weixin_url)
if len(re)<=0:
print("链接有误,请重新输入!")
else:
input_flag=False
content=get_weixin_html(weixin_url)
content=download_pic(content)
#保存至本地
with open(weixin_title+'.txt','w+',encoding="utf-8") as f:
f.write(content)
with open(weixin_title+'.html','w+',encoding="utf-8") as f:
f.write(content)
print()
print("标题:《"+weixin_title+"》")
print("发布时间:"+weixin_time)
四、Python正则表达式匹配日期与时间
import re
from datetime import datetime
test_date = '小明的生日是2016-12-12 14:34,小张的生日是2016-12-21 11:34 .'
test_datetime = '小明的生日是2016-12-12 14:34,.小晴的生日是2016-12-21 11:34,好可爱的.'
# date
mat = re.search(r"(\d{4}-\d{1,2}-\d{1,2})",test_date)
print mat.groups()
# ('2016-12-12',)
print mat.group(0)
# 2016-12-12
date_all = re.findall(r"(\d{4}-\d{1,2}-\d{1,2})",test_date)
for item in date_all:
print item
# 2016-12-12
# 2016-12-21
# datetime
mat = re.search(r"(\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2})",test_datetime)
print mat.groups()
# ('2016-12-12 14:34',)
print mat.group(0)
# 2016-12-12 14:34
date_all = re.findall(r"(\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2})",test_datetime)
for item in date_all:
print item
# 2016-12-12 14:34
# 2016-12-21 11:34
## 有效时间
# 如这样的日期2016-12-35也可以匹配到.测试如下.
test_err_date = '如这样的日期2016-12-35也可以匹配到.测试如下.'
print re.search(r"(\d{4}-\d{1,2}-\d{1,2})",test_err_date).group(0)
# 2016-12-35
# 可以加个判断
def validate(date_text):
try:
if date_text != datetime.strptime(date_text, "%Y-%m-%d").strftime('%Y-%m-%d'):
raise ValueError
return True
except ValueError:
# raise ValueError("错误是日期格式或日期,格式是年-月-日")
return False
print validate(re.search(r"(\d{4}-\d{1,2}-\d{1,2})",test_err_date).group(0))
# false
# 其他格式匹配. 如2016-12-24与2016/12/24的日期格式.
date_reg_exp = re.compile('\d{4}[-/]\d{2}[-/]\d{2}')
test_str= """
平安夜圣诞节2016-12-24的日子与去年2015/12/24的是有不同哦.
"""
# 根据正则查找所有日期并返回
matches_list=date_reg_exp.findall(test_str)
# 列出并打印匹配的日期
for match in matches_list:
print match
# 2016-12-24
# 2015/12/24
来源:https://blog.csdn.net/qq_45365214/article/details/125405386
0
投稿
猜你喜欢
- 今天有朋友问到如下一则案例,ORA-01114,ORA-27067以及OSD-04026错误同时出现:*** ACTION NAME:()
- 上期回顾上一次的图像清晰度评价没有成功,主要的原因是那几张图像清晰度评价函数都实际都采用了梯度求解,不同的场景灰度的明暗不同,梯度可能会很大
- <?php //作者:遥远的期待 //QQ:15624575 //算法分析:1、必须是整数序列、2、如果整个序列不全是负数,最大子序列
- 常用的标准库序列化模块import pickle序列化和反序列化把不能直接存储的数据变得可存储,这个过程叫做序列化。把文件中的数据拿出来,回
- 1、前言 MySQL 是完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统。它具有功能强、使用简便、
- HTML 5 和 XHTML 2规范草稿公布以来,一直存在很大的争议。HTML 5是由包括Google、Mirosoft、Mozilla、O
- 问:SQL Server应该怎样访问Sybase数据库的表?答:具体方法如下:1: 安装Sybase客户端版本的要求:Sybase Clie
- 如何在ADO服务器端利用好缓存技术?请看下面示例,这是一个用来显示图书分类的例子程序:displayBooks.asp< %
- 先看代码m = nn.Identity(54, unused_argument1=0.1, unused_argument2=False)i
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 2 - Selectors如果你还没有准备好,请先
- 在Internet上我们每天都会遇到数不清的表单,也看到其中大部分并没有限制用户多次提交同一个表单。缺乏这种限制有时候会产生某些预料不到的结
- 用于制作自动化微信聊天图片,通过图片生成段子视频根据一个txt文档input.txtL 一路走过来好热啊
- 本文实例讲述了PHP封装的数据库模型Model类。分享给大家供大家参考,具体如下:<?php //引入配置文
- Mootools 1.2手风琴(Accordion)教程原文地址:30 Days of Mootools 1.2 Tutoria
- 1 发送文本信息'''加密发送文本邮件'''def sendEmail(from_addr,
- 追本溯源,从使用开始首先看一下我们通常是如何使用微软自带的认证,一般在Startup里面配置我们所需的依赖认证服务,这里通过JWT的认证方式
- 在本文中,我们将探讨一种简洁的方式,以此来可视化你的MP3音乐收藏。此方法最终的结果将是一个映射你所有歌曲的正六边形网格地图,其中相似的音轨
- 广州4.18书友会主题的内容提纲自己参与撰写,同时还参与组织和主持。通过这次的深入参与,我发现胡晓同学能坚持下来多不容易,先赞下。由于天公不
- Windows 8 终于发布了,虽然现在可用的只是开发者预览版,好消息是,IE 10 也随着发了,虽然现在还只有Windows 8可用。我们
- 前言PC Server发展到今天,在性能方面有着长足的进步。64位的CPU在数年前都已经进入到寻常的家用PC之中,更别说是更高端的PC Se