Python爬取IP归属地信息及各个地区天气信息

news/2024/12/22 9:07:57/

一、实现样式

ip查询
weather

二、核心点

1、语言:Python、HTML,CSS
2、python web框架 Flask
3、三方库:requests、xpath
4、爬取网站:https://ip138.com/
5、文档结构
目录

三、代码

ipquery.py

import requests
from lxml import etree
# 请求user-agent
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'}def getIpInfo(ip):ipurl = f"https://ip138.com/iplookup.php?ip={ip}&action=2"res = requests.get(ipurl,headers = headers)e = etree.HTML(res.text)ip = e.xpath("//div[@class='caption']//h1//text()")ipinfo = e.xpath("//div[@class='table-box']//tbody//tr//td[2]//text()")ipinfo.append(ip[0])return ipinfo

searchWeather.py

import requests
from lxml import etree,html
import re# 请求user-agent
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'}
def getWeather(location):weatherUrl = f"https://www.wentian123.com/search/?location={location}"res = requests.get(weatherUrl,headers = headers)e = etree.HTML(res.text)weather = e.xpath("//table//tbody//td//text()")#处理数据# 去除'\n'weathernew = [x.strip() for x in weather]# 去掉空字符串''while ''  in weathernew:weathernew.remove('')# print(weathernew)# 数据分组 6个一组weatherInfo = [weathernew[i:i+6] for i in range(0,len(weathernew),6)]return weatherInfo

query.py

from flask import Flask,render_template,requestfrom ipquery.ipquery import getIpInfo
from searchWeather.seachWeather import getWeather
app = Flask(__name__)# 主页
@app.route('/')
def index():return render_template('index.html',weather = [],ipinfo = [])# ip地址查询
@app.route('/ipquery')
def ipquery():ip = request.args.get('ip')ipinfo = getIpInfo(ip)# print(ipinfo[1])return render_template('index.html',ipinfo = ipinfo,weather = [])# 天气查询
@app.route('/weather')
def getweather():location = request.args.get('location')# print(location)weather = getWeather(location)# print(weather)return render_template('index.html',weather = weather,ipinfo = [])if __name__ == '__main__':app.run(port=5000, debug=True)

index.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- 最新版本的 Bootstrap 核心 CSS 文件 --><link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"><title>查询网站</title>
</head>
<style>* {margin: 0 auto;padding: 0 auto;/* display: flex; */}.public {box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04);margin: 0 auto;width: fit-content;padding: 40px 60px;text-align: center;margin-top: 20px;}
</style><body style="margin: 0 auto;"><!-- ip查询 --><div><div class="public"><h3>IP归属地查询</h3></h3></h3><form class="form-inline" action="/ipquery"><div class="form-group"><label for="exampleInputEmail2">IP地址</label><input type="text" class="form-control" name="ip" placeholder="请输入需要查询的IP地址" style="width: 300px;"></div><button type="submit" class="btn btn-primary">查询</button></form><table class="table table-bordered" style="width: 100%;margin-top: 20px;"><tr><th style="text-align: center;">IP地址</th><th style="text-align: center;">ASN归属地</th><th style="text-align: center;">运营商</th></tr>{% if ipinfo != [] %}<tr><td>{{ipinfo[-1]}}</td><td>{{ipinfo[0]}}</td><td>{{ipinfo[1]}}</td></tr>{% endif %}</table></div><!-- 天气查询 --><div class="public"><form class="form-inline" action="/weather"><div class="form-group"><input type="text" class="form-control" name="location" placeholder="请输入市区县名称、区号或者邮政" style="width: 300px;"></div><button type="submit" class="btn btn-primary">查询</button></form><table class="table table-bordered table-striped table-hover" style="width: 100%;margin-top: 20px;">{% if weather != [] %}<tbody>{% for i in weather %}<tr><td colspan="4" style="font-size: 16px;">{{i[0]}}</td></tr><tr><td>{{i[1]}}{{i[2]}}</td><!-- <td>{{i[2]}}</td> --><td>{{i[3]}}</td><td>{{i[4]}}</td><td>{{i[5]}}</td></tr>{% endfor %}</tbody>{% endif %}</div></div>
</body>
</html>

四、总结

初学python,很多代码写的很冗余,不够简洁,还有一些逻辑没有处理好,感谢贵网站 信息查询网站 提供的接口数据,里面还有很多类型的查询,这边就简单写了两个查询方法的爬虫,继续加油!!!


http://www.ppmy.cn/news/987268.html

相关文章

【MMdetection3d】Step1:环境搭建

Step1:环境搭建 1.创建并激活虚拟环境1.1 用官方Pytorch指令安装&#xff01;1.2 用官方mmcv指令安装&#xff01; 2 安装MMDetection3 克隆编译mmdetection3d4 环境测试5 测试demo 在Conda虚拟环境中搭建MMdetection3d环境 1.创建并激活虚拟环境 conda create -n mm3d python…

类方法(成员方法)与构造方法的区别与联系

&#xff08;粗略理解为&#xff1a;除了构造方法以外的所有方法都是成员方法&#xff09; 区别&#xff1a; 构造方法在创建对象时用new调用&#xff0c;是为了给对象的数据进行初始化&#xff0c;没有返回值。 成员方法是实现对类中成员变量的操作&#xff0c;提供某些功能…

CS144学习笔记(1):Internet and IP

1.网络应用 网络应用可以在世界范围内交换数据&#xff0c;例如你可以通过浏览器读取出版社服务器提供的文章。网络应用的基本模型&#xff1a;两台主机各自在本地运行一个程序&#xff0c;程序通过网络来通信。 最常用的通信模型使用双向可靠字节流&#xff0c;通信的两台主机…

docker swarm查看日志汇总

目录 从头显示所有日志并持续输出 显示末尾最后5行并持续输出 查看最近五分钟内的日志 查看指定时间之后的日志并持续输出 从头显示所有日志并持续输出 docker service logs -f xx 显示末尾最后5行并持续输出 docker service logs -f -n 5 xx或docker service logs -f…

【无标题】深圳卫视专访行云创新马洪喜:拥抱AI与云原生,深耕云智一体化创新

人工智能&#xff08;AI&#xff09;是引领新一轮科技革命和产业变革的重要驱动力。因此&#xff0c;深圳出台相关行动方案&#xff0c;统筹设立规模1,000亿元的人工智能基金群&#xff0c;引导产业集聚培育企业梯队&#xff0c;积极打造国家新一代人工智能创新发展试验区和国家…

Mybatis-Flex 比 MyBatis-Plus更轻量,高性能

一、Mybatis-Flex是什么&#xff1f; Mybatis-Flex 是一个优雅的 Mybatis 增强框架&#xff0c;它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库&#xff0c;其内置的 QueryWrapper^亮点 帮助我们极大的减少了 SQL 编写的工作的同时…

CSDN博客置顶操作

目录 背景: 过程: 第一步: 第二步&#xff1a; 总结&#xff1a; 背景: 对于文章博主都想把优质的好文放在第一位与大家分享&#xff0c;让更多的人看到自己的文章以便更好的展现出来&#xff0c;那么就是置顶。 过程: 第一步: 打开CSDN主页文章&#xff0c;将鼠标放在…

C#使用LINQ查询操作符实例代码(二)

目录 六、连表操作符 1、内连接2、左外连接(DefaultIfEmpty)3、组连接七、集合操作 八、分区操作符 1、Take()&#xff1a;2、TakeWhile()&#xff1a;3、Skip()&#xff1a;4、SkipWhile()&#xff1a;九、聚合操作符 1、Count&#xff1a; 返回集合项数。 2、LongCount&…