python查询手机号归属地

#笔者使用的python IDE是Thonny,系统是win11(安装包的步骤查看往日笔记)

首先我们需要引入对应的包,requests:用于发送HTTP请求并获取响应。
lxml:用于解析HTML页面。
Flask:用于创建Web应用程序。
gevent.pywsgi:用于启动WSGI服务器。

import requests
from lxml import etree 
from flask import Flask,render_template,request
from gevent import pywsgi

我们要想在网页端实现,需要创建一个简单的web应用

app = Flask(__name__)

创建一个名为app的Flask应用程序事例

我们先写一个获得手机号码的函数

def get_phone(phone):
    url = f'https://www.ip138.com/mobile.asp?mobile={phone}&action=mobile'
    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 Edg/114.0.1823.67'}
    response = requests.get(url,headers=headers)
    response.encoding = 'utf-8'

这里的url源自ip38官网iP地址查询--手机号码查询归属地 | 邮政编码查询 | iP地址归属地查询 | 身份证号码验证在线查询网 (ip138.com)

进入这个网站

 

随便输入一个号码,比如笔者输入的是18836498752

可以查到对应的归属地是河南濮阳,发现上面的网址变成了


https://www.ip138.com/mobile.asp?mobile=18836498752&action=mobile

所以我们的url地址就可以写为

url = f'https://www.ip138.com/mobile.asp?mobile={phone}&action=mobile'#phone用来获得参数

headers模仿浏览器,reponse接受服务器的响应,并改编码为utf-8格式

 e = etree.HTML(response.text)
    datas = e.xpath(f"//tr/td[2]/span/text()")
    return datas

然后该解析数据了,etree模块解析响应的HTML页面,通过XPath表达式"//tr/td[2]/a[@href != '//jx.ip138.com/{phone}/']/text()"提取归属地信息。

这里的xpath表达式是指获取html元素从tr标签开始的第二个td的span标签文本值

接下来该定义路由函数

@app.route('/index3')
def index3():
    return render_template('index3.html')

@app.route('/search_phone')
def search_phone():
    phone = request.args.get('phone')
    return '<br/>'.join(get_phone(phone))

index3返回index3.html模板的内容,对应的视图函数用于处理查询手机号码的请求,从请求参数中获取手机号码,并调用get_phone(phone)函数获取归属地信息,然后将信息以HTML换行符<br/>连接并返回。

网页代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="/search_phone" method="get">
     手机号:<input type="text" name="phone" id="">
     <input type="submit" value="查询">
    </form>
</body>
</html>

server = pywsgi.WSGIServer(('127.0.0.1', 5005), app)
server.serve_forever()
最后使用gevent.pywsgi模块创建一个WSGI服务器,将应用程序绑定到127.0.0.1的5005端口,并启动服务器,使应用程序可以接收HTTP请求并响应。

这样就可以获得对应的电话归属地

python代码如下:

import requests
from lxml import etree 
from flask import Flask,render_template,request
from gevent import pywsgi
app = Flask(__name__)



def get_phone(phone):
    url = f'https://www.ip138.com/mobile.asp?mobile={phone}&action=mobile'
    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 Edg/114.0.1823.67'}
    response = requests.get(url,headers=headers)
    response.encoding = 'utf-8'

    #解析数据
    e = etree.HTML(response.text)
    datas = e.xpath(f"//tr/td[2]/span/text()")
    return datas
@app.route('/index3')
def index3():
    return render_template('index3.html')

@app.route('/search_phone')
def search_phone():
    phone = request.args.get('phone')
    return '<br/>'.join(get_phone(phone))

server = pywsgi.WSGIServer(('127.0.0.1', 5005), app)
server.serve_forever()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值