zoukankan      html  css  js  c++  java
  • 读Bsautiful Soup库有感

    Beautiful Soup库](https://www.cnblogs.com/wkhzwmr/p/15230635.html)


    Bequtiful会自动将输入的文档转化为Unicode编码,输出文档转化为UTF-8编码。一般在使用的过程中不需要考虑编码的问题,除非文档没有指定编码,这啥意思呢,是指爬取下来的文档还是啥,摸棱两可。

    使用Beautiful Soup库

    1.创建个Beautiful Soup对象
    使用BeautifulSoup()类,该类第一个参数需要指定待分析的html代码,第二个参数指定lxml解析器(第二个参数加引号(''))
    在解析HTML的过程中BeautifulSoup对象会将HTML中的各个级别的标签映射成对象中同级别的属性。

    节点选择器

    可以通过节点的名称来选取节点,然后再用string属性就可以得到节点内的文本
    节点的属性是attrs

    嵌套选择节点

    通过BeautifulSoup对象的属性获得的每一个节点都是一个bs4.element.Tag对象。在该对象的基础上同样可以使用节点选择器进行下一步的选择,也就是继续选择Tag对应的节点的子节点。

    soup = BeautifulSoup(html,'lxml')
    head = soup.head
    print(head.title.string)
    

    选择子节点

    1.直接获取子节点
    通过contents和childern返回一个可迭代对象
    2.获取所有子孙节点
    可以属性descendants属性,该属性返回一个产生器,需要使用for循环迭代才可以输出产生器的值

    选择父节点

    parent属性返回某个节点的直接父节点
    parents属性会返回一个可迭代对象,获得当前节点所有的父节点对应的Tag对象

    print(soup.a.parent)
    print(soup.a.parent['class'])
    for parent in soup.a.parents:
        print('<',parent.name,'>')
    

    选择兄弟节点

    next_sibling属性获得当前节点的下一个兄弟节点,previous_sibling属性获得当前节点的上一个兄弟节点,
    next_siblings属性获得当前节点后面的所有兄弟节点,
    previous_siblings属性获得当前节点前面的所有兄弟节点,

    方法选择器

    find_all方法用于根据节点名、属性、文本内容等选择符合要求的节点。
    常用的参数有name、attrs和text
    name参数用于指定节点名,find_all方法会选取所有节点名为name参数值相同的节点,find_alll方法返回一个bs4.element.ResultSet对象,该对象是可迭代的。

    soup = BeautifulSoup(html,'lxml')
    ulTags = soup.find_all(name='ul')
    

    attrs参数通过节点的属性查找,attrs参数是一个字典类型,key是节点属性名,value是节点属性值。
    虾米那使用attrs参数

    tags = soup.find_all(class_='item2')
    print(tags)
    tags = soup.find_all(id='button1')
    print(tags)
    

    text参数可以搜索匹配的文本节点,传入的参数是字符串,也可以是正则表达式对象(经过re.compile()编译的表达式)

    tags = soup.find_all(text='geekori.com')
    print(tags)
    tags = soup.find_all(text=re.compile('Hello'))
    

    find方法

    find方法用于查询满足条件的第一个节点,而find_all方法用于查询所有满足条件的节点
    find方法和find_all方法的参数和使用方法完全相同

    CSS选择器

    使用Tag对象的select()方法,该方法接收一个字符串类型的CSS选择器,常用的CSS选择器有

    1. .classname:选取样式值为classname的节点
    2. nodename:选取节点名为Nodename的节点
      3.#idname:寻去id属性值为idname的节点
      返回的因该是个列表,可以使用索引的方法提取元素

    嵌套选择器

    就是在选取了一些节点的情况下,还可以继续使用CSS选择器。但这里你要知晓自己目前所在的标签在哪

    获取属性值和文本

    之前上面使用attrs可以返回属性值,这里同样可以,因为select()方法返回的是Tag对象的集合。
    获取问版本可以使用string,也可以使用CSS选择器特有的get_text()方法

    努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
  • 相关阅读:
    生产环境elk
    命令行操作es(转)
    makedown在线生成工具
    网站渗透测试工具zap2docker-stable
    ansible常用单模块
    程序员应该怎样和领导相处(转)
    Css设置毛玻璃
    tar.gz 文件解压
    Ubuntu:命令行安装可视化界面
    汇编语言开发总结
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15367114.html
Copyright © 2011-2022 走看看