Beautiful Soup4语法讲解使用

Beautiful Soup4提取HTML内容,一般要经过两步:首先处理源代码生成BeautifulSoup对象。然后使用find_all()或者find()来查找内容。

目录

页面示例

1.解析源代码

2.查找内容


页面示例

打开BS4练习页面,网页的源代码如图所示,直接使用requests获取源代码。

Beautiful Soup4语法讲解使用_第1张图片

1.解析源代码

读取文件内容

def mo_ni_html(file_name):
    """ 模拟获取网页 """
    with open(file_name, 'r', encoding='utf-8') as f:
    detail = f.readlines()
    content = ''
    content = content.join(detail)
    return content

解析源代码生成BeautifulSoup对象,使用以下代码:

soup = BeautifulSoup('网页源代码', '解析器')

这里的“解析器”,可以使用html.parser:

soup = BeautifulSoup(html, 'html.parser')

如果安装了lxml,还可以使用lxml:

soup = BeautifulSoup(html, 'lxml')

2.查找内容

查找内容的基本流程和使用XPath非常相似。

首先要找到包含特殊属性值的标签,并使用这个标签来寻找内容。

假设需要获取“列表”,由于这个信息所在

标签的class属性的值为“news-title”,

这个值本身就很特殊,因此可以直接通过这个值来进行定位,如图所示。

Beautiful Soup4语法讲解使用_第2张图片

运行结果如上图所示。

由于HTML中的class属性与Python的class关键字相同,因此为了不产生冲突,

BS4规定,如果遇到要查询class的情况,使用“class_”来代替。

在第20行的查询HTML代码中,class属性的属性值为“news-title”的标签,

得到find()方法返回的BeautifulSoup Tag对象。

在第22行中,直接通过.string属性就可以读出标签中的文字信息。

那如果要获取“图集1”“图集2”和“图集3”,又应该怎么办呢?使用先抓大再抓小:

videos_listb = soup.find(class_='videos-listb')
ul_h2s = videos_listb.find_all('h2')
for item in ul_h2s:
    print(item.string)

运行结果如下:

Beautiful Soup4语法讲解使用_第3张图片

首先根据标签

查找到有用的内容,

然后在这个内容的基础上继续查找

标签下面的内容。

这里用到了find()方法和find_all()方法。

find()与find_all()的不同点如下。

· find_all()返回的是BeautifulSoup Tag对象组成的列表,

如果没有找到任何满足要求的标签,就会返回空列表。

· find()返回的是一个BeautifulSoup Tag对象,如果有多个符合条件的HTML标签,

则返回第1个对象,如果找不到就会返回None。

find_all()与find()的参数完全相同,以find_all()为例来说明。

find_all(name, attrs, recursive, text, **kwargs)

· name就是HTML的标签名,类似于body、div、ul、li。

· attrs参数的值是一个字典,字典的Key是属性名,字典的Value是属性值,例如

attrs={'class': 'videos-listb'}

这种写法,class就不需要加下划线。

· recursive的值为True或者False,当它为False的时候,BS4不会搜索子标签。

· text可以是一个字符串或者是正则表达式,用于搜索标签里面的文本信息,

因此,要寻找所有以“图集”开头的信息,还可以使用下面的写法:

content = soup.find_all(text=re.compile('图集'))

for item in content:

    print(item.string)

运算结果如图所示:

 Beautiful Soup4语法讲解使用_第4张图片

使用re时要注意,记得引入三方库re

import re

 除了获取标签里面的文本外,BS4也可以获取标签里面的属性值。

如果想获取某个属性值,可以将BeautifulSoup Tag对象看成字典,将属性名当作Key,

如图所示:

Beautiful Soup4语法讲解使用_第5张图片

你可能感兴趣的:(Python,python,Beautiful,Soup4)