西安公司网站开发,微营销的常见方法有哪些,怀化网站定制,如何在网站后台做超链接到文档首先#xff0c;需要在centos里安装3.8版本以上的python#xff0c;这里不再赘述#xff0c;网上有的是安装步骤 检查是否安装成功 pip3 --version安装后执行 pip3 install requests beautifulsoup4 markdownify新建脚本 vim csdn_downloader.py脚本如下#xff1a; #…首先需要在centos里安装3.8版本以上的python这里不再赘述网上有的是安装步骤检查是否安装成功pip3 --version安装后执行pip3 install requests beautifulsoup4 markdownify新建脚本vimcsdn_downloader.py脚本如下# -*- coding: utf-8 -*-importosimportreimportrequestsimporttimefrombs4importBeautifulSoupfrommarkdownifyimportmarkdownifyasmdfromurllib.parseimporturlparse,unquoteimporthashlib# 配置CSDN_USERNAME123455# 替换为目标博主用户名SAVE_DIRcsdn_articles# 文章保存根目录HEADERS{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36,Referer:https://blog.csdn.net/}defget_article_list(username):获取博主文章列表标题和URLurlfhttps://blog.csdn.net/{username}/article/listarticles[]page1whileTrue:responserequests.get(f{url}/{page},headersHEADERS)soupBeautifulSoup(response.text,html.parser)itemssoup.select(.article-list .article-item-box)ifnotitems:breakforiteminitems:titleitem.select_one(h4 a).text.strip()linkitem.select_one(h4 a)[href]articles.append({title:title,url:link})page1time.sleep(1)# 避免请求过于频繁returnarticlesdefdownload_image(img_url,save_path):下载单张图片到本地try:# 设置图片下载的特定headersimg_headersHEADERS.copy()img_headers[Accept]image/avif,image/webp,image/apng,image/svgxml,image/*,*/*;q0.8responserequests.get(img_url,headersimg_headers,streamTrue,timeout30)ifresponse.status_code200:withopen(save_path,wb)asf:forchunkinresponse.iter_content(chunk_size8192):ifchunk:f.write(chunk)returnTrueelse:print(f图片下载失败状态码{response.status_code}{img_url})returnFalseexceptExceptionase:print(f图片下载异常{img_url}错误{str(e)})returnFalsedefget_image_extension(img_url):从URL中获取图片扩展名parsed_urlurlparse(img_url)pathparsed_url.path.lower()# 常见图片格式extensions[.jpg,.jpeg,.png,.gif,.webp,.bmp,.svg]forextinextensions:ifextinpath:returnext# 如果URL中没有明确扩展名默认使用.jpgreturn.jpgdefprocess_images_in_content(content,article_title):处理内容中的图片下载并替换为本地路径soupBeautifulSoup(content,html.parser)img_tagssoup.find_all(img)ifnotimg_tags:returncontent# 无图片直接返回原内容# 创建全局图片目录global_image_diros.path.join(SAVE_DIR,images)os.makedirs(global_image_dir,exist_okTrue)# 创建文章特定的图片目录article_image_diros.path.join(global_image_dir,article_title.replace(/,_).replace(\\,_))os.makedirs(article_image_dir,exist_okTrue)forimginimg_tags:img_urlimg.get(src,)ifnotimg_url:continue# 处理相对路径的图片URLifnotimg_url.startswith((http://,https://)):ifimg_url.startswith(//):img_urlhttps:img_urlelse:# 如果是相对路径可能需要拼接基础URL这里简单跳过continuetry:# 生成唯一的图片文件名img_hashhashlib.md5(img_url.encode()).hexdigest()[:8]img_extget_image_extension(img_url)img_filenamef{img_hash}{img_ext}# 本地图片保存路径local_img_pathos.path.join(article_image_dir,img_filename)# Markdown中使用的相对路径相对于文章MD文件# 提前处理文章标题替换 / 和 \ 为 _safe_titlearticle_title.replace(/,_).replace(\\,_)# 再拼接路径此时 f-string 中无反斜杠md_img_pathf./images/{safe_title}/{img_filename}# 下载图片仅当文件不存在时ifnotos.path.exists(local_img_path):print(f 下载图片{os.path.basename(img_filename)})ifdownload_image(img_url,local_img_path):# 替换HTML中的图片URL为本地路径img[src]md_img_pathelse:# 下载失败保留原链接print(f 图片下载失败保留原链接{img_url})else:# 图片已存在直接替换路径img[src]md_img_pathexceptExceptionase:print(f 处理图片时出错{img_url}错误{str(e)})continuereturnstr(soup)defdownload_article(url,article_title):下载单篇文章处理图片后转为Markdowntry:responserequests.get(url,headersHEADERS,timeout30)soupBeautifulSoup(response.text,html.parser)contentsoup.select_one(article)ifnotcontent:print(f 未找到文章内容)returnNone# 处理图片下载并替换路径processed_contentprocess_images_in_content(str(content),article_title)# 转为Markdownmarkdown_contentmd(processed_content)returnmarkdown_contentexceptExceptionase:print(f 下载文章时出错{str(e)})returnNonedefsave_to_markdown(title,content,save_dir):保存Markdown文件# 创建保存目录os.makedirs(save_dir,exist_okTrue)# 文件名处理替换特殊字符safe_titlere.sub(r[\/:*?|],_,title)filenamef{save_dir}/{safe_title}.mdwithopen(filename,w,encodingutf-8)asf:f.write(f#{title}\n\n)f.write(content)print(f 已保存{filename})returnfilenameif__name____main__:print(开始获取文章列表...)articlesget_article_list(CSDN_USERNAME)print(f找到{len(articles)}篇文章)# 创建主目录os.makedirs(SAVE_DIR,exist_okTrue)success_count0fail_count0fori,articleinenumerate(articles,1):titlearticle[title]urlarticle[url]print(f\n[{i}/{len(articles)}] 处理文章{title})contentdownload_article(url,title)ifcontent:save_to_markdown(title,content,SAVE_DIR)success_count1else:print(f 文章下载失败{title})fail_count1time.sleep(2)# 添加延迟避免请求过于频繁print(f\n处理完成成功{success_count}篇失败{fail_count}篇)print(f文章保存在{os.path.abspath(SAVE_DIR)})print(图片保存在./images/ 目录下Markdown文件可离线查看)其中脚本里CSDN_USERNAME的值改为要获取的csdn用户名用户名如下URL链接里执行脚本python3 csdn_downloader.py执行日志入下由于要下载图片所以很慢静静等待即可。下载过程中会在脚本所在目录生成一个csdn_articles文件夹里边是md文件以及存md里的图片的文件夹。执行后可以进行压缩保存如压缩为zipzip-r csdn_articles.zip csdn_articles