爬虫BeautifulSoup4使用讲解

1.基本介绍

        Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库它能够通过你喜欢的转换器实现惯用的文档导航,查找、修改文档的方式。

2.如何使用?

        (1)安装beautifulsoup

pip install beautifulsoup4

        (2)引入模块

from bs4 import beautifulsoup

        (3)选择解析器解析指定内容

soup=beautifulsoup(解析内容,解析器)

 常用解析器:html.parser,lxml,xml,html5lib

有时候需要安装安装解析器:比如pip3 install lxml

几个简单的浏览结构化数据的方法

soup.title                    # 获取整个title标签字段
soup.title.name               # 获取title标签名称
soup.p                        # 获取第一个p标签字段
soup.p['class']               # 获取第一个p中class属性值
soup.a                        # 获取第一个a标签字段
soup.find_all('a')            # 获取所有a标签字段
soup.find(id="link3")         # 获取属性id值为link3的字段
soup.a['class'] = "newClass"  # 可以对这些属性和内容等等进行修改
soup.find('a').get('id')      # 获取class值为story的a标签中id属性的值
soup.title.string             # 获取title标签的值

 首先导入一段示例HTML代码,以下所有示例都是用这个代码

html = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
soup=BeautifulSoup(html,'lxml')

 3.具体使用

        (1)获取节点以及指定属性的节点

#获取title标记中的内容
soup.title.string
#获取p标记,当有多个相同的标记只能获取第一个
soup.p
#获得class值为story的p标记
写法一:soup.find('p',class_='story')
写法二:soup.find('p',attrs={'class':'story'})

        (2)获取节点的属性值

#利用attrs参数提取,attrs会返回标签中的所有属性,返回的值是字典
soup.p.attrs               #获取p标记所有属性和属性值
soup.p.attrs['name']       #获取p标记name属性值
#第二种写法
soup.p['name']             #同上 

        (3)嵌套调用

# 嵌套调用,可以调用到某一元素的子集或后代集
# 通过contents或者children可以获得子集
#contents获得的是字符串列表
soup.p.contents
# children获得的是列表迭代器对象,需要遍历获得具体的内容
 for i,j in enumerate(soup.p.children):#遍历子集
     print(i,j)
# 获得后代集  ,调用descendants属性
for i,j in enumerate(soup.p.descendants):#遍历子集
     print(i,j)

        (4)获取父节点

# 获取a节点的父节点,获得一个直接的父节点
soup.a.parent
# 获取并遍历所有父节点
for i,j in enumerate(soup.a.parents):
    print(i,j)

        (5)获取兄弟节点

#获取a标记的下一个兄弟节点
soup.a.next_sibling
# 获取a标记上一个兄弟节点
soup.a.previous_sibling

#获取之后的所有的兄弟节点
for i,j in enumerate(soup.a.next_siblings):
    print(i,j)
#获取之前的所有的兄弟节点
for i,j in enumerate(soup.a.previous_siblings):
    print(i,j)

        (6)通过选择器获取节点

# select方法传入多个css选择器,获取到最后一个
soup.select(".panel ,.panel-body")
#标签选择器
soup.select("ul li")         #获取所有ul中的所有li
#id选择器
soup.select('#list-2')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值