zoukankan      html  css  js  c++  java
  • 网页解析 -- bs4 和 xpath 的简单使用

    bs4

    BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库,它的使用方式相对于正则来说更加的简单方便

     

    中文文档:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0

    Tag

    name:每一个tag对象都有name属性,为标签的名字

    Attributes:在HTML中,tag可能有多个属性,所以tag属性的取值跟字典相同

    get_text():通过get_text()方法可以获取某个tag下所有的文本内容

    find_all()

    通过name搜索,find_all('a')可以直接查找出整个文档树中所有的a标签,并返回列表

    通过属性搜索,通过传递给attrs一个字典参数来搜索属性:soup.find_all(attrs={'class': 'sister'})

    通过文本搜索,soup.find_all(text="Lacie")

    通过正则表达式来筛选,将re.compile编译的对象传入find_all()方法,tags = soup.find_all(re.compile("^b"))

    CSS选择器

    使用select(),在其中传入字符串参数,就可以使用CSS选择器的语法来找到tag

     

    xpath

    相比于BeautifulSoup,Xpath在提取数据时会更有效率

    from lxml import etree

    表达式

    nodename   选取当前节点的所有nodename子节点

    /        根路径

    //         从整个文档当中搜索,不考虑位置

    .       当前节点

    ..         当前节点的父节点

    @       选取属性

    路径表达式

    //bookstore/book[1]            选取属于bookstore子元素的第一个 book元素

    //bookstore/book[last()]        选取属于bookstore子元素的最后一个book元素

    //bookstore/book[|ast()-1]        选取属于bookstore子元素的倒数第二个 book元素

    //bookstore/book[position0)<3]       选取最前面的两个属于bookstore元素的子元素的book元素

    //title[@lang]              选取所有拥有名为lang的属性的title 元素

    //title[@lang='eng']          选取所有title 元素,且这些元素拥有值为eng的lang属性

    //bookstore/book[price>35.00]     选取bookstore元素的所有book元素,且其中的price元素的值须大于35.00

    //bookstore/book[price> 35.00]/title   选取bookstore元素中的book元素的所有title元素,且其中的price元素的值须大于35.00

    选取未知节点

    *      匹配任何元素节点     //bookstore/*     选取bookstore元素的所有子元素

    @*     匹配任何属性节点     //*           选取文档中的所有元素

    node()   匹配任何类型的节点     //title[@*]        选取所有带有属性的title元素

    选取多个路径

    //book/title| //book/price        选取book元素的所有title和price元素

    //title | //price            选取文档中所有的title和price元素

    //bookstore/book/title| //price     选取bookstore元素的book元素的所有title元素,以及文档中所有的price元素

    获取文本

    用text()获取某个节点下的文本     //a/text()

    用string()获取某个节点下所有的文本  string(//book[1])

    其它

    contains()     包含于     //div[contains(@id,'note')]

    strats-with()   以什么开头

    多个属性组合            //input(@id='ffff' and @name ='username')

    将Element显示为字符

  • 相关阅读:
    机器学习实战
    python中的上下文管理器
    python中的参数传递
    SecureCRT在mac下无法输入中断命令
    Vim练级攻略(转)
    09_MySQL DQL_SQL99标准中的多表查询(外连接)
    08_MySQL DQL_SQL99标准中的多表查询(内连接)
    07_MySQL DQL_多表查询_等值内连接
    06_MySQL DQL_分组查询
    05_MySQL常见函数_分组函数
  • 原文地址:https://www.cnblogs.com/jiyu-hlzy/p/11821270.html
Copyright © 2011-2022 走看看