zoukankan      html  css  js  c++  java
  • 使用 lxml 中的 xpath 高效提取文本与标签属性值

    # 我们爬取网页的目的,无非是先定位到DOM树的节点,然后取其文本或属性值

    myPage = '''<html>
    <title>TITLE</title>
    <body>
    <h1>我的博客</h1>
    <div>我的文章</div>
    <div id="photos">
    <img src="pic1.jpeg"/><span id="pic1">PIC1 is beautiful!</span>
    <img src="pic2.jpeg"/><span id="pic2">PIC2 is beautiful!</span>
    <p><a href="http://www.example.com/more_pic.html">更多美图</a></p>
    <a href="http://www.baidu.com">去往百度</a>
    <a href="http://www.163.com">去往网易</a>
    <a href="http://www.sohu.com">去往搜狐</a>
    </div>
    <p class="myclassname">Hello, world!<br/>-- by Adam</p>
    <div class="foot">放在尾部的其他一些说明</div>
    </body>
    </html>'''

    html = etree.fromstring(myPage)

    # 一、定位
    divs1 = html.xpath('//div')
    divs2 = html.xpath('//div[@id]')
    divs3 = html.xpath('//div[@class="foot"]')
    divs4 = html.xpath('//div[@*]')
    divs5 = html.xpath('//div[1]')
    divs6 = html.xpath('//div[last()-1]')
    divs7 = html.xpath('//div[position()<3]')
    divs8 = html.xpath('//div|//h1')
    divs9 = html.xpath('//div[not(@*)]')

    # 二、取文本 text() 区别 html.xpath('string()')
    text1 = html.xpath('//div/text()')
    text2 = html.xpath('//div[@id]/text()')
    text3 = html.xpath('//div[@class="foot"]/text()')
    text4 = html.xpath('//div[@*]/text()')
    text5 = html.xpath('//div[1]/text()')
    text6 = html.xpath('//div[last()-1]/text()')
    text7 = html.xpath('//div[position()<3]/text()')
    text8 = html.xpath('//div/text()|//h1/text()')


    # 三、取属性 @
    value1 = html.xpath('//a/@href')
    value2 = html.xpath('//img/@src')
    value3 = html.xpath('//div[2]/span/@id')


    # 四、定位(进阶)
    # 1.文档(DOM)元素(Element)的find,findall方法
    divs = html.xpath('//div[position()<3]')
    for div in divs:
    ass = div.findall('a') # 这里只能找到:div->a, 找不到:div->p->a
    for a in ass:
    if a is not None:
    #print(dir(a))
    print(a.text, a.attrib.get('href')) #文档(DOM)元素(Element)的属性:text, attrib

    # 2.与1等价
    a_href = html.xpath('//div[position()<3]/a/@href')
    print(a_href)

    # 3.注意与1、2的区别
    a_href = html.xpath('//div[position()<3]//a/@href')
    print(a_href)

  • 相关阅读:
    为图片指定区域添加链接
    数值取值范围问题
    【leetcode】柱状图中最大的矩形(第二遍)
    【leetcode 33】搜索旋转排序数组(第二遍)
    【Educational Codeforces Round 81 (Rated for Div. 2) C】Obtain The String
    【Educational Codeforces Round 81 (Rated for Div. 2) B】Infinite Prefixes
    【Educational Codeforces Round 81 (Rated for Div. 2) A】Display The Number
    【Codeforces 716B】Complete the Word
    一个简陋的留言板
    HTML,CSS,JavaScript,AJAX,JSP,Servlet,JDBC,Structs,Spring,Hibernate,Xml等概念
  • 原文地址:https://www.cnblogs.com/dxqNet/p/10136665.html
Copyright © 2011-2022 走看看