python爬虫之bs4模块(超详细)
Beautiful Soup 4.4.0 文档 — Beautiful Soup 4.2.0 documentation (crummy.com)
可以看到bs4库将网页文件变成了一个soup的类型,
事实上,bs4库 是解析、遍历、维护、“标签树“的功能库。
通俗一点说就是: bs4库把html源代码重新进行了格式化,
从而方便我们对其中的节点、标签、属性等进行操作。
bs4模块是Python爬虫中常用的一个解析库,它可以读取HTML、XML等文档,并将其解析成为Python可以操作的数据结构,方便我们对其中的数据进行提取和处理。
下面是一个使用bs4模块实现爬取网页并提取数据的详细流程:
首先,我们需要安装bs4模块。可以使用pip命令进行安装:
pip install bs4
然后,我们可以使用requests模块来请求一个网页:
import requests
url = 'https://www.example.com'
response = requests.get(url)
1.创造一个BeautifulSoup对象
bs_1=BeautifulSoup(r1.text,'lxml')#print(bs_1)
接下来,我们需要将获取到的HTML文档交给bs4模块进行解析。
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')
第一个参数是要解析的HTML文档内容(可以是字符串、文件对象或其他类型),第二个参数是指定解析器,这里使用了Python自带的html.parser解析器。
解析器
解析实列
假设我们要提取网页中的标题:
title = soup.title.string
其中,soup.title
表示获取HTML文档中的<title>
标签,.string
表示获取该标签的文本内容,即标题。
如果我们要提取网页中的链接:
links = []
for link in soup.find_all('a'):
href = link.get('href')
if href isnotNone:
links.append(href)
其中,.find_all()
方法可以用来查找所有匹配指定标签名的标签。这里使用了<a>
标签作为示例,.get()
方法可以获取该标签中的属性值。
最后,我们需要将获取到的数据进行处理并保存:
综上所述,使用bs4模块进行Python爬虫开发主要流程包括:请求网页、解析HTML文档、提取数据和保存数据。在实际开发过程中,需要根据具体情况进行灵活应用。
二、BeautifulSoup四大对象种类
BeautifulSoup库中有四种对象类型,分别为:
1. Tag对象:代表 HTML或XML文档中的标签,每个Tag对象可以由多个属性组成;
2. NavigableString对象:即可遍历字符串,代表 标签里的文本内容;
3. BeautifulSoup对象:即整个 文档树形结构。它最初是从一个HTML或XML文档解析而来的;
4. Comment对象:代表HTML或XML文档中 注释的部分。
具体来说,Tag对象是在解析HTML或XML文档时生成的。它们会嵌套在各个层次中,可以包含其他的Tag对象和NavigableString对象,因此它们可以看作是一种容器。每个Tag对象都有自己的名称、属性(仅限于HTML/XML规范中定义的属性)和子节点。
NavigableString对象表示HTML或XML文档中的一段文字,相当于标签内的字符串。这种对象通常用来提取标签里面的内容。
BeautifulSoup对象是对整个HTML或XML文档的一个抽象,相当于整个文档的根节点。它保存了整个文档的全部结构信息,方便用户进行各种查询、搜索和操作。
Comment对象表示HTML或XML文档中的注释部分,可以通过这个对象获取到页面中所有的注释信息。
tag
find(name, attrs, recursive, string, **kwargs)
:根据标签名、属性、内容等查找符合条件的第一个子孙节点,并返回一个Tag对象;find_all(name, attrs, recursive, string, limit, **kwargs)
:根据标签名、属性、内容等查找所有符合条件的子孙节点,并以列表形式返回多个Tag对象;select(css_selector)
:根据CSS选择器选择匹配的标签,并以列表形式返回多个Tag对象;get_text()
:获取当前标签下所有文本信息;string
:获取当前标签内部的字符串信息;attrs
:以字典形式返回当前标签的所有属性和属性值;name
:获取当前标签的名称;parent
:获取当前标签的父亲标签;next_sibling
:获取当前标签的下一个兄弟标签;previous_sibling
:获取当前标签的前一个兄弟标签;has_attr(key)
:判断当前标签是否存在指定的属性;replace_with(new_tag)
:将当前标签替换为新标签。
2、其他三个对
- NavigableString对象的使用方法
string
:获取当前文本节点内部的字符串信息。
- BeautifulSoup对象的使用方法
prettify()
:美化HTML或XML文档格式;get_text()
:获取整个文档中所有非脚本和样式标签的文本内容;find(name, attrs, recursive, string, **kwargs)
:根据标签名、属性、内容等查找符合条件的第一个子孙节点,并返回一个Tag对象。
- Comment对象的使用方法
string
:获取当前注释节点内部的字符串信息。