一、Xpath路径的查找以及打印时遇到的乱码问题
1、Xpath路径的查找
假如你要查找图中中国移动的Xpath路径,你可以通过以下方法进行查找
点击中国移动,然后右击鼠标,将光标移到Copy处,找到Copy Xpath并点击,你即可得到中国移动的绝对Xptah路径
/html/body/div/div[2]/div[2]/div[2]/div[2]/div[2]/table/tbody/tr[3]/td[2]/a
也可以手动修改为//table/tbody/tr[3]/td[2]/a
原因如下:
此时的路径仅仅时包含中国移动而已,如要包含其他,则要适当修改层级参数
你也可以参考以下示例查找
从所有标签中找到含有属性class=’img’的一个节点,//img/@data-orginal:进入img的标签夹找到属性为data-orgina的值
2、Xpath数据提取出现的打印问题
一般跟着视频教程来走,有时候会出现以下问题
而解决这个问题的方法,在个别博主中是直接在Xpath路径的后面加上/text(),但是有时候会只打印出一些字典中的分割符,此时表面Xpath路径与实际解析内容的路径有偏差
这时,就要将Copy Xpath鱼/text()结合进行解码,因为往往手动输入的Xpath路径都不太准确
二、Flash模块的注意事项
1、flask模块的介绍
Flask是一个轻量级的Web应用框架,使用Python编写。它提供了一些工具和库,使得开发Web应用变得更加容易和快速。下面是一个简单的Flask应用程序示例: from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' if __name__ == '__main__': app.run() 这个应用程序定义了一个名为的Flask实例,并使用装饰器将函数绑定到根URL上。当用户访问根URL时,函数将被调用并返回“Hello, World!”字符串。app@app.route('/')hello_world()hello_world() Flask还提供了许多其他功能,例如模板引擎、表单处理、数据库集成等等。可以通过Flask官方文档来学习更多内容。 http://127.0.0.1:5000 http://127.0.0.1:访问到我们自己这台笔记本,:5000表示定位到正在打开运行的代码这个服务上来
2、@app.route('/')与@app.route('/search_phone')的区别
@app.route('/')是http://127.0.0.1:5000默认初始访问的页面,
@app.route('/search_phone')是指定访问的路径,访问链接写为:http://127.0.0.1:5000/search_phone
当有若干个@app.route('/')时,默认访问页面会以先执行的方式确认,如:
3、flash书写代码格式要严谨
跑web服务,注意,要在app = Flask(__name__)与app.run()之间包含返回网页的数据的函数,不然会Not Found
4、创建HTML时注意的问题
创建html文件时他的目录要写死,写成templates。
如果不写死,则要进行以下操作
否则
其他方面:如果出现Flask '....html' not Found
请检查下面几点:
1、项目下面要有templates文件夹,html文件要放进里面;
2、templates文件夹要和运行的py文件在同一级目录;
3、render_template('***.html')这里面的名字要正确;
4、app = Flask(__name__, template_folder='templates') template_folder必须是templates;
5、static为静态资源文件夹,必须跟templates同一级位置
三、完整代码以及运行结果
1、.py文件
#pip install lxml 解析数据模块
import requests
from lxml import etree
"""
flask提供web服务的模块
注意区分import requests;from flask import request
import requests :想服务器发送请求的模块
from flask import request:向自己建立的服务器发送请求的模块
"""
from flask import Flask,render_template,request
app = Flask(__name__) #创建一个可以支持web应用的对象
def get_mobile(phone):
#发送请求地址
url = f'https://www.ip138.com/mobile.asp?mobile={phone}&action=mobile'
#伪装
hearders = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'
}
#发送请求
respond = requests.get(url,headers=hearders)
#手动设置编码格式
respond.encoding = 'utf-8'
# print(respond.text)
#解析数据
e = etree.HTML(respond.text)
#编写Xpath提取数据
datas = e.xpath('//tbody/tr/td[2]/a/text()')
return datas
"""
for p in datas:
text = p.text
print(text)
"""
get_mobile(18776352560)
@app.route('/') #如果有若干个声明@app.route('/') ,则会按照先执行先默认的方式来确定默认访问界面
def index():
return render_template('index.html')
#写成这样是默认访问的主页 @app.route('/') 建立路由
@app.route('/search_phone') #你也可以写成这样@app.route('/search_phone'),但要在http://127.0.0.1:5000加上/search_phone
def search_phone():
phone = request.args.get('phone')
data = get_mobile(phone)
return '<br/>'.join(data)#<br/>换行,''.join字符串连接
app.run(debug=True) #跑web服务,注意,要在app = Flask(__name__)与app.run()之间包含返回网页的数据,不然会Not Found
2、.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/search_phone" method="get">
手机号:<input type="text" name="phone" id="">
<input type="submit" value="查询">
</form>
</body>
</html>