zoukankan      html  css  js  c++  java
  • XPath

    • XPath(XML Path Language),是一门在XML文档中查找信息的语言

    • 官方文档:http://www.w3school.com.cn/xpath/index.asp

    • XPath开发工具

      • 开元的XPath表达式工具:XMLQuire
      • chrome插件:Xpath Helper
      • Firefox插件:XPath CHecker
    • 常用路径表达式:

      • nodename:选取此节点的所有子节点
      • /:从根节点开始选
      • //:选取原物,而不考虑元素的具体位置
      • .:当前节点
      • ..:父节点
      • @:选取属性
      • 案例
        • bookstore:选取bookstore下的所有子节点
        • /bookstore:选取根元素
        • bookstore/book:选取bookstore的所有为book的子元素
        • //book:选取book子元素
        • //@lang:选取名称为lang的所有属性
    • 谓语(Predicates)

      • 谓语用来查找某个特定的节点,被镶嵌在方括号中
      • /bookstore/book[1]:选取第一个属于bookstore下叫book的元素
      • /bookstore/book[last()]:选取最后一个属于bookstore下叫book的元素
      • /bookstore/book[last()-1]:选取倒数第二个属于bookstore下叫book的元素
      • /bookstore/book[position()❤️]:选取属于bookstore下叫book的前两个元素
      • /bookstore/book[@lang]:选取属于bookstore下叫book的,含有属性lang元素
      • /bookstore/book[@lang='cn']:选取属于bookstore下叫book的,含有属性lang的值是cn元素
      • /bookstore/book[@lprice<90]/title
    • 通配符

      • '*':任何元素节点
      • @*:匹配任何属性节点
      • node():匹配任何类型的节点
    • 选取多个路径

      • //book/title | //book/author:选取book元素中的title和author元素、
      • //title | //price:选取文档中所有的title和price元素

    lxml库

    • python的HTML/XML的解析器
    • 官方文档:https://lxml.de/index.html
    • 功能:
      • 解析HTML,案例v29
      • 文件读取,案例v30,v31
      • etree和XPath的配合使用,案例v32
    from lxml import etree
    
    html = etree.parse("./v31.html")
    print(type(html))
    
    rst = html.xpath('//book')
    print(type(rst))
    print(rst)
    
    rst = html.xpath("//book[@category='sports']")
    print(type(rst))
    print(rst)
    
    rst = html.xpath("//book[@category='sports']/year")
    rst = rst[0]
    print(type(rst))
    print(rst.tag)
    print(rst.text)
    

    CSS选择器 BeautifulSoup4

    • 现在使用BeautifulSoup4

    • http://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/

    • 几个常用的提取信息工具比较

      • 正则:很快,不好用,不许安装
      • beautifulsoup:慢,使用简单,安装简单
      • lxml:比较快,使用简单,安装一般
    • 案例 v33

    • 四大对象

      • Tag
        • 对应Html中的标签
        • 可以通过soup.tag_name
        • tag两个重要属性
          • name
          • attrs
        • a34
      • NavigableString
        • 对应内容值
      • BeautifulSoup
        • 表示的是一个文档的内容,大部分可以把他当做tag对象
      • Comment
        • 特殊类型的NavigableString对象
        • 对其输出,则内容不包括注释符号
    • 遍历文档对象

      • contents:tag的子节点以列表的方式给出
      • children:子节点以迭代器形式返回
      • descendants:所有孙节点
      • string
    • 搜索文档对象

      • find_all(name, attrs, recursive, text, **kwargs)
        • name:按照那个字符串搜索,可以传入的内容为
          • 字符串
          • 正则
          • 列表
        • kewwortd参数,可以用来表示属性
        • text:对应tag的文本值
    • css选择器

      • 使用soup.select,返回一个列表
      • 通过标签名称:soup.select('titile')
      • 通过雷鸣:soup.select(".content")
      • id查找:soup.select("#name_id")
      • 组合查找:soup.select("div #input_content")
      • 属性查找:soup.select("img[class='photo']")
      • 获取tag内容:tag.get_text
    # coding=utf-8
    
    from urllib import request
    from bs4 import BeautifulSoup
    
    
    url = "http://www.baidu.com"
    
    rsp = request.urlopen(url)
    content = rsp.read()
    soup = BeautifulSoup(content, 'lxml')
    
    titles = soup.select('title')
    print(titles)
    
    metas = soup.select("meta[content='always']")
    print(metas)
    
  • 相关阅读:
    git commit --amend
    webpack代码分割
    selection And range js
    自动化测试
    python学习路线图
    Java--解决JDK14没有jre问题
    Java-win下环境变量设置
    Jenkins忘记admin密码拯救方法
    Windows或linux下 pip设置默认豆瓣镜像源
    ChromeDriver与Chrome版本对应参照表及ChromeDriver下载链接
  • 原文地址:https://www.cnblogs.com/rener0424/p/10938228.html
Copyright © 2011-2022 走看看