Beautiful Soup 用法:
(1) 前面我们爬取一个网页,都是使用正则表达式来提取想要的信息,但是这种方式比较复杂,一旦有一个地方写错,就匹配不出来了,因此我们可以使用 Beautiful Soup 来进行提取
(2) Beautiful Soup 就是 Python 的一个 HTML 或 XML 的解析库,可以用它来方便地从网页中提取数据,我们可以通过 pip 来安装 Beautiful Soup:pip3 install beautifulsoup4
import re from bs4 import BeautifulSoup html = ''' <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <p id="username">This is your username</p> <p id="password">This is your password</p> </body> </html> ''' soup = BeautifulSoup(html, 'lxml') # 初始化一个BeautifulSoup对象,接收一个HTML文本和'lxml'解析器作为参数,lxml解析器用于解析HTML或XML文档 result = soup.title # 表示提取<title>节点,结果为:<title>首页</title> result = soup.title.name # 表示提取<title>节点的名字,结果为:title result = soup.title.string # 表示提取<title>节点的文本内容,结果为:首页 result = soup.head.title # 表示提取<head>节点下的<title>节点,结果为:<title>首页</title> result = soup.p.attrs # 表示提取<p>节点的所有属性,结果为:{'id': 'username'} result = soup.p.attrs['id'] # 表示提取<p>节点的属性为id的值,结果为:username result = soup.body.contents # 表示提取<body>节点包含的所有内容,结果为:['\n', <p id="username">This is your username</p>, '\n', <p id="password">This is your password</p>, '\n'] result = soup.body.children # 表示提取<body>节点包含的所有内容,结果返回一个生成器,内容跟contents的内容一样,只不过我们要用for循环去遍历出来 result = soup.p.parent # 表示提取<p>节点的父节点的内容,结果为:<body>....</body> result = soup.find_all(name='head') # 根据节点名来提取所有节点,结果为:[<head><meta charset="utf-8"/><title>首页</title></head>] result = soup.find_all(attrs={'id': 'username'}) # 根据属性值来提取所有节点,结果为:[<p id="username">This is your username</p>] result = soup.find_all(text=re.compile('your')) # 根据文本内容来提取所有节点,结果为:['This is your username', 'This is your password'] result = soup.find_all(name='head') # find_all()用于提取所有节点,find()用于提取匹配到的第一个节点 result = soup.select('title, #username') # select()可以使用CSS选择器进行提取