首页 > 软件开发 > HTML >

BeautifulSoup解析HTML

来源:互联网 2023-03-16 19:10:39 259

有时候我们会从网络上"爬"下一些网页,但别人的代码看着就头痛。虽然也许你精通正则表达式,一切都不是问题。但你还总得去写那些规则不是。CVC办公区 - 实用经验教程分享!

今天要介绍的【Beautiful Soup】 是一个Python库,它可以从HTML或XML文件中提取出你想要数据 ,这也许能帮你节省数小时甚至数天的工作时间。CVC办公区 - 实用经验教程分享!

接下来我们一起来看它是怎么工作的。CVC办公区 - 实用经验教程分享!

方法/步骤

  • 1

    从网上获取数据:CVC办公区 - 实用经验教程分享!

    直接上代码,由于这里不讲爬虫相关的知识,所以就不细讲了。说明以下几点:CVC办公区 - 实用经验教程分享!

    1.url指向的为你想爬取的网页地址;CVC办公区 - 实用经验教程分享!

    2.translation_html为网页地址所对应的html代码,所对应的页面对下图;CVC办公区 - 实用经验教程分享!

    3. 要介绍的BeautifulSoup就是对第2点中translation_html的内容进行解析。CVC办公区 - 实用经验教程分享!

    ---------------代码分割线---------------CVC办公区 - 实用经验教程分享!

    import urllib.request as rqCVC办公区 - 实用经验教程分享!

    url = "https://www.baidu.com"CVC办公区 - 实用经验教程分享!

    req = rq.Request(url, headers={ 'Connection': 'Keep-Alive', 'Accept': 'text/html, application/xhtml xml, */*', 'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko' })CVC办公区 - 实用经验教程分享!

    translation_html = rq.urlopen(req).read().decode("utf-8")CVC办公区 - 实用经验教程分享!

    BeautifulSoup解析HTMLCVC办公区 - 实用经验教程分享!

  • 2

    安装并导入BeautifulSoup:CVC办公区 - 实用经验教程分享!

    可以通过pip命令直接安装:CVC办公区 - 实用经验教程分享!

    pip install beautifulsoup4CVC办公区 - 实用经验教程分享!

    如果还想解析html以外格式的一些文档,可以再安装其它的库,如:CVC办公区 - 实用经验教程分享!

    $ pip install lxmlCVC办公区 - 实用经验教程分享!

    $ pip install html5libCVC办公区 - 实用经验教程分享!

    安装好后,要在python(.py)文件中使用BeautifulSoup的各项功能前,还需要在.py文件中用以下语句把BeautifulSoup库进行导入。CVC办公区 - 实用经验教程分享!

    from bs4 importBeautifulSoupCVC办公区 - 实用经验教程分享!

    BeautifulSoup解析HTMLCVC办公区 - 实用经验教程分享!

  • 3

    我们已经从第一步获取了要解析的HTML代码,从第二步安装并导入了BeautifulSoup库,接下来就可以使用BeautifulSoup库所提供的功能,对HTML的内容进行解析了。为了方便说明,这里不讲原理性的东西,都是以举例的方式让大家看得明白。CVC办公区 - 实用经验教程分享!

    BeautifulSoup解析HTMLCVC办公区 - 实用经验教程分享!

  • 4

    先看一段代码:CVC办公区 - 实用经验教程分享!

    from bs4 importBeautifulSoup # 导入BeautifulSoup库CVC办公区 - 实用经验教程分享!

    soup = BeautifulSoup(translation_html, "html.parser") #translation_html为第一步得到的html代码,"html.parser"说明我们解析的内容为html格式的。CVC办公区 - 实用经验教程分享!

    为了使说明更简洁,translation_html所对应的HTML代码看成以下内容:CVC办公区 - 实用经验教程分享!

    html>CVC办公区 - 实用经验教程分享!

    body>CVC办公区 - 实用经验教程分享!

    div id='div1'>CVC办公区 - 实用经验教程分享!

    p class='p1 first'>p1 content!-- p1 comment -->/CVC办公区 - 实用经验教程分享!

    p class='p2 second'>p2 content/CVC办公区 - 实用经验教程分享!

    /div>CVC办公区 - 实用经验教程分享!

    /body>CVC办公区 - 实用经验教程分享!

    /html>CVC办公区 - 实用经验教程分享!

    接下来的说明就围绕这段代码来说明BeautifulSoup的解析过程。CVC办公区 - 实用经验教程分享!

    BeautifulSoup解析HTMLCVC办公区 - 实用经验教程分享!

  • 4该信息未经授权抓取自百度经验
  • 5

    soup = 返回BeautifulSoup对象:整个html代码(从html>到/html>)CVC办公区 - 实用经验教程分享!

    soup("div") = 查找所有div元素,返回列表:第1个元素为(从div id='div1'>到/div>)的代码CVC办公区 - 实用经验教程分享!

    soup.div =查找第一个div元素,返回BeautifulSoup对象:(从div id='div1'>到/div>)CVC办公区 - 实用经验教程分享!

    soup("p") = 查找所有p元素,返回列表:第1个元素为"p class='p1'>p1 content/",第二个元素为"p class='p2'>p2 content/"。CVC办公区 - 实用经验教程分享!

    soup.div("p", recursive=False)= 查找div下直属p元素,返回列表:第1个元素为"p class='p1'>p1 content/",第二个元素为"p class='p2'>p2 content/"。CVC办公区 - 实用经验教程分享!

    soup.p =查找第一个p元素,返回BeautifulSoup对象(p class='p1'>p1 content/)CVC办公区 - 实用经验教程分享!

    注意:上述返回列表中的每个元素也是BeautifulSoup对象。可以把返回的BeautifulSoup对象看成是一个原HTML上的子HTML。在这个子对象上的操作方法和最初的对象是一样的。CVC办公区 - 实用经验教程分享!

    BeautifulSoup解析HTMLCVC办公区 - 实用经验教程分享!

  • 6

    soup("p", attrs={"class": "p2"}) = 在soup("p")的基础上加了一个限定条件,可以把查找的范围更精确化。返回值也是一个列表。相当于soup.findAll(...)。属性值还可以接受正则表达式:如上述的"p2"可以被替换为s【s = re.compile(r'fir')】CVC办公区 - 实用经验教程分享!

    soup.find("p", attrs={"class": "p2"})= 返回上面列表中的第一元素。CVC办公区 - 实用经验教程分享!

    attrs参数的内容可以有多个,如id,class,name什么都可以加进入,以最大限度的精确查找。CVC办公区 - 实用经验教程分享!

    BeautifulSoup解析HTMLCVC办公区 - 实用经验教程分享!

  • 7

    soup.p['class'] = 返回第一个p元素的class属性列表(['p1', 'first'])CVC办公区 - 实用经验教程分享!

    soup.p.text= 返回第一个p元素的内容(p1 content),注意不包含注释的内容CVC办公区 - 实用经验教程分享!

    以上就是BeautifulSoup库的基本用法,相信通过大家的举一反三,应该能够完成你想要的功能了。CVC办公区 - 实用经验教程分享!

    BeautifulSoup解析HTMLCVC办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!CVC办公区 - 实用经验教程分享!


    标签: HTML

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码