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 >
        <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">*&emsp;</span></td>
                    <td colspan="5"><input type="button" value="检测用户名"/><span>5-15位,请使用英文(a-z、A-Z)、数字(0-9)</span></td>
                </tr>
                <tr>
                    <td>密&emsp;码:</td>
                    <td colspan="2"><input type="password"/><span class="redStar">*&emsp;</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">*&emsp;</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">*&emsp;</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">*&emsp;</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">*&emsp;</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  type="text"/><span class="redStar">*&emsp;</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">*&emsp;</span></td>
                    <td colspan="5"><span>请填写在工商注册的公司/商号全称;<br/>无商号的个体经营者填写执照上的姓名,如:张三(个体经营)</span></td>
                </tr>
                <tr>
                    <td>你的职位:</td>
                    <td colspan="2"><input type="text"/><span class="redStar">*&emsp;</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   type="text"/><span class="redStar">*&emsp;</span><span>3个主要相关品名/服务名,最少要填一个。例如:太阳帽,布料,拉链</span>
                    </td>
                </tr>
                <tr>
                    <td>公司地址:</td>
                    <td colspan="7"><input   type="text" value="http://"/></td>
                </tr>
                <tr>
                    <td></td>
                    <td colspan="7"><input  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[@>) print(a[0]) #href属性 alink = selector.xpath('//div[@>) 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()