> 文章列表 > 网页解析--bs4--01

网页解析--bs4--01

网页解析--bs4--01

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 requestsurl = 'https://www.example.com'
response = requests.get(url)

1.创造一个BeautifulSoup对象

bs_1=BeautifulSoup(r1.text,'lxml')#print(bs_1)

接下来,我们需要将获取到的HTML文档交给bs4模块进行解析。

from bs4 import BeautifulSoupsoup = 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、其他三个对

  1. NavigableString对象的使用方法
  • string:获取当前文本节点内部的字符串信息。
  1. BeautifulSoup对象的使用方法
  • prettify():美化HTML或XML文档格式;
  • get_text():获取整个文档中所有非脚本和样式标签的文本内容;
  • find(name, attrs, recursive, string, kwargs):根据标签名、属性、内容等查找符合条件的第一个子孙节点,并返回一个Tag对象。
  1. Comment对象的使用方法
  • string:获取当前注释节点内部的字符串信息。