python3 BS4 BeautifulSoup 解析的一些解析(迷惑点)

1    BeautifulSoup

只要目标信息的旁边或者附近有标签就可以调用 ,,不用管是几层标签(父辈 后代辈 的都可以)。

Soup.html.body.h1

Soup.body.h1

Soup.html.h1

Soup.h1

索引的效果都是同一个内容。

但是应该把重要的标签包含进去,以免过于简单爬到不想要的内容



2

  •  

  •  

    在这里的li 和 div都是标签用法可以soup.li   soup.div

    而aria-label   class  role是属性 用法则区别于标签 ,引用用div.attrs

    比如 list=soup.findAll(“div”,{“role”:”img”})

    div是标签 而大括号里面的role和img是改标签下的类的属性

    同样等价于 

    list=soup.findAll(“div”,attrs= “role”:”img”})



    3注意下find与findAll的用法


    soup.div.findAll("img")   会找到第一个div标签中的全部img 并不是全部div标签的img


    soup.div.find_next("div").findAll('img')说明是找到第二div标签中的所有img



    4

    bs4的数据类型

    Tga标签

    最基本的信息组织单元,分别用<>和标明开头和结尾

    例如:

    from bs4 import BeautifulSoup
    import requests
    r = requests.get("https://python123.io/ws/demo.html")
    demo = r.text


    soup=BeautifulSoup(demo,"html.parser")
    print(soup.title)

    print(soup.a)

    输出为

    This is a python demo page
     
      
    Basic Python
    

    任何存在于HTML语法中的标签都可以用soup.访问获得
    当HTML文档中存在多个相同对应内容时,soup.返回第一个

    类型 


    Tag的name

    name 标签的名字,

    的名字是'p',格式:.name

    例子:

    from bs4 import BeautifulSoup
    import requests
    r = requests.get("https://python123.io/ws/demo.html")
    demo = r.text
    soup=BeautifulSoup(demo,"html.parser")

    print(soup.a.name)

    print(soup.a..parent.name)

    输出为 “a”

                “p”

    每个都有自己的名字,通过.name获取

    字符串类型



    Tag的attrs(属性)

    Attributes:标签的属性,字典形式组织,格式:.attrs

    例子:

    from bs4 import BeautifulSoup
    import requests
    r = requests.get("https://python123.io/ws/demo.html")
    demo = r.text
    soup=BeautifulSoup(demo,"html.parser")

    tag=soup.a

    print(tag.attrs)

    print(tag.attrs['class'])

    输出为:

    {'href': 'http://www.icourse163.org/course/BIT-268001', 'id': 'link1', 'class': ['py1']}
    ['py1']
    一个可以有0或多个属性

    字典类型


    Tag的NavigableString

    NavigableString:标签内非属性字符串,<>…中字符串,格式:.string

    from bs4 import BeautifulSoup
    import requests
    r = requests.get("https://python123.io/ws/demo.html")
    demo = r.text
    soup=BeautifulSoup(demo,"html.parser")

    print(soup.a.string)

    soup.a为

    Basic Python

    输出为  Basic Python     NavigableString可以跨越多个层次

    类型 :


    Tag的Comment

    Comment:标签内字符串的注释部分,一种特殊的Comment类型

    类型为

    例子:

    newsoup=BeautifulSoup("

    This is not a conment

    ","html.parser")
    print(newsoup.b.string)

    输出为

    This is a conment 
     
         
    类型为 

    可见 并不是标签

    而是直接  所以他不是一个标签类型 而是comment

    总结:


    python3 BS4 BeautifulSoup 解析的一些解析(迷惑点)_第1张图片


    这里我们要注意遍历html树的时候几个特殊的输出类型

    注意到 soup.children返回的类型是一个迭代器 并不能用BeautifukSoup的方法进行检索了。
    而且需要注意到的是soup.findAll(```)返回的也是一个set迭代 如果再利用BearutifulSoup方法索引
    可能就会出现错误 比如a.attrs["td"]
    正确的表达方式应该用列表或者迭代器的方法 a("td")
    更加注意 soup.find 和findAll有很大的区别 find找的是标签 findAll找的是set


    你可能感兴趣的:(python3爬虫)