彩世界平台-彩世界时时app-彩世界开奖app苹果下载

热门关键词: 彩世界平台,彩世界时时app,彩世界开奖app苹果下载

您的位置:彩世界平台 > 彩世界平台 > 一个咸鱼的爬虫之路(二):BeautifulSoup库,爬虫

一个咸鱼的爬虫之路(二):BeautifulSoup库,爬虫

发布时间:2019-09-02 06:04编辑:彩世界平台浏览(184)

    一个咸鱼的爬虫之路(二):BeautifulSoup库,爬虫beautifulsoup

    来记录一下BeautifulSoup的相关方法

    BeautifulSoup 和之前讲到的requests库都是比较实用的python第三方库通过初学者两者结合基本可以爬取小规模的数据了

    下一篇就写一个小列子好了,废话说完先来介绍BeautifulSoup 库吧

    安装就略了下一个网上ANACONDA 常用的库基本都有了一个集成的开发环境挺好的。

    还是先给个官方文档地址:

    导入

    from bs4 import BeautifulSoup
    
    html_doc = """
    <html><head><title>The Dormouse's story</title></head>
    <body>
    <p class="title"><b>The Dormouse's story</b></p>
    
    <p class="story">Once upon a time there were three little sisters; and their names were
    <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
    <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
    <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
    and they lived at the bottom of a well.</p>
    
    <p class="story">...</p>
    """
    这里是官方文档的html demo 页面,比较经典这里就用这个来演示了(好吧其实是我懒)
    
    html_doc = """
    <html><head><title>The Dormouse's story</title></head>
    <body>
    <p class="title"><b>The Dormouse's story</b></p>
    
    <p class="story">Once upon a time there were three little sisters; and their names were
    <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
    <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
    <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
    and they lived at the bottom of a well.</p>
    
    <p class="story">...</p>
    """
    
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html_doc, 'html.parser')
    
    print(soup.prettify())
    
     
    

    输出结果为:

    <html>
    <head>
    <title>
    The Dormouse's story
    </title>
    </head>
    <body>
    <p class="title">
    <b>
    The Dormouse's story
    </b>
    </p>
    <p class="story">
    Once upon a time there were three little sisters; and their names were
    <a class="sister" href="" id="link1">
    Elsie
    </a>
    ,
    <a class="sister" href="" id="link2">
    Lacie
    </a>
    and
    <a class="sister" href="" id="link3">
    Tillie
    </a>
    ;
    and they lived at the bottom of a well.
    </p>
    <p class="story">
    ...
    </p>
    </body>
    </html>

    下面介绍一下解析器

    soup = BeautifulSoup('<html>data</html>','html.parser')

    图片 1

    一般情况下用第一个就好python3.2以后的版本html.parser容错性就已经很好了。

    Beautiful Soup 的基本类

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

    soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
    tag = soup.b
    type(tag)
    # <class 'bs4.element.Tag'>
    

    任何存在于HTML语法中的标签都可以用soup.<tag>访问获得

    当HTML文档中存在多个相同<tag>对应内容时,soup.<tag>返回第一个

    TAG 的属性

    TAG Name 标签的名字,<p>…</p>的名字是'p',格式:<tag>.name

     

    图片 2

    每个<tag>都有自己的名字,通过<tag>.name获取,字符串类型

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

    图片 3

    一个<tag>可以有0或多个属性,字典类型

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

    图片 4

    NavigableString可以跨越多个层次

    TAG Comment 对象是一个特殊类型的 NavigableString 对象:

    图片 5

     

    基于bs库的HTML内容遍历方法

     

    图片 6

    html_doc = """
    <html><head><title>The Dormouse's story</title></head>
    <body>
    <p class="title"><b>The Dormouse's story</b></p>
    
    <p class="story">Once upon a time there were three little sisters; and their names were
    <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
    <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
    <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
    and they lived at the bottom of a well.</p>
    
    <p class="story">...</p>
    ps:依然使用这个作为列子
    

     

     

     

    下行遍历:

    .contents 子节点的列表,将<tag>所有儿子节点存入列表

    图片 7

    .children 子节点的迭代类型,与.contents类似,用于循环遍历儿子节点

    图片 8

    .descendants 子孙节点的迭代类型,包含所有子孙节点,用于循环遍历

    图片 9

     

    平行遍历:

    .next_sibling 返回按照HTML文本顺序的下一个平行节点标签


    .previous_sibling 返回按照HTML文本顺序的上一个平行节点标签

    图片 10

    .next_siblings 迭代类型,返回按照HTML文本顺序的后续所有平行节点标签

    for sibling in soup.a.next_sibling:
            print(sibling)
    

    .previous_siblings 迭代类型,返回按照HTML文本顺序的前续所有平行节点标签

    由于输出太爆炸自己尝试吧我就不贴图了上一个懒得贴了( ̄_, ̄ )

    for sibling in soup.a.previous_sibling:
            print(sibling)
    

    上行遍历:

    .parent 节点的父亲标签

    图片 11
    .parents 节点先辈标签的迭代类型,用于循环遍历先辈节点

    图片 12

     

    BeautifulSoup 库关键用法大概就是这些Keyword 参数 find 那些用法官方文档十分详细这里就不一一罗列了主要室友都睡了再敲下去估计会被打死图片 13

    给个find小列子:

    图片 14

    输出:

    图片 15

    图片 16

     

    来记录一下BeautifulSoup的相关方法 BeautifulSoup 和之前讲到的requests库都是比较实用...

    爬虫 BeautifulSoup,爬虫beautifulsoup

    BeautifulSoup是用于解析html/xml的python库。它将html解析为树结构。每一个接节点都是一个python对象。

    在这棵树上,共有四种对象:Tag,  NavigableString,  BeautifulSoup,  Comment.

    本随笔仅为学习笔记,欢迎大家交流和指出错误

    Tag

    <a class="QuestionText";id="6">python bs4 库</a>
    

    这便是一个Tag,html文件便是许多个这样的Tag组成。

    Tag有两个属性,一个是name,一个是attributes

    上面的Tag中的   a    便是Tag的name,  class="QuestionText" id="6" 便是attributes

    如以下代码

    from bs4 import BeautifulSoup
    html = "<a class="QuestionText" id="6">python bs4 库</a>"
    soup = BeautifulSoup(html,"html.parser")     #html.parser后面会谈到
    soup.a    #Tag
    soup.a.name     #Tag的name
    soup.a.attrs    #Tag的attrs
    soup.a.text     #NavigableString
    此外   soup.contents   #将全部的子节点以列表的形式输出
        soup.childern   #将全部的子节点以生成器的形式输出
        soup.parent     #将所有的父节点以列表的形式输出
        soup.parents    #将所有的父节点以生成器的形式输出
        soup.next_sibling       #输出兄弟节点  带s的是以生成器
        soup.previous_sibling
        soup.next_siblings
        soup.previous_siblings
    
     
    

    运行结果如下

    图片 17

    BeautifulSoup 表示一个文档的全部内容,大部分时候,可以把它当作是一个Tag.

    Comment  注释,是一种特殊的NavigableString.

    形如:

    <a><!--这是一段注释--></a>
    

    除此之外在爬虫里经常用到的就是

    1.soup.find(name,attrs,recursive,text,args**)

    soup.find_all(name,attrs,recursive,text,args**)

    1. soup.find_all('a') #查找所有的name为a的Tag
    <a class="test">python bs4</a>
    
    2. soup.find_all(rel='icon')  #查找所有含有rel="icon"属性的Tag
    <link rel="icon" href="//www.jd.com/favicon.ico" type="imge"></link> 
    
    3. soup.find_all(clstag="h|keycount|2016|02a")  #类似第二个查找某个attrs为clstag的Tag
    <a class="logo_tit_lk" href="//www.jd.com">u4eacu4e1c</a></h1>n<h2 class="logo_subtit">u4eacu4e1c,u591au5febu597du7701</h2>n<div class="logo_extend"></div>n</div>
    
    4. soup.find_all('li',class_='spacer')    #找到所有name=li  class=spacer的Tag
    [<li class="spacer"></li>, <li class="spacer"></li>, <li class="spacer"></li>, <li class="spacer"></li>, <li class="spacer"></li>, <li class="spacer"></li>, <li class="spacer"></li>]
    
    当添加limits参数时,是对查找结果进行限制。如limits=2,就是只找两个
    

     

     soup.find()  就相当于 soup.find(limits=1)

    通过以上两个函数就可以逐层查找来找到想要的Tag然后逐层的向下寻找,直到获取全部信息。

     2.与上面的两个函数类似的就是soup.select()  利用css选择器来搜索

     1 1.soup.select(".sister")  #按照class的值来查找
     2 # [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
     3 #  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
     4 #  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
     5 2.soup.select("#link1")    #按照id的值来查找
     6 # [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
     7 soup.select("a#link2")
     8 # [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]
     9 3.soup.select('a[href]')   #通过attrs来查找
    10 # [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
    11 #  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
    12 #  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
    13 4.soup.select('a[href="http://example.com/elsie"]')  #通过attrs的值来查找
    14 # [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
    

     

    BeautifulSoup,爬虫beautifulsoup BeautifulSoup 是用于解析html/xml的python库。它将html解析为树结构。每一个接节点都是一个python对象。 在这棵树...

    本文由彩世界平台发布于彩世界平台,转载请注明出处:一个咸鱼的爬虫之路(二):BeautifulSoup库,爬虫

    关键词:

上一篇:python day1 学习整理,pythonday1

下一篇:没有了