zoukankan      html  css  js  c++  java
  • python爬虫之bs4 美丽汤

    beautifulsoup4

    灵活又方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式即可方便地实现网页的提取。

     

     

    使用方法:

    案例代码展示可不看

     

    import requests

    from bs4 import *

    import re

    urls='https://www.dbmeinv.com/'  #这是一个urls地址

    res=requests.get(urls)   #获取网页内容

    t=res.text    #网页 内容以文本形式赋值给t

     

     

     

    #匹配图片地址的正则

    # needs=r'https://wx.*?jpg'

    # pattern = re.compile(needs)

    # need= pattern.findall(t)

     

     

     

    #获取标签内容和图片的地址的代码

    soup = BeautifulSoup(t,'lxml')  # 解析器为lxml

    list_img=soup.find('img')  #寻找所有的img 标签

    print(type(list_img[0]))    #获取src属性即 图片的唯一地址

    print(list_img[0].get('src'))

     

    for img_src in list_img:

        print(img_src.get('src')) #遍历图片的地址

     

    list_url=soup.find_all('a')  #寻找所有的a标签

    print(type(list_url[0]))

    print(list_url[0].get('href'))

     

    for img_url in list_img:

     print(img_url.get_text())  #获取a标签中的文本内容

     

     

     

    soup=BeautifulSoup(t,'html.parser')

    print(soup.find_all('a',class_='sister'))#class是特殊属性,因为class是关键字

    print(soup.find_all('a',id='link3'))#用于查找有特定属性的标签

     

     

    sibling_soup = BeautifulSoup("<a><b id='bbb'>text1</b><b>text2</b></b></a>", 'html.parser')

     

    print(sibling_soup)    

    print(sibling_soup.find('b',id='bbb'))  #获取idbbb的标签

    print(sibling_soup.find('b',id='bbb').next_sibling)  #获取idbbb的标签的下一个b标签

     

    ****

    使用BeatuifulSoup

    引用 BeatuifulSoup   

    最常用的引用方式

    PsB S需要大写

    from bs4  import BeatuifulSoup

    Soup = BeatuifulSoup(<p>data</p> , html.parser)

    #两个参数 一个是需要解析的内容 一个是解析器

    Soup=BeautifulSoup( open(path,html.parser))

     

    BeatuifulSoup 基本元素

    标签的认识可以参考html

     

     

     

     

     

     

     

     

     

     

    属性的应用

    Demo是一个respose.text

    from bs4  import BeatuifulSoup

    Soup = BeatuifulSoup(demo,””html.parser)

    Print(Soup.title)

    #打印出页面的title   包含闭合标签的内容

    Tag=soup.a

    Print(Tag)#打印a标签的内容包括各种属性

     

    from bs4  import BeatuifulSoup

    Soup = BeatuifulSoup(demo,””html.parser)

    Soup.a.name  #获取a标签的名字

    Soup.a.parent.name #霸霸

    Soup.a.parent.parent.name #霸霸的霸霸

    #对于一个标签可以使用.name 的方式获得他的名字 返回的是一个字符串形式

     

     

    Tag=soup.a

    Print(Tag.attrs)

    #返回标签的属性 是一个字典格式

    #对信息的提取

    Tag.attrs[class] #获取class的值

    Tag.attrs[href]# 获取href 属性

    #Tag的类型 是一个bs4种的一个内置类型

    Soup.a.string  #a标签内容的属性

    #可以跨越多个标签层次即:无视标签内容含有的标签

    当标签内容中含有注释的时候

    Soup.b.string 会正常打印标签内容无视注释效果

    可通过类型判断

    Print(type(Soup.b.string))

    Print(type(Soup.b.string))

     

     

    #基于bs4库中的htm库的遍历方法

     

    from bs4  import BeatuifulSoup

    Soup = BeatuifulSoup(demo,””html.parser)

    Print(Soup.head)获取head标签

    print(Soup.head.contents) #head标签中的儿子标签是title标签

    #返回的内容是一个列表

    print(Soup.body.contents)#获取body的儿子标签

    Print(len(Soup.body.contents)) #获取body标签的儿子标签的数量

    Ps:子节点不知包括标签 甚至一些  之类的换行符都可以是子节点

    可通过列表类型的下表来检索其中的内容

    Soup.body.contents[1] #获取第二个元素

    #也可以通过for循环遍历

     

     

     

    from bs4  import BeatuifulSoup

    Soup = BeatuifulSoup(demo,””html.parser)

    Print(Soup.title.parent) #打印出title标签的霸霸

    print(Soup.html.parent)#html 标签是doc中的最高级标签他的霸霸是他自己包含其中自己的全部内容

    print(Soup.parent)#soup本身没有霸霸

     

    这里插入一个方法

    Soup.prettify()

    #这个方法就是在每个标签后加入一个

    打印出来是十分规范的h5代码 一目了然

    也可以对某个标签做格式化处理

    Print(Soup.a.prettify())

    会发现标签内容被漂亮的打印出来

     

     

     

    标签树的平行遍历是有条件的

    Ps:平行遍历发生在同一父节点的各节点间

    from bs4  import BeatuifulSoup

    Soup = BeatuifulSoup(demo,””html.parser)

    Print(Soup.a.next_sibling) #打印出a标签的下一个平行标签

    #这里打印出一个and类型于之前提到过的

    Print(Soup.a.next_sibling.next_sibling)#打印出a标签的下一个平行标签的下一个平行标签

    print(Soup.a.previous)#打印出的是一段文本解释a标签之前的信息

    #同时也可以打印出a标签的前前平行标签的信息

    print(Soup.a.previous.previous)

     

     

     

    find_all方法

    Soup.find_all(a) #查找所有的a标签

    #同时查找ab标签

    Soup.find_all([ab])#作为一个列表形式

     

    for tag in Soup.find_all(True):

    Print(tag.name)

    会打印出所有的标签

     

     

    Soup.find_all(p,course) #返回带有 course属性值的所有p标签  (列表)

    Soup.find_all(id=link1)  #查找id属性为link1的标签元素 (列表)

    如果没有会返回一个空列表

     

     

     

     

     

    beautifulsoup4

    灵活又方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式即可方便地实现网页的提取。

     

     

    使用方法:

    案例代码展示可不看

     

    import requests

    from bs4 import *

    import re

    urls='https://www.dbmeinv.com/'  #这是一个urls地址

    res=requests.get(urls)   #获取网页内容

    t=res.text    #网页 内容以文本形式赋值给t

     

     

     

    #匹配图片地址的正则

    # needs=r'https://wx.*?jpg'

    # pattern = re.compile(needs)

    # need= pattern.findall(t)

     

     

     

    #获取标签内容和图片的地址的代码

    soup = BeautifulSoup(t,'lxml')  # 解析器为lxml

    list_img=soup.find('img')  #寻找所有的img 标签

    print(type(list_img[0]))    #获取src属性即 图片的唯一地址

    print(list_img[0].get('src'))

     

    for img_src in list_img:

        print(img_src.get('src')) #遍历图片的地址

     

    list_url=soup.find_all('a')  #寻找所有的a标签

    print(type(list_url[0]))

    print(list_url[0].get('href'))

     

    for img_url in list_img:

     print(img_url.get_text())  #获取a标签中的文本内容

     

     

     

    soup=BeautifulSoup(t,'html.parser')

    print(soup.find_all('a',class_='sister'))#class是特殊属性,因为class是关键字

    print(soup.find_all('a',id='link3'))#用于查找有特定属性的标签

     

     

    sibling_soup = BeautifulSoup("<a><b id='bbb'>text1</b><b>text2</b></b></a>", 'html.parser')

     

    print(sibling_soup)    

    print(sibling_soup.find('b',id='bbb'))  #获取idbbb的标签

    print(sibling_soup.find('b',id='bbb').next_sibling)  #获取idbbb的标签的下一个b标签

     

    ****

    使用BeatuifulSoup

    引用 BeatuifulSoup   

    最常用的引用方式

    PsB S需要大写

    from bs4  import BeatuifulSoup

    Soup = BeatuifulSoup(<p>data</p> , html.parser)

    #两个参数 一个是需要解析的内容 一个是解析器

    Soup=BeautifulSoup( open(path,html.parser))

     

    BeatuifulSoup 基本元素

    标签的认识可以参考html

     

     

     

     

     

     

     

     

     

     

    属性的应用

    Demo是一个respose.text

    from bs4  import BeatuifulSoup

    Soup = BeatuifulSoup(demo,””html.parser)

    Print(Soup.title)

    #打印出页面的title   包含闭合标签的内容

    Tag=soup.a

    Print(Tag)#打印a标签的内容包括各种属性

     

    from bs4  import BeatuifulSoup

    Soup = BeatuifulSoup(demo,””html.parser)

    Soup.a.name  #获取a标签的名字

    Soup.a.parent.name #霸霸

    Soup.a.parent.parent.name #霸霸的霸霸

    #对于一个标签可以使用.name 的方式获得他的名字 返回的是一个字符串形式

     

     

    Tag=soup.a

    Print(Tag.attrs)

    #返回标签的属性 是一个字典格式

    #对信息的提取

    Tag.attrs[class] #获取class的值

    Tag.attrs[href]# 获取href 属性

    #Tag的类型 是一个bs4种的一个内置类型

    Soup.a.string  #a标签内容的属性

    #可以跨越多个标签层次即:无视标签内容含有的标签

    当标签内容中含有注释的时候

    Soup.b.string 会正常打印标签内容无视注释效果

    可通过类型判断

    Print(type(Soup.b.string))

    Print(type(Soup.b.string))

     

     

    #基于bs4库中的htm库的遍历方法

     

    from bs4  import BeatuifulSoup

    Soup = BeatuifulSoup(demo,””html.parser)

    Print(Soup.head)获取head标签

    print(Soup.head.contents) #head标签中的儿子标签是title标签

    #返回的内容是一个列表

    print(Soup.body.contents)#获取body的儿子标签

    Print(len(Soup.body.contents)) #获取body标签的儿子标签的数量

    Ps:子节点不知包括标签 甚至一些  之类的换行符都可以是子节点

    可通过列表类型的下表来检索其中的内容

    Soup.body.contents[1] #获取第二个元素

    #也可以通过for循环遍历

     

     

     

    from bs4  import BeatuifulSoup

    Soup = BeatuifulSoup(demo,””html.parser)

    Print(Soup.title.parent) #打印出title标签的霸霸

    print(Soup.html.parent)#html 标签是doc中的最高级标签他的霸霸是他自己包含其中自己的全部内容

    print(Soup.parent)#soup本身没有霸霸

     

    这里插入一个方法

    Soup.prettify()

    #这个方法就是在每个标签后加入一个

    打印出来是十分规范的h5代码 一目了然

    也可以对某个标签做格式化处理

    Print(Soup.a.prettify())

    会发现标签内容被漂亮的打印出来

     

     

     

    标签树的平行遍历是有条件的

    Ps:平行遍历发生在同一父节点的各节点间

    from bs4  import BeatuifulSoup

    Soup = BeatuifulSoup(demo,””html.parser)

    Print(Soup.a.next_sibling) #打印出a标签的下一个平行标签

    #这里打印出一个and类型于之前提到过的

    Print(Soup.a.next_sibling.next_sibling)#打印出a标签的下一个平行标签的下一个平行标签

    print(Soup.a.previous)#打印出的是一段文本解释a标签之前的信息

    #同时也可以打印出a标签的前前平行标签的信息

    print(Soup.a.previous.previous)

     

     

     

    find_all方法

    Soup.find_all(a) #查找所有的a标签

    #同时查找ab标签

    Soup.find_all([ab])#作为一个列表形式

     

    for tag in Soup.find_all(True):

    Print(tag.name)

    会打印出所有的标签

     

     

    Soup.find_all(p,course) #返回带有 course属性值的所有p标签  (列表)

    Soup.find_all(id=link1)  #查找id属性为link1的标签元素 (列表)

    如果没有会返回一个空列表

     

     

     

     

     

  • 相关阅读:
    Echarts使用笔记
    vue导出pdf
    mvn上传pom/jar至Nexus私服
    Linux下安装Redis
    国内首发,这款 Serverless 云原生一体化部署工具正式开源!
    使用云托管快速部署CMS内容管理系统
    云开发走进高校,腾讯云联合新工科联盟探索新生工程教育模式
    从0到3000万,TA们用云开发这样做
    基于 ThinkJS 的云开发体验
    使用小程序·云开发静态托管实现免鉴权h5跳转小程序
  • 原文地址:https://www.cnblogs.com/pythonyeyu/p/10475064.html
Copyright © 2011-2022 走看看