小常识,大应战!本文正在参与“程序员必备小常识”创作活动。
BS4
全称是 BeatifulSoup
,它供给一些简略的、python式的函数用来处理导航、搜索、修改分析树等功能。咱们能够通过它很便利的完结爬虫中的 html
解析作业。
本文简略介绍一些 bs4
里常用的函数,能够敷衍大多数的状况。
1. 定位标签
首要,爬取之前需求定位到数据地点的标签,这个使用 F12 开发者东西
中的这个按钮,点一下按钮,然后点一下网页,能够很快定位到页面中的相应标签,详细就不详细说了,自己摸索一下,很简略,很好用的。
接下来正式介绍,怎么用代码获取到前面找到的那个标签。
这里介绍 BeautifulSoup
中的两个函数,find()
和 find_all()
函数。
首要你调查你要找到的标签,是什么标签,是否有 class 或许 id 这样的特点(假如没有就找找它父标签有没有,尽量找这样的),因为 class 和 id 这两个特点作为挑选条件的话,查找到的干扰项极少,命运好的话,基本上能够一击必中。
比方上图中箭头所指的,id
为 ozoom
的 div
标签时,咱们能够这样来获取
# 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 函数,适用于一次性查找一类型的许多标签
的状况,比方下图这种状况。
列表中的每一个 li
标签中,都是一条数据,咱们需求将它们都获取到,假如是用前面的 find
函数的话,每次只能获取一个 li
标签。所以咱们需求使用 find_all
函数,一次性获取所有契合条件的标签,存储为数组回来。
首要,因为 li
标签没有 id
也没有 class
,而页面中存在许多无关的干扰的 li
标签,所以咱们需求先从它的父标签往上找,缩小查找规模,找到 id
为 titleList
的 div
标签之后,调查一下,里边的 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
标签)。