爬虫逆向-js进阶(续写,搭建网站)

1.搭建简单网站1

from flask import Flask,render_template
import requests
import json
app = Flask('name')


# **location**的温度是**temp**度,天气状况:**desc**

@app.route('/')  # 绑定处理函数
def index_url():
    location = '101010100'
    data = get_weather(location)
    return render_template('index.html',location=data['name'],temp=data['temp'],desc=data['desc'])


def get_weather(location='101010100'):
    url = f'https://devapi.qweather.com/v7/weather/now?location={location}&key=251bac74792b4c53839b2394b5ee45cc'
    r = requests.get(url)

    # 确保请求成功
    if r.status_code == 200:
        data = json.loads(r.text)
        # 提取温度和天气状况
        temp = data['now']['temp']  # 温度
        desc = data['now']['text']  # 天气状况
        # 从 fxLink 中提取城市名称
        fx_link = data['fxLink']  # 获取 fxLink
        name = fx_link.split('/')[-1].split('-')[0]  # 提取城市名称,如 'beijing'
        # 构造返回的天气信息字典
        weather = {'name': name, 'temp': temp, 'desc': desc}
        return weather


if __name__ == '__main__':
    # app.run(host='127.1.1.0', port=9999)
    print(get_weather())
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>查询天气预报</title>
</head>
<body>
<h1>{{location}}的温度是{{temp}}度,天气状况:{{desc}}</h1>
<script src="static\jquery-1.10.1.min.js"></script>
<script>
    $(function (){
        alert('已经加载jQuery')
    })
</script>
</body>
</html>

 

2.搭建简单网站2

from flask import Flask,render_template,request
import requests
import json
app = Flask('name')


# **location**的温度是**temp**度,天气状况:**desc**

@app.route('/')  # 绑定处理函数
def index_url():
    location = '101010100'
    data = get_weather(location)
    return render_template('index.html',location=data['name'],temp=data['temp'],desc=data['desc'])

@app.route('/get_data')
def get_data():
    loc = request.args.get('loc')
    ua = requests.headers.get('User-Agent')
    token = requests.cookies.get('token')
    data = ''
    if 'python' in ua:
        msg = '检测到自动化程序'
    elif not token or token != 'abc':
        msg = 'Token参数错误'
    elif not loc:
        msg = '查询参数错误'
    else:
        data = get_weather(loc)
        msg = '请求正常'



    sender_data = {'msg':msg,'data':data}
    sender_str = json.dumps(sender_data)
    return sender_str

@app.route('/post_data', methods=['POST'])
def post_data():
    # loc = request.form.get('loc')  # 获取数据
    loc = request.json.get('loc') # payload
    data = get_weather(loc)
    msg = '请求正常'
    sender_data = {'msg': msg, 'data': data}
    sender_str = json.dumps(sender_data)
    return sender_str


def get_weather(location='101010100'):
    url = f'https://devapi.qweather.com/v7/weather/now?location={location}&key=251bac74792b4c53839b2394b5ee45cc'
    r = requests.get(url)

    # 确保请求成功
    if r.status_code == 200:
        data = json.loads(r.text)
        # 提取温度和天气状况
        temp = data['now']['temp']  # 温度
        desc = data['now']['text']  # 天气状况
        # 从 fxLink 中提取城市名称
        fx_link = data['fxLink']  # 获取 fxLink
        name = fx_link.split('/')[-1].split('-')[0]  # 提取城市名称,如 'beijing'
        # 构造返回的天气信息字典
        weather = {'name': name, 'temp': temp, 'desc': desc}
        return weather


if __name__ == '__main__':
    app.run(host='127.1.1.0', port=9999)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>查询天气预报</title>
</head>
<body>
<h1>{{ location }}的温度是{{ temp }}度,天气状况:{{ desc }}</h1>
<script src="static\jquery-1.10.1.min.js"></script>
<script>
    let date = new Date(); // 获取当前时间
    console.log(date.toString());
    date.setTime(date.getTime() + 1000 * 1000); // 单位为毫秒,设置几秒后删除cookie,这里为1000秒
    // 使用方法打开浏览器页面,查看cookie值,最后把下面设置cookie和时间的(下面这行)注释掉,静等两分钟查看浏览器即可。
    document.cookie = `token=abc;expires=${date.toString()}`; // 给添加的cookie值加上日期

    $(function () {
        $('#b1').click(function () {
            var query = $('#t1').val()
            $.ajax({
                // url: `/get_data?loc=${query}`,
                url: '/post_data',
                method: 'post',
                data: JSON.stringify({  //
                    loc: query
                }),
                contentType: 'Application/json',
                success: function (data) {
                    weather_data = JSON.parse(data) //python json.loads
                    loc = weather_data['data']['name']
                    temp = weather_data['data']['temp']
                    desc = weather_data['data']['desc']
                    display_h1 = `${loc}的温度是${temp}度,天气状况:${desc}`
                    $('h1').text(display_h1)
                }
            })
        })
    })
</script>
<br><br><input id="t1" placeholder="请输入要查询的城市名字">
<button id="b1">查询天气预报</button>
</body>
</html>

 

3.搭建简单网站3

 

 

 

from flask import Flask,render_template,request
import requests
import json
app = Flask('name')


# **location**的温度是**temp**度,天气状况:**desc**

@app.route('/')  # 绑定处理函数
def index_url():
    location = '101010100'
    data = get_weather(location)
    return render_template('index.html',location=data['name'],temp=data['temp'],desc=data['desc'])

@app.route('/get_data')
def get_data():
    loc = request.args.get('loc')
    ua = requests.headers.get('User-Agent')
    token = requests.cookies.get('token')
    data = ''
    if 'python' in ua:
        msg = '检测到自动化程序'
    elif not token or token != 'abc':
        msg = 'Token参数错误'
    elif not loc:
        msg = '查询参数错误'
    else:
        data = get_weather(loc)
        msg = '请求正常'

    sender_data = {'msg':msg,'data':data}
    sender_str = json.dumps(sender_data)
    return sender_str

@app.route('/post_data', methods=['POST'])
def post_data():
    # loc = request.form.get('loc')  # 获取数据
    loc = request.json.get('loc') # payload
    data = get_weather(loc)
    msg = '请求正常'
    sender_data = {'msg': msg, 'data': data}
    sender_str = json.dumps(sender_data)
    return sender_str

# @app.route('/axios')
# def axios():
#     return '这是一个axios的请求数据'


def get_weather(location='101010100'):
    url = f'https://devapi.qweather.com/v7/weather/now?location={location}&key=251bac74792b4c53839b2394b5ee45cc'
    r = requests.get(url)

    # 确保请求成功
    if r.status_code == 200:
        data = json.loads(r.text)
        # 提取温度和天气状况
        temp = data['now']['temp']  # 温度
        desc = data['now']['text']  # 天气状况
        # 从 fxLink 中提取城市名称
        fx_link = data['fxLink']  # 获取 fxLink
        name = fx_link.split('/')[-1].split('-')[0]  # 提取城市名称,如 'beijing'
        # 构造返回的天气信息字典
        weather = {'name': name, 'temp': temp, 'desc': desc}
        return weather


if __name__ == '__main__':
    app.run(host='127.1.1.0', port=9999)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>查询天气预报</title>
</head>
<body>
<h1>{{ location }}的温度是{{ temp }}度,天气状况:{{ desc }}</h1>
<script src="static\jquery-1.10.1.min.js"></script>
<script>
    let date = new Date(); // 获取当前时间
    console.log(date.toString());
    date.setTime(date.getTime() + 1000 * 1000); // 单位为毫秒,设置几秒后删除cookie,这里为1000秒
    // 使用方法打开浏览器页面,查看cookie值,最后把下面设置cookie和时间的(下面这行)注释掉,静等两分钟查看浏览器即可。
    document.cookie = `token=abc;expires=${date.toString()}`; // 给添加的cookie值加上日期

    $(function () {
        $('#b1').click(function () {
            var query = $('#t1').val()
            $.ajax({
//              url: `/get_data?loc=${query}`,
                url: '/post_data',
                method: 'post',
                data: JSON.stringify({  //
                    loc: query
                }),
                contentType: 'Application/json',
                success: function (data) {
                    weather_data = JSON.parse(data) //python json.loads
                    loc = weather_data['data']['name']
                    temp = weather_data['data']['temp']
                    desc = weather_data['data']['desc']
                    display_h1 = `${loc}的温度是${temp}度,天气状况:${desc}`
                    $('h1').text(display_h1)
                }
            })
        })
    })
</script>
{#<script src="static/axios.min.js"></script>#}
{#<script>#}
{#    axios.interceptors.request.use(function (config) {#}
{#        console.log('拦截发送数据', config)#}
{#        //加密处理#}
{#        return config#}
{#    })#}
{##}
{#    axios.interceptors.response.use(function (config) {#}
{#        console.log('拦截收到的数据', config)#}
{#        //解密处理#}
{#        return config#}
{#    })#}
{##}
{#    window.onload = function () {#}
{#        document.getElementById('b1').addEventListener('click', function () {#}
{#            axios.get('/axios').then(function (res) {#}
{#                console.log(res.data)#}
{#            })#}
{#        })#}
{#    }#}
{#</script>#}
<br><br><input id="t1" placeholder="请输入要查询的城市名字">
<button id="b1">查询天气预报</button>
</body>
</html>

4.简单网站最终呈现:

 

 

此网页可以进行爬虫爬取数据,对比发现get,post等请求的不同与相同,同时兼具了一定的反爬机制等知识 

 

查询一下信阳城市天气,得到结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/896584.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

黑马JavaWeb-day02

什么是JavaScript&#xff1f; JavaScript&#xff1a;简称Js,是一门跨平台、面向对象的脚本语言。是用来控制网页行为的&#xff0c;它能使网页可交互 JavaScript和Java是完全不同的语言&#xff0c;无论是概念还是设计。但是基础语法类似。 JavaScript JavaScript引入方式…

第三方软件测试中心有什么特点?江苏软件测试中心推荐

随着软件市场的激烈竞争&#xff0c;软件企业越来越多&#xff0c;为了更好的服务用户以及专心于产品开发工作&#xff0c;将软件测试外包给第三方软件测试中心已经成为了行业发展趋势。第三方软件测试中心顾名思义就是区别于软件开发方和需求方的第三方存在&#xff0c;是专门…

使用 MongoDB 构建 AI:利用实时客户数据优化产品生命周期

在《使用 MongoDB 构建 AI》系列博文中&#xff0c;我们看到越来越多的企业正在利用 AI 技术优化产品研发和用户支持流程。例如&#xff0c;我们介绍了以下案例&#xff1a; Ventecon 的 AI 助手帮助产品经理生成和优化新产品规范 Cognigy 的对话式 AI 帮助企业使用任意语言&a…

《MYSQL实战45讲 》 优化器如何选择索引?

SHOW VARIABLES LIKE long_query_time; set long_query_time0 优化器如何选择索引&#xff1f; 1.扫描的行数 估计出各个索引大致的要扫描的行数&#xff0c;行数越少&#xff0c;效率越高。 索引的基数也叫区分度&#xff0c;就是这个索引所在的字段上不同的值又多少个。优…

10.21 多进程间通信-信号、消息队列

作业&#xff1a;使用消息队列实现两个进程间通信 编程代码&#xff1a;使用父子进程实现通信 msgsnd.c #include <myhead.h> //定义自定义函数用于接收僵尸进程 void handler(int signo){if(signoSIGCHLD){while(waitpid(-1,NULL,WNOHANG)>0);} } //定义存储消息队…

[云] Deploying Your First Serverless Application

• Goal: • Hands-on lab to get started with Serverless • Agenda: • Deploying Your First Serverless Application • Assignment Introduction Create and test function in AWS Lambda • Lets create an addition function using AWS Lambda. • To create the addi…

pipeline开发笔记

pipeline开发笔记 jenkins常用插件Build Authorization Token Root配置GitLab的webhooks(钩子)配置构建触发器--示例 piblish over sshBlue OceanWorkspace Cleanup PluginGit插件PipelineLocalization: Chinese (Simplified) --中文显示Build Environment Plugin 显示构建过程…

vscode离线状态ssh连接不断输入密码登不上:配置commit_id

如题&#xff0c;vscode在一个离线服务器上&#xff0c;通过remote-ssh登录远程服务器&#xff0c;不断弹出密码框&#xff0c;总是进不去&#xff0c;后来了解到主要是不同vscode版本需要下载对应抑制commit-id的vscode-server-linux-x64.tar.gz包。 1&#xff09;vscode, 点…

Jupyter Notebook汉化(中文版)

原版jupyter notebook是英文的&#xff0c;想要将其改为中文 在jupyter notebook所在环境输入以下命令 pip install jupyterlab-language-pack-zh-CN打开jupyter notebook&#xff0c;在设置语言中将其设置为中文

提升小学语文教学效果的思维导图方法

众所周知&#xff0c;教学不仅仅是站在讲台上传授知识&#xff0c;它还包括了备课、评估学生学习成果以及不断调整教学方法等多个环节。在面对教学中的各种挑战时&#xff0c;思维导图可以成为解决这些问题的有力工具。思维导图是一种利用图形来组织和表达发散性思维的工具&…

【DBA Part01】国产Linux上安装Oracle进行数据迁移

内容如下&#xff1a; 1.1.生产环境RHEL/OEL Linux8Oracle11gR2安装配置 1.2.国产麒麟操作系统Oracle11gR2安装配置 1.3.国产麒麟操作系统Oracle11gR2 RAC集群安装配置 1.4.Oracle11gR2迁移到国产麒麟操作系统&#xff08;单机/RAC&#xff09; 本阶段课程项目需求说明&am…

Spring配置/管理bean-IOC(控制反转) 非常详细!基于XML及其注解!案例分析! 建议复习收藏!

目录 1.Spring配置/管理bean介绍 2.基于XML配置bean 2.1基于id来获取bean对象 2.2基于类型获取bean对象 2.3通过指定构造器配置bean对象 2.4通过p名称空间配置bean 2.5通过ref配置bean(实现依赖注入) 2.6注入内部Bean对象&#xff0c;依赖注入另一种方式 2.7 注入集合…

PCL 基于距离阈值去除错误对应关系

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 获取初始对应点对 2.1.2 基于距离的对应关系筛选函数 2.1.3 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实…

批量处理文件权限:解决‘/usr/bin/chmod: Argument list too long’的有效方法

批量处理文件权限&#xff1a;解决‘/usr/bin/chmod: Argument list too long’的有效方法 错误原因解决方案1. 分批处理2. 使用xargs3. 增加ARG_MAX限制4. 使用脚本 结论 在Linux系统中&#xff0c;有时你可能会遇到这样的错误消息&#xff1a;“/usr/bin/chmod: Argument lis…

大数据之hive(分布式SQL计算工具)加安装部署

1.分布式SQL计算: 对数据进行统计分析&#xff0c; SQL是目前最为方便的编程工具. 2.hive:主要功能: 将 SQL语句翻译成MapReduce程序运行,提供用户分布式SQL计算能力 3.构建分布式SQL计算:(hive核心组件) 需要有: 一:元数据管理功能, 即&#xff1a;数据位置,数据结构,等对数…

SpringBoot篇(二、制作SpringBoot程序)

目录 一、代码位置 二、四种方式 1. IDEA联网版 2. 官网 3. 阿里云 4. 手动 五、在IDEA中隐藏指定文件/文件夹 六、复制工程-快速操作 七、更改引导类别名 一、代码位置 二、四种方式 1. IDEA联网版 2. 官网 官网制作&#xff1a;Spring Boot 3. 阿里云 阿里云版制…

HTTP和RPC通信协议

在软件开发中&#xff0c;通信协议扮演着关键的角色&#xff0c;它们定义了不同系统或组件之间进行通信的规则和方式。HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和RPC&#xff08;Remote Procedure Call Protocol&#xff09;是两种常见的通信协议。然而RPC 和…

开源模型应用落地-Qwen2.5-7B-Instruct与vllm实现推理加速的正确姿势-Gradio

一、前言 目前&#xff0c;Qwen模型已经升级到了2.5版本。无论是语言模型还是多模态模型&#xff0c;它们都是在大规模的多语言和多模态数据上进行预训练的&#xff0c;并通过高质量的数据进行后期微调&#xff0c;以更好地符合人类的需求。 Gradio作为一个强大的工具&#xff…

Windows--使用node.js的免安装版本

原文网址&#xff1a;Windows--使用node.js的免安装版本_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Windows下如何使用node.js的免安装版本。 下载 1.访问官网 https://nodejs.org/en 记住这个版本号&#xff0c;这个是长期支持的版本。 2.找到压缩包 点击其他下载&#…

Verilog基础:层次化标识符的使用

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 一、前言 Verilog HDL中的标识符(identifier)是一个为了引用而给一个Verilog对象起的名字&#xff0c;分为两大类&#xff1a;普通标识符大类和层次化标识符大类。…