小常识,大应战!本文正在参与“程序员必备小常识”创作活动。

BS4 全称是 BeatifulSoup,它供给一些简略的、python式的函数用来处理导航、搜索、修改分析树等功能。咱们能够通过它很便利的完结爬虫中的 html 解析作业。

本文简略介绍一些 bs4 里常用的函数,能够敷衍大多数的状况。

1. 定位标签

首要,爬取之前需求定位到数据地点的标签,这个使用 F12 开发者东西中的这个按钮,点一下按钮,然后点一下网页,能够很快定位到页面中的相应标签,详细就不详细说了,自己摸索一下,很简略,很好用的。

Python 如何使用 bs4 解析网页

接下来正式介绍,怎么用代码获取到前面找到的那个标签。

这里介绍 BeautifulSoup 中的两个函数,find()find_all() 函数。

首要你调查你要找到的标签,是什么标签,是否有 class 或许 id 这样的特点(假如没有就找找它父标签有没有,尽量找这样的),因为 class 和 id 这两个特点作为挑选条件的话,查找到的干扰项极少,命运好的话,基本上能够一击必中。

Python 如何使用 bs4 解析网页

比方上图中箭头所指的,idozoomdiv 标签时,咱们能够这样来获取

# html 是之前发起恳求获取到的网页内容
bsobj = bs4.BeautifulSoup(html,'html.parser')
# 获取 id 为 ozoom 的 div 标签
# 依据 id 查找标签
div = bsobj.find('div', attrs = {'id' : 'ozoom'})
# 继续获取 div 下的 class 为 list_t 的 div 标签
# 依据 class 查找标签
title = div.find('div', attrs = {'class': 'list_t'})

注:假如标签有 id 特点的话尽量用 id 来查找,因为整个页面 id 是唯一的。用 class 查找的话,最好现在浏览器的网页源码中 Ctrl + F 搜索一下,相同 class 的标签有多少(假如比较多的话,能够测验先查找他的父标签,缩小规模之后再查找)。

然后咱们再讲讲 find_all 函数,适用于一次性查找一类型的许多标签的状况,比方下图这种状况。

Python 如何使用 bs4 解析网页

列表中的每一个 li 标签中,都是一条数据,咱们需求将它们都获取到,假如是用前面的 find 函数的话,每次只能获取一个 li 标签。所以咱们需求使用 find_all 函数,一次性获取所有契合条件的标签,存储为数组回来。

首要,因为 li 标签没有 id 也没有 class ,而页面中存在许多无关的干扰的 li 标签,所以咱们需求先从它的父标签往上找,缩小查找规模,找到 idtitleListdiv 标签之后,调查一下,里边的 li 标签都是需求的,直接 find_all 函数一下都获取完。

# html 是获取的目标网页内容
html = fetchUrl(pageUrl)
bsobj = bs4.BeautifulSoup(html,'html.parser')
pDiv = bsobj.find('div', attrs = {'id': 'titleList'})
titleList = pDiv.find_all('li')

基本上,把 find 和 find_all 函数组合使用,用熟练了能够敷衍简直所有的 html 网页了,真的是,一招鲜吃遍天。

2. 提取数据

查找到标签之后,我该怎么获取标签中的数据呢?

标签中的数据方位,一般有两种状况。

<!--第一种,坐落标签内容里-->
    <p>这是数据这是数据</p>
<!--第二种,坐落标签特点里-->
    <a href="/xxx.xxx_xx_xx.html"></a>

假如是第一种状况,很简略,直接 pTip.text 即可(pTip 是前面已经获取好的 p 标签)。

假如是第二种状况,需求看它是在哪一个特点里的数据,比方咱们要获取上面 a 标签中的 href 特点中的链接,通过 link = aTip["href"] 即可。(aTip 是前面已经获取好的 a 标签)。