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

ops/2024/10/19 1:12:19/

1.搭建简单网站1

javascript">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']  # 获取 fxLinkname = fx_link.split('/')[-1].split('-')[0]  # 提取城市名称,如 'beijing'# 构造返回的天气信息字典weather = {'name': name, 'temp': temp, 'desc': desc}return weatherif __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

javascript">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') # payloaddata = get_weather(loc)msg = '请求正常'sender_data = {'msg': msg, 'data': data}sender_str = json.dumps(sender_data)return sender_strdef 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']  # 获取 fxLinkname = fx_link.split('/')[-1].split('-')[0]  # 提取城市名称,如 'beijing'# 构造返回的天气信息字典weather = {'name': name, 'temp': temp, 'desc': desc}return weatherif __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.loadsloc = 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

 

 

 

javascript">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') # payloaddata = 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']  # 获取 fxLinkname = fx_link.split('/')[-1].split('-')[0]  # 提取城市名称,如 'beijing'# 构造返回的天气信息字典weather = {'name': name, 'temp': temp, 'desc': desc}return weatherif __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.loadsloc = 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等请求的不同与相同,同时兼具了一定的反爬机制等知识 

 

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


http://www.ppmy.cn/ops/126598.html

相关文章

Chromium html<img>对应c++接口定义

<img src"tulip.jpg" alt"上海鲜花港 - 郁金香" /> 1、html_tag_names.json5中接口定义&#xff1a; &#xff08;third_party\blink\renderer\core\html\html_tag_names.json5&#xff09; {name: "img",constructorNeedsCreateElementF…

MySQL—CRUD—进阶— (一) |ू・ω・` )

文本目录&#xff1a; ❄️一、数据库约束&#xff1a; ☑1、约束类型&#xff1a; 1&#xff09;、NULL 约束&#xff1a; 2&#xff09;、唯一约束&#xff1a; 3&#xff09;、默认约束&#xff1a; 4&#xff09;、主键约束&#xff1a; 5&#xff09;、外键约束&#xff…

linux命令之less用法

less 分屏上下翻页浏览文件内容 补充说明 less命令 的作用与more十分相似&#xff0c;都可以用来浏览文字档案的内容&#xff0c;不同的是less命令允许用户向前或向后浏览文件&#xff0c;而more命令只能向前浏览。用less命令显示文件时&#xff0c;用PageUp键向上翻页&…

巨日禄AI故事转漫画视频创作教程

【一】新建作品 添加剧本&#xff0c;从30多个画风中选择一个匹配文案的画风。如果拿不准可以参考样图。巨日禄可以一次性制作6000字&#xff0c;20分钟以上的视频。&#xff08;第一次限制了1000字&#xff0c;仅为新用户更完整体验整个流程&#xff09; 【二】选择画风 那文…

设计模式之-策略模式配合枚举

1、定义枚举接收不同的参数使用不同的handler, 2、定义个handerl接口&#xff0c;统一方法处理&#xff0c;每个handler实现该接口 public interface IMethodHandler<T, R> {/*** 处理统一入口** param req*/R process(T req); } java3、定义一个简单工厂统一处理 Comp…

【LeetCode】每日一题 2024_10_18 使二进制数组全部等于 1 的最少操作次数 I(贪心)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 题目&#xff1a;使二进制数组全部等于 1 的最少操作次数 I 昨天的题目写不出来 . . . 如果我哪一天突然断更了&#xff0c;不用怀疑&#xff0c;就是那天的每日一题我写不了一点呜呜 代码与解题思路 今…

嵌入式系统---看门狗

在嵌入式系统中&#xff0c;看门狗定时器&#xff08;Watchdog Timer&#xff0c;WDT&#xff09;是一种常用的机制&#xff0c;用于检测和恢复系统在异常情况下的故障。如果系统因为某种原因&#xff08;如软件死循环&#xff09;而变得无响应&#xff0c;看门狗定时器可以自动…

【代码随想录——数组——二刷】

数组 1. 二分查找(704) 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 1.1 二分法的第一种写法 我们定义 target 是在…