使用Python解析网页-BeautifulSoup

BeautifulSoup

BeautifulSoup可以用来方便的解析html数据。作为一名数据分析师,我们有时需要爬点外部数据分析,不需要全部掌握这个包的内容。我们还是什么有用学什么,能解决问题,交上作业即可。

1.1 最简案例

加载包

from bs4 import BeautifulSoup as BS

创建一个html格式字符串,注意html的数据的结构

html="""
<html>
	<head>
	<title> beautiful soup 学习 </title>
	</head>
	<body>
      <ul>
        <li class='c1'> 产品1 </li>
        <li class='c1'> 产品2 </li>
        <li class='c2'> 产品3 </li>
        <li> 产品4 </li>
       </ul>
       <ul>
       	 <a href='www.abc.com/products/1.html' class='c1 c3' />
       	 <a href='www.abc.com/products/2.html' class='c1' />
       	 <a href='www.abc.com/products/3.html' class='c1' />     
       </ul> 
	</body>
</html>
"""

创建一个BeautifulSoup对象

bs = BS(html)

获取网页的head、body、title、和li对象,在bs中都是一个元素标签

bs.head #获取网页头
bs.body #获取网页身体
bs.title #获取网页标题
bs.li #获取li,注意有两个li,但是只返回第一个。

使用元素text属性,获取标题文本

bs.title.text #返回 ' beautiful soup 学习 '
bs.li.text #返回  ' 产品1 '
1.2 所有元素

刚才我们使用bs.li只能获取第一个li元素,剩下的三个没有取到,这时可以使用bs对象的find_all方法

bs.find_all("li") #返回所有的li对象

我们可以遍历所有的li对象,获取其文本内容

li=bs.find_all("li")
for i in li:
    print(i.text)

findall方法还可以获取指定class的元素,比如我们只取class='c1’的li对象

li=bs.find_all("li",class_="c1")
for i in li:
    print(i.text)

获取某个标签下面的所有元素

bs.ul.find_all('li')
1.3 属性值

现在我们来获取a标签的所有href属性和class属性,使用attrs

bs.a.attrs['href'] #获取a标签的href属性值
bs.a.attrs['class'] #获取a标签的class属性值

获取所有a标签的href值

href=[]
li=bs.find_all("a")
for i in li:
   href.append(i.attrs['href'])
1.4 标签名称

使用name,可以获取元素的标签名

bs.head.name
1.5 父子兄弟

使用parent,获取上一级元素,ul的上一级是body,a的上一级是ul

bs.ul.parent
bs.a.parent

使用children,获取下一级元素,body的下一级元素是ul,还有很多None,我也没找到好办法搞定None值,只能使用的时候过滤一下。

for i in bs.body.children:
    print(i.name)

使用previous_sibling和next_sibling获取兄弟

bs.a.previous_sibling
bs.a.next_sibling
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值