“美汤”的select的详细用法

前两天在网上看到了一个机器学习算法的实战案例,就决定上手学习,因为要用到一个豆瓣网的电影信息及评论,我本来可以使用Scrapy框架进行爬取,但是实战的案例用了requests+BeautifulSoup,

我就跟着写了一部分代码,就遇到了今天的主要内容,BeautifulSoup的使用以及select函数的使用方法

前面瞎扯了好多,敲黑板,下面是重点:

(1)实例化BeautifulSoup对象(比较简单)

 soup = BeautifulSoup(markup, “lxml”);(markup是返回的HTML源码,‘lxml’是一种更加强大,速度更快解释器,推荐安装使用)

(2)select函数的使用---提取所需内容(主要内容)

因为某个原因,所以不能以豆瓣网为例,所以换用猫眼电影进行分析;

<div class="movie-item">
      <a href="/films/1217023" target="_blank" data-act="movie-click" data-val="{movieid:1217023}">
      <div class="movie-poster">
        <img class="poster-default" src="//s3plus.meituan.net/v1/mss_e2821d7f0cfe4ac1bf9202ecf9590e67/cdn-prod/file:5788b470/image/loading_2.e3d934bf.png" />
        <img data-src="https://p0.meituan.net/movie/b0e0d6ce9914f37e7f9f6ade13e096342721150.jpg@160w_220h_1e_1c" alt="唐人街探案3海报封面" />
      </div>
      </a>
      <div class="movie-ver"><i class="imax2d"></i></div>
    </div>
    <div  class="channel-detail movie-item-title" title="唐人街探案3">
      <a id= "id" href="/films/1217023" target="_blank" data-act="movies-click" data-val="{movieId:1217023}">唐人街探案3</a>
</div>
<div class="channel-detail channel-detail-orange"><span class="stonefont">15213231</span>人想看</div>
  • 通过标签名查找  

   使用soup.select('a'),则返回了所有a标签中的内容

[<a data-act="movie-click" data-val="{movieid:1217023}" href="/films/1217023" target="_blank">
<div class="movie-poster">
<img class="poster-default" src="//s3plus.meituan.net/v1/mss_e2821d7f0cfe4ac1bf9202ecf9590e67/cdn-prod/file:5788b470/image/loading_2.e3d934bf.png"/>
<img alt="唐人街探案3海报封面" data-src="https://p0.meituan.net/movie/b0e0d6ce9914f37e7f9f6ade13e096342721150.jpg@160w_220h_1e_1c"/>
</div>
</a>, <a data-act="movies-click" data-val="{movieId:1217023}" href="/films/1217023" target="_blank">唐人街探案3</a>]
  • 通过类名查找

  使用soup.select('.movie-item-title'),则返回了所有class中包含movie-item-title的内容,注意:使用类名查找是时不要忘记类名前面的‘.’

  [<div class="channel-detail movie-item-title" title="唐人街探案3"><a data-act="movies-click" data-val="{movieId:1217023}" href="/films/1217023" target="_blank">唐人街探案3</a> </div>]

  • 通过 id 名查找

  使用soup.select('#id'),则返回了所有id中包'id'的内容,注意:使用id名查找是时不要忘记类名前面的‘#’

  [<a data-act="movies-click" data-val="{movieId:1217023}" href="/films/1217023" id="id" target="_blank">唐人街探案3</a>]

  • 组合查找
    • 标签和class、id组合

        1、使用soup.select('div.movie-item-title')(标签+class),则返回

        [<div class="channel-detail movie-item-title" title="唐人街探案3"><a data-act="movies-click" data-val="{movieId:1217023}" href="/films/1217023" id="id" target="_blank">唐人街探案3</a></div>]

          2、使用soup.select('a#id')(标签+id),则返回

          [<a data-act="movies-click" data-val="{movieId:1217023}" href="/films/1217023" id="id" target="_blank">唐人街探案3</a>]

    • 直接查找子标签

            使用soup.select('div.movie-item-title>a'),则返回

        [<a data-act="movies-click" data-val="{movieId:1217023}" href="/films/1217023" id="id" target="_blank">唐人街探案3</a>]

  • 属性查找

     使用soup.select('a[data-act="movies-click"]'),则返回

    [<a data-act="movies-click" data-val="{movieId:1217023}" href="/films/1217023" id="id" target="_blank">唐人街探案3</a>]

注意:

    1、大家注意到soup.select返回的是类似一个列表的数据类型,其实为"bs4.element.ResultSet"这样一种类型数据

 2、大家注意到soup.select返回的信息还有好多的HTML代码,所以需要使用get_text()函数提取文字信息,但是"bs4.element.ResultSet"无法直接使用该函数,必须先获取列表中的元素,

  其元素类型为"bs4.element.Tag",才可以使用该函数;

  其实可以类比列表类型进行理解。

本文为个人摸索学习内容,如有误请联系作者

posted @ 2020-03-11 20:14  K_Y  阅读(800)  评论(0编辑  收藏  举报