python简单使用xpath查找网页元素
xPath
一种HTML和XML的查询语言,他能在XML和HTML的树状结构中寻找节点
安装
pip install lxml
HTML
超文本标记语言,是一种规范,一种标注,是构成网页文档的主要语言
URL
统一资源定位器,互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置
以及浏览应该怎么处理它。
xPath的使用
获取文本
//标签1[@属性1="属性值1"]/标签2[@属性2="属性值"]/..../text()
获取属性值
//标签1[@属性1="属性值1"]/标签2[@属性2="属性值"]/..../@属性n
所需要的html文档
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>注册页面</title> <style> table{ border: 1px solid beige; } span{ color: #66CCFF; } th{ background-color: gainsboro; } tr{ border: 1px solid beige; } td{ border: 1px solid aliceblue; } .redText{ color: red; } .redStar{ color: red; } </style> </head> <body> <p> 开始 </p> <!-- 8列--> <h3>标题,我是一个大帅哥</h3> <ul> <li>内容1</li> <li>内容2</li> <li class="important">内容3important</li> <li>内容4</li> <li>内容5</li> </ul> <p> 中间 </p> <div id = "container"> 段落文字 <a href="http://www.baidu.com" title="超链接">跳转到百度首页</a> </div> <p> 最后 </p> <form action=""> <table align="center" cellspacing="0"> <tr> <th colspan="8" align="left">1.会员登录名和密码</th> </tr> <tr> <td>用户名:</td> <td colspan="2"><input type="text"/><span class="redStar">* </span></td> <td colspan="5"><input type="button" value="检测用户名"/><span>5-15位,请使用英文(a-z、A-Z)、数字(0-9)</span></td> </tr> <tr> <td>密 码:</td> <td colspan="2"><input type="password"/><span class="redStar">* </span></td> <td colspan="5"><span>5-15位,请使用英文(a-z)、数字(0-9)注意区分大小写;<br/>密码不能与登录名相同;易记;难猜;</span></td> </tr> <tr> <td>再次输入密码:</td> <td colspan="2"><input type="password"/><span class="redStar">* </span></td> <td colspan="5"><span>两次输入的密码必须一致</span></td> </tr> <tr> <th colspan="8" align="left">2.姓名和联系方式</th> </tr> <tr> <td>真实姓名:</td> <td colspan="2"><input type="text"/><span class="redStar">* </span></td> <td colspan="5"><input type="radio" checked="checked" name="Sex" value="male"/>先生<input type="radio" name="Sex" value="female"/>小姐</td> </tr> <tr> <td>电子邮箱:</td> <td colspan="2"><input type="text"/><span class="redStar">* </span></td> <td colspan="5"><span class="redText">非常重要!</span><br/><span>这是客户与您联系的首选方式,请一定填写真实。</span></td> </tr> <tr> <td>固定电话:</td> <td colspan="2"><input type="text"/><span class="redStar">* </span></td> <td colspan="5"><span>区号+电话号码</span></td> </tr> <tr> <td>公司所在地:</td> <td colspan="7"> <select> <option>北京</option> <option>上海</option> <option>成都</option> </select> <select> <option>东城 </option> <option>武侯区</option> <option>金牛区</option> </select> </td> </tr> <tr> <td>街道地址:</td> <td colspan="5"><input style="width: 350px;" type="text"/><span class="redStar">* </span></td> <td colspan="2"><span>填写县(区)、街道、门牌号</span></td> </tr> <tr> <td>传真号码:</td> <td colspan="7"><input type="text"/></td> </tr> <tr> <td>手机号码:</td> <td colspan="7"><input type="text"/></td> </tr> <tr> <td>邮政编码:</td> <td colspan="7"><input type="text"/></td> </tr> <tr> <th colspan="8" align="left">3.公司名称和主营业务</th> </tr> <tr> <td>贵公司名称:</td> <td colspan="2"><input type="text"/><span class="redStar">* </span></td> <td colspan="5"><span>请填写在工商注册的公司/商号全称;<br/>无商号的个体经营者填写执照上的姓名,如:张三(个体经营)</span></td> </tr> <tr> <td>你的职位:</td> <td colspan="2"><input type="text"/><span class="redStar">* </span></td> <td colspan="5"></td> </tr> <tr> <td>主营行业:</td> <td colspan="2"> <select> <option>电子电工</option> <option>IT科技</option> <option>小猪佩奇</option> </select> </td> <td colspan="5"><span>请正确选择。您会收到该行业、该产品的供求信息</span></td> </tr> <tr> <td>主营产品/服务:</td> <td colspan="7"><input style="width: 250px;" type="text"/><span class="redStar">* </span><span>3个主要相关品名/服务名,最少要填一个。例如:太阳帽,布料,拉链</span> </td> </tr> <tr> <td>公司地址:</td> <td colspan="7"><input style="color: darkgrey;width: 250px;" type="text" value="http://"/></td> </tr> <tr> <td></td> <td colspan="7"><input style="background-color: #00FF00;color: white" type="submit" value="确认提交"/></td> </tr> </table> </form> </body> </html> --------------------- 作者:郑清 来源:CSDN 原文:https://blog.csdn.net/qq_38225558/article/details/82700939 版权声明:本文为博主原创文章,转载请附上博文链接!
所涉及的python代码
from lxml import html def parse(): """"将html文件中的内容,使用小path进行提取""" #读取文件中的内容 f = open('./venv/static_/index.html','r',encoding = 'utf-8') s = f.read() selector = html.fromstring(s) #j解析标题 h3 = selector.xpath('/html/body/h3/text()') print(h3[0])#这里取到的是个list,我用使用列表获取 f.close() #解析ul里面的内容 ul = selector.xpath('/html/body/ul/li') # ul = selector.xpath('//ul/li')也可以使用 print(len(ul)) for li in ul: print(li.xpath('text()')[0]) #解析tr里面的内容 # tr = selector.xpath('/html/body/form/table/tr/td/text()') # print(tr) #解析ul指定的元素值 ul2 = selector.xpath('/html/body/ul/li[@class="important"]/text()') print(ul2) #解析ul指定的元素属性 a = selector.xpath('//div[@id="container"]/a/text()') print(a[0]) #href属性 alink = selector.xpath('//div[@id="container"]/a/@href') print(alink[0]) #解析p标签 p = selector.xpath('/html/body/p/text()') # p = selector.xpath('/html/body/p[last()]/text()') #获取最后一个 print(len(p)) print(p[0]) #使用浏览的xpath生成工具 test = selector.xpath('/html/body/form/table/tr[1]/th/text()')#只能借鉴/html/body/form/table/tbody/tr[1]/th print(test[0]) if __name__== '__main__': parse()
少壮不努力,老大徒伤悲