当前位置: 首页 > news >正文

如何在服务器上搭建网站专业积分商城网站建设

如何在服务器上搭建网站,专业积分商城网站建设,电商创业,北京网站建设 知乎文章目录 项目概述技术栈介绍 项目目录应用结构 功能实现单页博客转换示例#xff1a; 专栏合集博客转换示例#xff1a; PDF效果#xff1a; 代码依赖文件requirements.txt:app.py#xff1a;代码解释#xff1a; /api/onepage.py:代码解释#xff1a; /api/zhuanlan.py… 文章目录 项目概述技术栈介绍 项目目录应用结构 功能实现单页博客转换示例 专栏合集博客转换示例 PDF效果 代码依赖文件requirements.txt:app.py代码解释 /api/onepage.py:代码解释 /api/zhuanlan.py:代码解释 /api/tools/tools.py:代码解释 /templates/index.html:代码解释 Gitee代码仓库地址 项目概述 有时候需要将网络上的文章保存为本地文件以便于离线阅读或存档。本项目旨在提供一个简单的Web应用允许用户输入CSDN博客的链接一键将其转换为PDF文件下载。 因为功能太简单前端一个页面就可以完成所以直接使用layui完成本次介绍的是一个前后端不分离的项目 技术栈介绍 本项目主要使用了以下技术栈 Flask一个用Python编写的轻量级Web应用框架。requests一个简单易用的HTTP库用于发送网络请求。parsel一个用于解析HTML和XML文档的库。pdfkit一个将HTML转换为PDF的工具。layui一个前端UI框架用于美化Web应用界面。 核心功能实现 项目目录 应用结构 Flask应用由以下几个部分组成 app.py应用的入口文件负责启动Flask服务器并注册蓝图。 onepage.py和zhuanlan.py这两个文件分别实现了单页博客和专栏合集博客的转换功能。 tools.py包含了一些辅助函数如URL验证和HTML模板生成。 index.html应用的前端页面用户可以在这里输入博客链接并提交转换请求。 功能实现 单页博客转换 用户输入单页博客的链接后端通过requests获取博客内容使用parsel解析HTML然后利用pdfkit将HTML内容转换为PDF文件。 示例 以这篇文章为例子 。 专栏合集博客转换 对于专栏合集用户输入专栏的链接后端会获取专栏中所有文章的链接并对每篇文章进行转换最后将所有PDF文件打包为一个ZIP文件供用户下载。 示例 以这个专栏为例子 。 PDF效果 样式不太好看可以自定义修改tools.py里的html_str的 HTML和CSS模板以实现好看的效果。 代码 依赖文件requirements.txt: Flask~3.0.3 requests~2.32.3 parsel~1.9.1 pdfkit~1.0.0app.py from flask import Flask, make_response, request, render_template from flask_cors import CORS from api.onepage import onepage_api from api.zhuanlan import zhuanlan_api import osapp Flask(__name__) CORS(app, expose_headers[Content-Disposition]) app.config[STATIC_FOLDER] os.path.join(os.path.dirname(os.path.abspath(__file__)), static) app.register_blueprint(onepage_api, url_prefix/one) app.register_blueprint(zhuanlan_api, url_prefix/zl)app.config[SEND_FILE_MAX_AGE_DEFAULT] 3600 # 缓存时间为1小时app.route(/static/path:filename) def static_files(filename):from flask import send_from_directoryreturn send_from_directory(app.config[STATIC_FOLDER], filename)app.route(/, methods[GET, POST]) def run():if request.method POST:data request.form.get(url, typestr)print(data)return make_response({message: Data received}, 200)else:# return make_response({message: Hello World!}, 200)return render_template(index.html)if __name__ __main__:app.run(host0.0.0.0, port8080, debugFalse, threadedTrue) 代码解释 导入必要的模块 FlaskFlask 是一个轻量级的 Web 应用框架。make_response用于创建响应对象。request用于处理客户端的请求。render_template用于渲染 HTML 模板。CORS用于处理跨源资源共享CORS。onepage_api 和 zhuanlan_api这两个模块可能是定义了特定 API 路由的 Python 文件。os用于操作操作系统功能如文件路径操作。 创建 Flask 应用实例 app Flask(__name__) 创建了一个 Flask 应用实例。 配置 CORS CORS(app, expose_headers[Content-Disposition]) 允许跨域请求并暴露 Content-Disposition 头部。 配置静态文件路径 app.config[STATIC_FOLDER] 设置静态文件的路径这里使用了 os.path.join 和 os.path.dirname 来动态获取当前文件的绝对路径并将其与 static 子路径连接形成静态文件的完整路径。 注册蓝图 app.register_blueprint(onepage_api, url_prefix/one) 和 app.register_blueprint(zhuanlan_api, url_prefix/zl) 注册了两个蓝图分别用于处理 /one 和 /zl 路径下的请求。 设置静态文件缓存时间 app.config[SEND_FILE_MAX_AGE_DEFAULT] 3600 设置静态文件的缓存时间为 1 小时。 定义静态文件路由 app.route(/static/path:filename) 定义了一个路由用于处理静态文件的请求。send_from_directory 函数用于发送指定目录下的文件。 定义主路由 app.route(/, methods[GET, POST]) 定义了根 URL 的路由可以处理 GET 和 POST 请求。如果是 POST 请求它会从表单数据中获取 url 参数并打印出来然后返回一个响应。如果是 GET 请求它将渲染并返回 index.html 模板。 启动 Flask 应用 if __name__ __main__: 确保只有当脚本被直接运行时下面的代码才会执行。app.run(host0.0.0.0, port8080, debugFalse, threadedTrue) 启动 Flask 应用监听所有 IP 地址上的 8080 端口关闭调试模式并允许多线程。 /api/onepage.py: import iofrom flask import jsonify, request, Blueprint, send_file, make_response import requests import parsel import re from .tools.tools import * import pdfkitonepage_api Blueprint(onepage_api, __name__) config pdfkit.configuration(wkhtmltopdfrD:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe)header {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0 }onepage_api.route(/, methods[GET]) def get_onepage():url request.args.get(url)print(furl: {url})# 验证urlvalidation_response is_valid_url(url)if isinstance(validation_response, tuple): # 检查是否返回的是 JSON 响应return validation_response # 直接返回错误信息# 继续处理 HTTP GET 请求response requests.get(urlvalidation_response, headersheader) # 使用有效的 URLif response.status_code 200:html response.textselector parsel.Selector(html)try:# 文章作者author_url selector.css(.profile-href::attr(href)).get()print(f作者链接: {author_url})# 文章标题title selector.css(#articleContentId::text).get()new_title re.sub(r[\\:*?|/], , title).strip()content selector.css(#content_views).get()html_data be_html(new_title, author_url,content)print(html_data: 完成)pdf_data pdfkit.from_string(html_data, configurationconfig)except Exception as e:print(f解析失败: {e})return jsonify({error: 解析失败})else:print(开始返回pdf文件)# 返回pdf文件# 创建一个字节流对象来保存 PDF 数据pdf_stream io.BytesIO(pdf_data)# 将字节流的指针重置到开头pdf_stream.seek(0)# 返回 PDF 文件给前端return send_file(pdf_stream, as_attachmentTrue, download_namef{new_title}.pdf, )else:print(请求失败)return jsonify({data: get_onepage_data!}) 代码解释 这段代码是 Flask 应用中的一个蓝图Blueprint用于处理与单页内容相关的 API 请求。下面是对代码中每个部分的解释 导入必要的模块 io用于处理字节流。jsonify、request、Blueprint、send_file、make_responseFlask 提供的函数用于创建 JSON 响应、处理请求、定义蓝图、发送文件等。requests用于发送 HTTP 请求。parsel一个 HTML/XML/JSON 的选择器用于解析网页内容。re正则表达式模块。tools.tools一个自定义的工具模块可能包含一些辅助函数。pdfkit用于将 HTML 转换为 PDF。 定义蓝图 onepage_api Blueprint(onepage_api, __name__) 创建了一个名为 onepage_api 的蓝图。 配置 PDF 转换工具 config pdfkit.configuration(wkhtmltopdfrD:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe) 配置了 pdfkit 工具使用的 wkhtmltopdf 可执行文件的路径。 定义请求头 header 定义了一个请求头用于模拟浏览器请求。 定义路由和视图函数 onepage_api.route(/, methods[GET]) 定义了一个处理 GET 请求的路由。def get_onepage() 是对应的视图函数。 获取 URL 参数 url request.args.get(url) 从请求的查询参数中获取 url 参数。 验证 URL validation_response is_valid_url(url) 调用 is_valid_url 函数验证 URL 的有效性。 处理有效的 URL 如果 URL 有效使用 requests.get 发送 GET 请求获取网页内容。使用 parsel.Selector 解析 HTML 内容。 提取文章信息 提取文章作者链接、标题和内容并使用自定义的 be_html 函数生成 HTML 数据。 生成 PDF 使用 pdfkit.from_string 将 HTML 数据转换为 PDF。 返回 PDF 文件 创建一个字节流对象保存 PDF 数据并使用 send_file 函数将 PDF 文件作为附件发送给客户端。 异常处理 如果在解析过程中发生异常打印错误信息并返回一个包含错误信息的 JSON 响应。 返回响应 如果请求成功返回 PDF 文件如果请求失败返回一个包含错误信息的 JSON 响应。 这个蓝图主要用于处理将网页内容转换为 PDF 文件的请求。它首先验证 URL 的有效性然后获取网页内容提取必要的信息生成 HTML 数据最后将 HTML 数据转换为 PDF 文件并返回给客户端。 /api/zhuanlan.py: import io import math import zipfile import threadingfrom flask import jsonify, request, Blueprint, send_file from .tools.tools import *import requests import parsel import re import pdfkitconfig pdfkit.configuration(wkhtmltopdfrD:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe)headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0 }zhuanlan_api Blueprint(zhuanlan_api, __name__)def process_article(url, pdfs, config, author_name, zl_name):try:response requests.get(urlurl, headersheaders, timeout10)if response.status_code 200:html response.textselector parsel.Selector(html)author_url selector.css(.profile-href::attr(href)).get()title selector.css(#articleContentId::text).get()content selector.css(#content_views).get()new_title re.sub(r[\\:*?|/], , title).strip()html_str be_html(new_title, author_url,content)print(f开始生成{new_title}.pdf)pdf_data pdfkit.from_string(html_str, configurationconfig)pdf_stream io.BytesIO(pdf_data)pdf_filename f{new_title}.pdfpdfs.append((pdf_filename, pdf_stream))except Exception as e:print(fError processing {url}: {e})zhuanlan_api.route(/, methods[GET]) def get_zhuanlan():global max_pagerurl request.args.get(url)no_html url.split(.)[0:-1]no_html ..join(no_html)# 验证urlvalidation_response is_valid_url(url)if isinstance(validation_response, tuple): # 检查是否返回的是 JSON 响应return validation_response # 直接返回错误信息html_urls []link validation_responseprint(f开始爬取第1页)# 继续处理 HTTP GET 请求response requests.get(urllink, headersheaders)if response.status_code 200:html response.texturl_selector parsel.Selector(html)html_urls url_selector.css(.column_article_list li a::attr(href)).getall()author_name url_selector.css(.column_person_tit span:nth-child(2)::text).get().strip()zl_name url_selector.css(.column_title::text).get()print(f作者名称:{author_name}专栏名称:{zl_name})pageSize_pattern rvar pageSize (\d);listTotal_pattern rvar listTotal (\d);pageSize_match re.search(pageSize_pattern, html)listTotal_match re.search(listTotal_pattern, html)if pageSize_match and listTotal_match:pageSize int(pageSize_match.group(1))listTotal int(listTotal_match.group(1))max_pager math.ceil(listTotal / pageSize)else:print(One or both variables were not found in the HTML.)pdfs []threads []if max_pager 1:for page in range(2, max_pager 1):link f{no_html}_{page}.htmlprint(f开始爬取第{page}页)response requests.get(urllink, headersheaders)if response.status_code 200:html response.texturl_selector parsel.Selector(html)html_urls url_selector.css(.column_article_list li a::attr(href)).getall()for url in html_urls:thread threading.Thread(targetprocess_article, args(url, pdfs, config, author_name, zl_name))threads.append(thread)thread.start()print(多线程开始执行)for thread in threads:thread.join()print(f多线程执行完成)zip_output io.BytesIO()with zipfile.ZipFile(zip_output, w, zipfile.ZIP_DEFLATED) as zipf:for filename, pdf_stream in pdfs:pdf_stream.seek(0)zipf.writestr(filename, pdf_stream.read())zip_output.seek(0)return send_file(zip_output, as_attachmentTrue, download_namef{author_name}_{zl_name}.zip) 代码解释 这段代码是另一个 Flask 应用中的蓝图Blueprint用于处理专栏内容的爬取、转换和打包。下面是对代码中每个部分的解释 导入必要的模块 io、math、zipfile、threadingPython 标准库中的模块用于处理字节流、数学运算、压缩文件和多线程。jsonify、request、Blueprint、send_fileFlask 提供的函数和类用于创建 JSON 响应、处理请求、定义蓝图和发送文件。requests、parsel、re、pdfkit第三方库用于发送 HTTP 请求、解析 HTML、处理正则表达式和将 HTML 转换为 PDF。 配置 PDF 转换工具 config pdfkit.configuration(wkhtmltopdfrD:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe) 配置了 pdfkit 工具使用的 wkhtmltopdf 可执行文件的路径。 定义请求头 headers 定义了一个请求头用于模拟浏览器请求。 定义蓝图 zhuanlan_api Blueprint(zhuanlan_api, __name__) 创建了一个名为 zhuanlan_api 的蓝图。 定义处理文章的函数 process_article 是一个函数用于处理单个文章的爬取和转换。它接受文章的 URL、PDF 列表、配置、作者名和专栏名作为参数。 定义路由和视图函数 zhuanlan_api.route(/, methods[GET]) 定义了一个处理 GET 请求的路由。def get_zhuanlan() 是对应的视图函数。 获取 URL 参数并验证 url request.args.get(url) 从请求的查询参数中获取 url 参数。validation_response is_valid_url(url) 调用 is_valid_url 函数验证 URL 的有效性。 爬取专栏页面 使用 requests.get 发送 GET 请求获取专栏页面的内容。解析专栏作者名和专栏名。解析分页信息计算最大页码。 多线程爬取文章 使用多线程爬取所有文章的链接并创建线程池处理每个文章的转换。 打包 PDF 文件 创建一个压缩文件将所有 PDF 文件添加到压缩文件中。 返回压缩文件 使用 send_file 函数将压缩文件作为附件发送给客户端。 异常处理 在 process_article 函数中如果发生异常打印错误信息。 这个蓝图主要用于处理将专栏内容转换为 PDF 文件并打包成 ZIP 文件的请求。它首先验证 URL 的有效性然后爬取专栏页面解析文章链接并使用多线程处理每个文章的转换。最后将所有 PDF 文件打包成 ZIP 文件并返回给客户端。 /api/tools/tools.py: from flask import jsonifydef is_valid_url(url):if not url:return jsonify({error: url不能为空}), 400elif blog.csdn.net not in url:return jsonify({error: url非csdn博客链接}), 400else:return urldef be_html(new_title, author_url, content):html_str f!DOCTYPE htmlhtml langenheadmeta charsetUTF-8title{new_title}/titlestyle/* 基本重置 */body,h1,h2,h3,h4,h5,h6,p,ul,ol,li,figure,figcaption,blockquote,dl,dd {{margin: 0;padding: 0;}}/* 标题样式 */h1 {{font-size: 2em;color: #00050a;margin-bottom: 0.5em;border-bottom: 2px solid #0056b3;padding-bottom: 0.5em;}}h2 {{font-size: 1.5em;color: #01163b;margin-top: 1em;margin-bottom: 0.5em;}}h3 {{font-size: 1.2em;color: #003f86;margin-top: 0.8em;margin-bottom: 0.5em;}}/* 段落和链接样式 */p {{margin-bottom: 1em;}}a {{color: #f90a0a;text-decoration: none;}}a:hover {{text-decoration: underline;}}/* 代码块样式 */pre,code {{background-color: #545151;font-family: Courier New, monospace;color: #ffffff;}}code {{padding: 2px 4px;border-radius: 3px;}}pre {{padding: 10px;border: 1px solid #ddd;# overflow-x: auto;white-space: pre-wrap;}}/* 引用样式 */blockquote {{background-color: #eaeaea;border-left: 4px solid #ddd;padding: 10px 20px;margin-bottom: 1em;}}/* SVG 图标样式 */svg {{display: none;}}/style/headbodya href{author_url}原作者博客/a{content}/body/htmlreturn html_str 代码解释 这段代码定义了一个名为 tools.py 的模块它包含两个函数is_valid_url 和 be_html。下面是对代码中每个部分的解释 导入 Flask 的 jsonify 函数 jsonify 用于创建一个包含 JSON 数据的响应对象。 定义 is_valid_url 函数 这个函数用于验证传入的 URL 是否有效。如果 URL 为空它返回一个包含错误信息的 JSON 响应并设置状态码为 400Bad Request。如果 URL 不包含 “blog.csdn.net”表示这不是一个 CSDN 博客的链接同样返回错误信息和 400 状态码。如果 URL 有效函数直接返回该 URL。 定义 be_html 函数 这个函数用于生成 HTML 格式的字符串。它接受三个参数new_title文章的新标题、author_url作者的 URL和 content文章内容。函数内部定义了一个多行字符串 html_str包含了 HTML 文档的基本结构和一些基本的样式定义。在 HTML 内容中有一个链接指向作者的原始博客并插入了文章的内容。最后函数返回这个 HTML 字符串。 这个模块的主要作用是提供辅助功能用于验证 URL 的有效性并生成用于生成 PDF 的 HTML 内容。is_valid_url 函数确保处理的 URL 是有效的而 be_html 函数则用于创建一个简单的 HTML 页面该页面可以用于 PDF 转换工具的输入。 /templates/index.html: !DOCTYPE html html langen headmeta charsetUTF-8meta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0title首页/titlelink href{{ url_for(static, filename/layui/css/layui.css) }} relstylesheet!-- HTML Content --!-- script src{{ url_for(static, filename/layui/layui.js) }}/script--stylebody {background-color: #f2f2f2;}.layui-col-xs6 {padding: 20px;border-radius: 5px;box-shadow: 0 0 10px #ccc;text-align: center;line-height:1.5;height: 70vh;border: 1px solid #e6e6e6;}.layui-col-xs6 form .layui-input-group{display: flex;align-items: center;justify-content: center;}/style /head body ul classlayui-nav layui-nav-child-cli classlayui-nav-item layui-this a hrefCSDN博客转PDF/a/li /ul div classlayui-container stylemargin-top: 20px; div classlayui-rowdiv classlayui-col-xs6 left-columnh2单页博客转PDF/h2form classlayui-form actionhttp://127.0.0.1:8080/one methodGET stylemargin-top: 40px;div classlayui-input-groupdiv classlayui-input-split layui-input-prefix stylewidth: 20%; text-align: right;链接地址/divinput typeurl nameurl placeholder请输入有效的链接地址 lay-verifyrequiredclasslayui-input requireddiv classlayui-input-suffixbutton typesubmit classlayui-btn layui-btn-primary lay-filteroneSubmit提交/button/div/div/form/divdiv classlayui-col-xs6 right-column styletext-align: center;line-height:1.5;h2专栏合集博客转PDF/h2form classlayui-form actionhttp://127.0.0.1:8080/zl methodGET stylemargin-top: 40px;div classlayui-input-groupdiv classlayui-input-split layui-input-prefix stylewidth: 20%; text-align: right;链接地址/divinput typeurl nameurl placeholder请输入有效的链接地址 lay-verifyrequiredclasslayui-input requireddiv classlayui-input-suffixbutton typesubmit classlayui-btn layui-btn-primary lay-filterzlSubmit提交/button/div/div/form/div/div /div/body footer styletext-align: center;margin-top: 50px;font-size: 18px;color: #999;div classlayui-footer styleline-height: 2.5;text-align: center;span© 2024 CSDN博客转PDF | 作者: a hrefhttps://blog.csdn.net/qq_52313022 target_blankstylecolor:#C71D23;Lianghui/a/spanpPowered by Python Flask | 前端技术栈a hrefhttps://layui.dev/ target_blank stylecolor: #23A7E8;layui/a/p/div /footer script src{{ url_for(static, filenamelayui/layui.js) }}/script scriptlayui.use([form], function(){var form layui.form;form.render(); // 渲染表单form.on(submit(oneSubmit), function(data){// 这里可以添加自定义逻辑比如AJAX请求// 但是在这个场景中我们直接提交表单所以不需要额外的AJAX代码console.log(表单提交了, data.field);// 阻止表单默认提交行为因为我们可能想要使用AJAX或者仅仅是打印信息// 如果你想让表单正常提交可以移除下面的return falsereturn false;});form.on(submit(zlSubmit), function(data){// 这里可以添加自定义逻辑比如AJAX请求// 但是在这个场景中我们直接提交表单所以不需要额外的AJAX代码console.log(表单提交了, data.field);// 阻止表单默认提交行为因为我们可能想要使用AJAX或者仅仅是打印信息// 如果你想让表单正常提交可以移除下面的return falsereturn false;});}); /script /html代码解释 这段代码是一个 HTML 模板用于渲染一个简单的 Web 页面该页面提供了两个表单分别用于将 CSDN 博客的单页和专栏转换为 PDF 文件。下面是对代码中每个部分的解释 HTML 头部head 包含字符集定义、视口设置和页面标题。链接到静态文件夹中的 Layui CSS 文件用于页面样式。 样式style 自定义了一些 CSS 样式用于美化页面和表单。 页面主体body 使用 Layui 的导航栏layui-nav显示当前页面的功能。包含一个容器layui-container里面有两列layui-row每列layui-col-xs6分别对应单页博客和专栏合集的转换功能。每个表单都包含一个输入框用于输入博客的 URL 地址以及一个提交按钮。 页脚footer 包含版权信息和技术支持信息如作者链接和前端技术栈。 JavaScript 链接到静态文件夹中的 Layui JavaScript 文件。使用 Layui 的表单模块监听表单提交事件并在控制台打印提交的数据。这里阻止了表单的默认提交行为以便可以在客户端进行进一步的处理比如 AJAX 请求。 表单提交 表单的 action 属性设置为 Flask 应用的两个不同路由/one 和 /zl这意味着当用户提交表单时将向这些路由发送 GET 请求。表单的 method 设置为 GET表示使用 GET 请求提交表单数据。 Gitee代码仓库地址 https://gitee.com/lianghui2333/csdn-blog-to-pdf.git
文章转载自:
http://www.morning.ykwqz.cn.gov.cn.ykwqz.cn
http://www.morning.rqmr.cn.gov.cn.rqmr.cn
http://www.morning.c7622.cn.gov.cn.c7622.cn
http://www.morning.xqkcs.cn.gov.cn.xqkcs.cn
http://www.morning.zdqsc.cn.gov.cn.zdqsc.cn
http://www.morning.zylrk.cn.gov.cn.zylrk.cn
http://www.morning.knqzd.cn.gov.cn.knqzd.cn
http://www.morning.jlpdc.cn.gov.cn.jlpdc.cn
http://www.morning.kynf.cn.gov.cn.kynf.cn
http://www.morning.nnjq.cn.gov.cn.nnjq.cn
http://www.morning.zcfsq.cn.gov.cn.zcfsq.cn
http://www.morning.pqyms.cn.gov.cn.pqyms.cn
http://www.morning.mhlkc.cn.gov.cn.mhlkc.cn
http://www.morning.tckxl.cn.gov.cn.tckxl.cn
http://www.morning.pwksz.cn.gov.cn.pwksz.cn
http://www.morning.lxthr.cn.gov.cn.lxthr.cn
http://www.morning.rwfj.cn.gov.cn.rwfj.cn
http://www.morning.zxybw.cn.gov.cn.zxybw.cn
http://www.morning.trhrk.cn.gov.cn.trhrk.cn
http://www.morning.tmxfn.cn.gov.cn.tmxfn.cn
http://www.morning.hghhy.cn.gov.cn.hghhy.cn
http://www.morning.mjtft.cn.gov.cn.mjtft.cn
http://www.morning.lsqmb.cn.gov.cn.lsqmb.cn
http://www.morning.zfqr.cn.gov.cn.zfqr.cn
http://www.morning.niukaji.com.gov.cn.niukaji.com
http://www.morning.bxqtq.cn.gov.cn.bxqtq.cn
http://www.morning.hxbps.cn.gov.cn.hxbps.cn
http://www.morning.lswgs.cn.gov.cn.lswgs.cn
http://www.morning.mtqqx.cn.gov.cn.mtqqx.cn
http://www.morning.nsmyj.cn.gov.cn.nsmyj.cn
http://www.morning.gwsdt.cn.gov.cn.gwsdt.cn
http://www.morning.nbdtdjk.cn.gov.cn.nbdtdjk.cn
http://www.morning.fxzgw.com.gov.cn.fxzgw.com
http://www.morning.zxqyd.cn.gov.cn.zxqyd.cn
http://www.morning.dmwjl.cn.gov.cn.dmwjl.cn
http://www.morning.pfkrw.cn.gov.cn.pfkrw.cn
http://www.morning.zdxss.cn.gov.cn.zdxss.cn
http://www.morning.poapal.com.gov.cn.poapal.com
http://www.morning.jhrqn.cn.gov.cn.jhrqn.cn
http://www.morning.mwbqk.cn.gov.cn.mwbqk.cn
http://www.morning.bwnd.cn.gov.cn.bwnd.cn
http://www.morning.rljr.cn.gov.cn.rljr.cn
http://www.morning.tbbxn.cn.gov.cn.tbbxn.cn
http://www.morning.hfnbr.cn.gov.cn.hfnbr.cn
http://www.morning.rqqkc.cn.gov.cn.rqqkc.cn
http://www.morning.phxdc.cn.gov.cn.phxdc.cn
http://www.morning.qnlbb.cn.gov.cn.qnlbb.cn
http://www.morning.qkgwz.cn.gov.cn.qkgwz.cn
http://www.morning.dschz.cn.gov.cn.dschz.cn
http://www.morning.syrzl.cn.gov.cn.syrzl.cn
http://www.morning.bkryb.cn.gov.cn.bkryb.cn
http://www.morning.mzwfw.cn.gov.cn.mzwfw.cn
http://www.morning.wlxfj.cn.gov.cn.wlxfj.cn
http://www.morning.xtqld.cn.gov.cn.xtqld.cn
http://www.morning.rwhlf.cn.gov.cn.rwhlf.cn
http://www.morning.dansj.com.gov.cn.dansj.com
http://www.morning.nrzkg.cn.gov.cn.nrzkg.cn
http://www.morning.zstbc.cn.gov.cn.zstbc.cn
http://www.morning.zlnkq.cn.gov.cn.zlnkq.cn
http://www.morning.cpwmj.cn.gov.cn.cpwmj.cn
http://www.morning.lfcfn.cn.gov.cn.lfcfn.cn
http://www.morning.qfgxk.cn.gov.cn.qfgxk.cn
http://www.morning.rgrz.cn.gov.cn.rgrz.cn
http://www.morning.tdgwg.cn.gov.cn.tdgwg.cn
http://www.morning.fhsgw.cn.gov.cn.fhsgw.cn
http://www.morning.jzlfq.cn.gov.cn.jzlfq.cn
http://www.morning.ghyfm.cn.gov.cn.ghyfm.cn
http://www.morning.tllhz.cn.gov.cn.tllhz.cn
http://www.morning.sjwws.cn.gov.cn.sjwws.cn
http://www.morning.rkdhh.cn.gov.cn.rkdhh.cn
http://www.morning.hjjkz.cn.gov.cn.hjjkz.cn
http://www.morning.jyzqn.cn.gov.cn.jyzqn.cn
http://www.morning.rnsjp.cn.gov.cn.rnsjp.cn
http://www.morning.zdfrg.cn.gov.cn.zdfrg.cn
http://www.morning.rtbx.cn.gov.cn.rtbx.cn
http://www.morning.ymqfx.cn.gov.cn.ymqfx.cn
http://www.morning.rqknq.cn.gov.cn.rqknq.cn
http://www.morning.rttxx.cn.gov.cn.rttxx.cn
http://www.morning.yqmmh.cn.gov.cn.yqmmh.cn
http://www.morning.ndtzy.cn.gov.cn.ndtzy.cn
http://www.tj-hxxt.cn/news/249128.html

相关文章:

  • 建设网站可以做什么电子商务网站建设结构分析
  • 网络营销的特点山东seo网络营销推广
  • 小网站备案微商平台怎么注册
  • 做微网站常用软件我自己怎么建网站
  • 网站建设案例知名 乐云践新酒店官方网站建设书
  • 如何对现有的网站改版全网营销全网推广
  • 广东湛江网站建设佛山中英文网站制作
  • asp.net网站管理工具网站后台维护怎么做
  • 如何建设手机端网站网络整合营销推广
  • 一些做的好的网站定制网站大概多少钱
  • 设计很好的视觉很棒的网站ofo的网站用什么做的
  • 广西钦州住房与城乡建设局网站网站备案人授权书
  • 陕西省住房和城乡建设厅网站首页网站做多少外链
  • 培训制作网站源码成都网站优化推广
  • 荆州市做网站的网站怎样制作 优帮云
  • 石家庄做网站最好的公司有哪些不要域名能建网站么
  • 手机用什么软件做网站网站的不足之处
  • 企业商务网站 建设方案wordpress没有幻灯片
  • 滁州网站建设设计网站建设 科技公司
  • amp网站建设百度网盘资源搜索
  • 备案的网站名称能重复备案吗把手机网站做成app
  • 女人与马做受网站怎么样把自己的产品网上推广
  • 网站建设基本范例网站模板 兼容
  • 免费网站建设服务山东郓城住房和城乡建设厅网站
  • wordpress国内视频网站吗抽奖网站怎么制作
  • 网站开发app开发免费给我推广
  • 网站域名哪里买厦门建设局人员名单
  • 做网站找模版好吗不属于网络营销的推广手段是什么
  • wap网站生成茂名免费自助建站模板
  • 动漫视频网站模板寻找网站建设 网站外包