前两天在网上看到了一个机器学习算法的实战案例,就决定上手学习,因为要用到一个豆瓣网的电影信息及评论,我本来可以使用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",才可以使用该函数;
其实可以类比列表类型进行理解。
本文为个人摸索学习内容,如有误请联系作者