• spark学习进度10-beautifulsoup库的几个常用方法及正则表达式


    BeautifulSoup库通俗来说是【解析、遍历、维护“标签树”(例如html、xml等格式的数据对象)的功能库 】
    一个简单的使用BeautifulSoup库的demo:

    复制代码
    # coding:utf-8
    
    from bs4 import BeautifulSoup
    import requests
    
    url = 'http://python123.io/ws/demo.html'
    r = requests.get(url)
    demo = r.text  # 服务器返回响应
    
    soup = BeautifulSoup(demo, "html.parser")
    """
    demo 表示被解析的html格式的内容
    html.parser表示解析用的解析器
    """
    print(soup)  # 输出响应的html对象
    print(soup.prettify())  # 使用prettify()格式化显示输出
    复制代码

    得到一个BeautifulSoup对象后,一般通过BeautifulSoup类的基本元素来提取html中的内容

    2.提取html中的信息

     demo中的html内容如下:

    (1)

    print(soup.title)  # 获取html的title标签的信息
    print(soup.a)  # 获取html的a标签的信息(soup.a默认获取第一个a标签,想获取全部就用for循环去遍历)
    print(soup.a.name)   # 获取a标签的名字
    print(soup.a.parent.name)   # a标签的父标签(上一级标签)的名字
    print(soup.a.parent.parent.name)  # a标签的父标签的父标签的名字

    (2)

    print('a标签类型是:', type(soup.a))   # 查看a标签的类型
    print('第一个a标签的属性是:', soup.a.attrs)  # 获取a标签的所有属性(注意到格式是字典)
    print('a标签属性的类型是:', type(soup.a.attrs))  # 查看a标签属性的类型
    print('a标签的class属性是:', soup.a.attrs['class'])   # 因为是字典,通过字典的方式获取a标签的class属性
    print('a标签的href属性是:', soup.a.attrs['href'])   # 同样,通过字典的方式获取a标签的href属性

    (3)

    print('第一个a标签的内容是:', soup.a.string)  # a标签的非属性字符串信息,表示尖括号之间的那部分字符串
    print('a标签的非属性字符串的类型是:', type(soup.a.string))  # 查看标签string字符串的类型
    print('第一个p标签的内容是:', soup.p.string)  # p标签的字符串信息(注意p标签中还有个b标签,但是打印string时并未打印b标签,说明string类型是可跨越多个标签层次)

    介绍一下find_all()方法:

    常用通过find_all()方法来查找标签元素:<>.find_all(nameattrsrecursivestring**kwargs) ,返回一个列表类型,存储查找的结果 

    • name:对标签名称的检索字符串
    • attrs对标签属性值的检索字符串,可标注属性检索
    • recursive是否对子孙全部检索,默认True
    • string:<>…</>中字符串区域的检索字符串 

    (1)

    print('所有a标签的内容:', soup.find_all('a')) # 使用find_all()方法通过标签名称查找a标签,返回的是一个列表类型
    print('a标签和b标签的内容:', soup.find_all(['a', 'b']))  # 把a标签和b标签作为一个列表传递,可以一次找到a标签和b标签

    (2)

    for t in soup.find_all('a'):  # for循环遍历所有a标签,并把返回列表中的内容赋给t
          print('t的值是:', t)  # link得到的是标签对象
          print('t的类型是:', type(t))
          print('a标签中的href属性是:', t.get('href'))  # 获取a标签中的url链接

    (3)

    for i in soup.find_all(True):  # 如果给出的标签名称是True,则找到所有标签
        print('标签名称:', i.name)  # 打印标签名称

    (4)

    print('href属性为http..的a标签元素是:', soup.find_all('a', href='http://www.icourse163.org/course/BIT-268001'))  # 标注属性检索
    print('class属性为title的标签元素是:', soup.find_all(class_='title'))  # 指定属性,查找class属性为title的标签元素,注意因为class是python的关键字,所以这里需要加个下划线'_'
    print('id属性为link1的标签元素是:', soup.find_all(id='link1'))  # 查找id属性为link1的标签元素

     (5)

    print(soup.head)  # head标签
    print(soup.head.contents)   # head标签的儿子标签,contents返回的是列表类型
    print(soup.body.contents)   # body标签的儿子标签
    """对于一个标签的儿子节点,不仅包括标签节点,也包括字符串节点,比如返回结果中的 
    ,这里可以用type()方法用来区分"""

    (6)

    print(len(soup.body.contents))  # 获得body标签儿子节点的数量
    print(soup.body.contents[1])   # 通过列表索引获取第一个节点的内容

    (7)

    print(type(soup.body.children))  # children返回的是一个迭代对象,只能通过for循环来使用,不能直接通过索引来读取其中的内容
    for i in soup.body.children:   # 通过for循环遍历body标签的儿子节点
        print(i.name)   # 打印节点的名字

     正则表达式:

    re.findall(),re.search()re.match()是Python正则表达式中常用的方法,re.search()re.match()类似,此次主要介绍re.findall()re.search()
    re.match() 尝试从字符串的起始位置匹配一个模式,匹配成功方法返回一个匹配的对象,否则返回None。
    re.search() 扫描整个字符串并返回第一个成功的匹配,匹配成功方法返回一个匹配的对象,否则返回None。
    re.findall()在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
    注意: match 和 search 是匹配一次, findall 匹配所有。

    今天配置idea时遇到的问题:

    在下载scala插件时,一直加载不出来插件,查询了相关的资料,也没有找到解决方法。

    原文链接:https://www.cnblogs.com/hanmk/p/8724162.html
  • 相关阅读:
    线段树
    数据结构<三> 队列
    数据结构<二>双向链表
    数据结构<一>单链表
    扩展欧几里德算法
    90 个 node.js 扩展模块,我们疯了
    nodejs的查询构造器
    express的路由配置优化
    express路由方案
    Redis学习笔记~目录
  • 原文地址:https://www.cnblogs.com/123456www/p/12292384.html
Copyright © 2020-2023  润新知