zoukankan      html  css  js  c++  java
  • python爬虫07 | 有了 BeautifulSoup ,妈妈再也不用担心我的正则表达式了

    我们上次做了

     

    你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

     

    有些朋友觉得

     

    利用正则表达式去提取信息

     

    太特么麻烦了

     

     

    有没有什么别的方式

     

    更方便过滤我们想要的内容啊

     

    emmmm

     

    你还别说

     

    还真有

     

    有一个高效的网页解析库

     

    它的名字叫做

     

    BeautifulSoup

     

     

    那可是

     

     

     

    是一个可以从 HTML 或 XML 文件中提取数据的 Python 库

     

    那么这么玩呢

     

    ...

     

     

    接下来就是

     

    学习python的正确姿势

     

     

     

    首先我们要安装一下这个库

     

    pip install beautifulsoup4

     

    beautifulsoup支持不同的解析器

     

    比如

     

    对 HTML 的解析

     

    对 XML 的解析

     

    对 HTML5 的解析

     

    你看

     



    一般情况下

     

    我们用的比较多的是 lxml 解析器

     

    我们先来使用一个例子

     

    让你体验一下

     

    beautifulsoup 的一些常用的方法

     

    可流弊了呢

     

     

    比如我们有这样一段 HTML 代码

     

    html_doc = """

    <html><head><title>学习python的正确姿势</title></head>
    <body>
    <p class="title"><b>小帅b的故事</b></p>

    <p class="story">有一天,小帅b想给大家讲两个笑话
    <a href="http://example.com/1" class="sister" id="link1">一个笑话长</a>,
    <a href="http://example.com/2" class="sister" id="link2">一个笑话短</a> ,
    他问大家,想听长的还是短的?</p>

    <p class="story">...</p>

    """

     

    在不使用 re 来进行正则表达式的情况下

     

    如何快速获取到我们想要的内容呢?

     

    先安装一下

     

    pip install beautifulsoup4

    pip install lxml

     

    接着将 html 的源代码传给 BeautifulSoup

     

    soup = BeautifulSoup(html_doc,'lxml')

     

     

    此时此刻

     

    就不需要自己写正则匹配了

     

     

    我们要做的就是从这个对象直接获取我们要的内容

     

    获取标题的内容

     

    print(soup.title.string)
    #学习python的正确姿势

     

     

    获取 p 标签里面的内容

     

    print(soup.p.string)
    #小帅b的故事

     

    获取 title 的父级标签

     

    print(soup.title.parent.name)
    #head

     

    获取超链接

     

    print(soup.a)
    #<a class="sister" href="http://example.com/1" id="link1">一个笑话长</a>

     

    获取所有超链接

     

    print(soup.find_all('a'))
    #[<a class="sister" href="http://example.com/1" id="link1">一个笑话长</a>, <a class="sister" href="http://example.com/2" id="link2">一个笑话短</a>]

     

    获取 id 为 link2 的超链接

     

    print(soup.find(id="link2"))
    #<a class="sister" href="http://example.com/2" id="link2">一个笑话短</a>

     

     

    获取网页中所有的内容

     

    print(soup.get_text())

    # 学习python的正确姿势

    小帅b的故事
    有一天,小帅b想给大家讲两个笑话
    一个笑话长,
    一个笑话短 ,
    他问大家,想听长的还是短的?
    ...

     

     

    除了find方法之外

     

    如果你对css比较熟悉

     

    也可以使用 select 方法

     

    soup = BeautifulSoup(html_doc,'lxml')

    print(soup.select("title"))
    print(soup.select("body a"))
    print(soup.select("p > #link1"))

     

     

    以上就是 BeautifulSoup 常用的方法

     

    想进一步了解可以到这

     

    https://www.crummy.com/software/BeautifulSoup/bs4/doc/

     

    有了它

     

    妈妈再也不用担心我的正则表达式了

     

    下次还有人这样问你

     

    年轻人,不会正则表达式你睡得着觉?有点出息没有?

     

    你可以傲娇的告诉他

     

     

     

    睡得着

     

     

    本篇完

     

    再见

     

     

     

    近期文章

     

    python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

     

    python爬虫05 | 年轻人,不会正则表达式你睡得着觉?有点出息没有?

     

    python爬虫04 | 长江后浪推前浪,Reuqests库把urllib库拍在沙滩上

     

     

    扫一扫

    学习 Python 没烦恼

     

     

     

     

     

     

     

    好看的人都点了

  • 相关阅读:
    2020年天梯赛补题报告
    补提报告...
    2020.11.14天梯赛练习*6 补题
    2020-11-08补题报告
    2020-10-30 — 补题报告
    10-24 补题
    2020.10.17天梯赛练习 和 16 号个人赛 补题报告
    elasticsearch DQL 有关表达式的设计
    tab键和空格键
    emacs配置python开发环境
  • 原文地址:https://www.cnblogs.com/fxxkpython/p/10832030.html
Copyright © 2011-2022 走看看