先来看一下效果吧,只要有足够的照片素材,捕获女神的心就指日可待

怎么样,看起来还可以吧

下面就一起来完成吧

数据准备

首先是测试图片的获取,毕竟萝卜哥当前还没有那么多女神的照片

这里我使用如下网站的高清图片,嗯,各个都是大美女

抓取的代码比较简单

import requests
import json


def get_pic():
    headers = {"Accept": "application/json, text/javascript, */*; q=0.01",
               "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36",
               "Cookie": "Hm_lvt_6e8dac14399b608f633394093523542e=1607173561; Hm_lvt_ea4269d8a00e95fdb9ee61e3041a8f98=1621344383; Hm_lpvt_ea4269d8a00e95fdb9ee61e3041a8f98=1621344423",
               "Referer": "http://lab.mkblog.cn/wallpaper/"}
    pic_url = "http://lab.mkblog.cn/wallpaper/api.php?cid=6&start=0&count=100"
    pic_res = requests.get(pic_url, headers=headers)
    pic_res_json = pic_res.json()
    pic_info = pic_res_json.get("data")
    pic_url = []
    num = 0
    try:
        for i in pic_info:
            if num % 5 == 0:
                pic_url.append(i["url"])
            if num % 5 == 1:
                pic_url.append(i["img_1600_900"])
            if num % 5 == 2:
                pic_url.append(i["img_1366_768"])
            if num % 5 == 3:
                pic_url.append(i["img_1280_800"])
            if num % 5 == 4:
                pic_url.append(i["img_1024_768"])
            num  = 1
    except:
        pass
    return pic_url


def save_pic_url(data):
    json.dump(data, open("pic_url.json", 'w'))


if __name__ == '__main__':
    pic_url = get_pic()
    save_pic_url(pic_url)

因为网站提供了不同分辨率的图片,所以也就根据一定的规则来获取不同分辨率的图片了。

接下来是获取渣男话术,哈哈哈哈,又是一个有趣的网站,感兴趣的朋友自行查看吧

由于这个接口是有调用频率限制的,那么也抓取一些到本地吧

def get_data():
    headers = {"Accept": "application/xml",
               "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"}
    url = "https://nihaowua.90so.net/api/wus"
    res = requests.get(url, headers=headers).json()
    return res


if __name__ == '__main__':
    data_list = []
    for i in range(10):
        data = get_data()
        data_list.append(data.get("title"))
        time.sleep(10)
    json.dump(data_list, open("data.json", "w"))

网站搭建

首先我们还是通过简单的 Flask 来进行后台的搭建

index 视图

@app.route('/', methods=['GET', 'POST'])
def index():
    pic_list = json.load(open("pic_url.json"))
    seg = int(len(pic_list)/4)
    data = []
    socre = 5
    for n in pic_list[:seg]:
        tmp_data = []
        pic_url = random.choice(pic_list)
        tmp_data.append(pic_url)
        tmp_data.append(pic_list.index(n))
        data.append(tmp_data)
    return render_template('index.html', data=data, score=socre)

还是比较简单的,拿到图片地址文件中的数据后,根据规则展示一部分图片

下面是 index.html 的部分核心代码

图片展示代码

{% for p in data %}
            <article class="white-panel">
            <img class="thumb" data-original="{{ p[0] }}">
                <h1><a href="{{ url_for('nvshen', id=p[1]) }}" rel="external nofollow"  title="去投票" target="_blank">爱你😘</a>
                </h1>

        </article>
        {% endfor %}

懒加载图片的 js 代码

function getData(page) {
            var xhr = new XMLHttpRequest();
            xhr.responseType = "json";
            xhr.open('POST', '/api/getdata/'   page, true);
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.onload = function (ev) {
                if(this.status === 200) {
                    if(this.response['end'] === true) {
                        flag = false;
                    }
                        var mydata = this.response['msg'];
                        //console.log(mydata[1][2]);
                        for(var i=0, len=mydata.length; i<len; i  ){
                            var myurl = mydata[i][0];
                            var htmlText = '<article class="white-panel">'  
                                '<img data-original='   myurl  ' class="thumb">'  
                                '<h1>'  
                                '<a href=URL title="去投票" target="_blank">'.replace("URL", Flask.url_for("nvshen", {id: "1"}))  
                                 "爱你😘"   '</a>'  
                                '</h1>'  
                                '<p>'  
                                '<div id="starBg" class="stars-bg">'  
                                '{% if score == 1 %}'  
                                '<a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  class="star-active" style="width: 20%"></a>'  
                                '{% elif score == 2 %}'  
                                '<a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  class="star-active" style="width: 40%"></a>'  
                                '{% elif score == 3 %}'  
                                '<a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  class="star-active" style="width: 60%"></a>'  
                                '{% elif score == 4 %}'  
                                '<a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  class="star-active" style="width: 80%"></a>'  
                                '{% elif score == 5 %}'  
                                '<a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  class="star-active" style="width: 100%"></a>'  
                                '{% else %}'  
                                '<a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  class="star-active" style="width: 0%"></a>'  
                                '{% endif %}'  
                                '</div>'  
                                '</p>'  
                                '</article>';
                            var script = '<script>'  
                                    '$(function(){'  
                                    '$("img.thumb").lazyload();'  
                                    '})'  
                                    '<\/script>';
                            $('#gallery-wrapper').append(htmlText);
                            $('body').append(script);
                        }
                }else if(this.status === 422) {
                    console.log("get data error");
                }
            };
            xhr.send();
        }

这里用到了 接口 getdata,我们来看看其实现

@app.route('/api/getdata/<int:page>', methods=['POST'])
def get_data(page):
    pic_list = json.load(open("pic_url.json"))
    seg = 0
    seg_page = int(len(pic_list)/4)
    end = False
    if page == 2:
        seg = seg_page
        seg_page = seg*2
    elif page == 3:
        seg = seg_page*2
        seg_page = seg   seg_page
    elif page == 4:
        seg = seg_page*3
        seg_page = int(len(pic_list))   1
        end = True
    elif page == 1:
        pass
    else:
        return jsonify({"msg": "error page id", "code": 422}), 422
    data = []
    socre = 1
    for n in pic_list[seg:seg_page]:
        tmp_data = []
        pic_url = random.choice(pic_list)
        tmp_data.append(pic_url)
        data.append(tmp_data)
    return jsonify({"msg": data, "code": 200, "end": end}), 200

这里有一个分页的机制,用于懒加载图片

接下来就是详情页,也就是展示“渣男语录”的页面

@app.route('/nvshen/<id>/', methods=['GET', 'POST'])
def nvshen(id):
    pic_list = json.load(open("pic_url.json"))
    pic_url = pic_list[int(id)]
    data = json.load(open("data.json"))
    return render_template('nvshen.html', nvshenid=id, main_url=pic_url, data_list=data, user_score=5)

分别拿到当前图片的地址和抓取好的渣男语录,返回给前端

对于 nvshen.html 代码也比较简单,直接来个循环即可

    <section id="gallery-wrapper">
        {% for d in data_list %}
            <article class="white-panel">
            <!--<img data-original="{{ d }}" class="thumb">-->
                <h1><a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >{{ d }}</a>
                </h1>
        </article>
        {% endfor %}

    </section>

这样,我们一个简单的女神网站就完成了

服务部署

Python web 的部署,我一般使用 gunicorn

gunicorn 基本配置

# coding=utf-8
import sys
import os
import multiprocessing

path_of_current_file = os.path.abspath(__file__)
path_of_current_dir = os.path.split(path_of_current_file)[0]

_file_name = os.path.basename(__file__)

sys.path.insert(0, path_of_current_dir)



worker_class = 'sync'
workers = multiprocessing.cpu_count() * 2   1

chdir = path_of_current_dir

worker_connections = 1000
timeout = 30
max_requests = 2000
graceful_timeout = 30

loglevel = 'info'

reload = True
debug = False

access_log_format  = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" "%({X-Real-IP}i)s"'


bind = "%s:%s" % ("127.0.0.1", 5001)
pidfile = '%s/logs/%s.pid' % (path_of_current_dir, _file_name)
errorlog = '%s/logs/%s_error.log' % (path_of_current_dir, _file_name)
accesslog = '%s/logs/%s_access.log' % (path_of_current_dir, _file_name)

然后再用如下命令就可以启动了

/root/miniconda3/bin/gunicorn -D -c /home/nvshen/app/gunicorn app:app

好了,这样就可以把网站地址告诉女神了,坐等被夸!

到此这篇关于利用Python为女神制作一个专属网站的文章就介绍到这了,更多相关Python制作网站内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

利用Python为女神制作一个专属网站的更多相关文章

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  3. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  4. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  5. Swift、Go、Julia与R能否挑战 Python 的王者地位

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  6. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  7. 你没看错:Swift可以直接调用Python函数库

    上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。以如下python脚本为例:Perfect-Python可以用下列方法封装并调用以上函数,您所需要注意的仅仅是其函数名称以及参数。

  8. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  9. swift抛出终端的python错误

    每当我尝试启动与python相关的swift时,我都会收到错误.我该如何解决?

  10. 在Android上用Java嵌入Python

    解决方法看看this,它适用于J2SE,你可以尝试在Android上运行.

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部