• 本网豪情赞助商

  • login failed for display 0 ubuntuallowed_u
  • css设定文本超出一行或多行就隐藏并显示省略
  • css设定文本超出一行或多行就隐藏并显示省略
  • 微信小程序如何把接口调用成功的回调函数返回
  • CodeIgniter - 数据库的增删改查
  • php生成excel的三种方式
  • 小程序UI库推荐
  • 多个句子竖向排列
  • 美团,大众点评,58城市行政区域和商圈数据实
  • java.security.InvalidKeyException: Illega
  • h3>

    python 2.7 3.6缺少 lxml etree使用 lxml 中的 xpath 高效提取文


    文章摘要: pip install lxml==3.8.0


    文章TAG:

    2.7 pip2.7 install lxml==3.8.0

    3.6  pip install lxml==4.1.0     

    最新的python3.7 安装不了 lxml etree

    # 我们爬取网页的目的,无非是先定位到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,\nworld!<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)