python--爬虫--获取和解析存储网页内容--以薄荷网为例(12)
- UID
- 1066743
|
python--爬虫--获取和解析存储网页内容--以薄荷网为例(12)
BeautifulSoup解析网页内容
前面说了这么多,都是为了获取网页内容html。既然获取到html之后,我们就要进行解析从中提取我们需要的数据。
我们所获取的html本质是字符串。处理字符串最基本的方法是通过相关的字符串函数,但效率很低,容易出错。
还可以使用正则表达式处理字符串。这部分的知识也是很多,大家可以自行了解。
这里,我们推荐的处理方式是使用BeautifulSoup。
BeautifulSoup是解析html/xml的库。非Python自带的库,安装如下:
pip install beautifulsoup4
pip install lxml
安装lxml库是为了加快html解析效率。
基本用法
1、创建BeautifulSoup对象
import bs4
from bs4 import BeautifulSoup
接下来使用beautifulsoup扩展库对html中特定的div进行解析
from bs4 import *
soup = BeautifulSoup(res.read( ))
print(soup.find(id="div1")) #得到id=div1的div
2、访问节点
soup = BeautifulSoup(res.read( ))
print(soup.title)
print(soup.title.name)
print(soup.title.string)
print(soup.title.parent.name)
print(soup.p)
print(soup.p['class'])
3、指定tag、class或id
print(soup.find_all('a'))
print(soup.find('a'))
print(soup.find(class_='title'))
print(soup.find(id="link3"))
print(soup.find('p',class_='title'))
4、从文档中找到所有a标签的链接
for link in soup.find_all('a'):
print(link.get('href'))
5、指定解析器
出现了警告,根据提示,我们在创建BeautifulSoup对象时,指定解析器即可。
soup = BeautifulSoup(html_doc,'html.parser')
6、从文档中获取所有文字内容
print(soup.get_text())
7、正则匹配
link_node = soup.find('a',href=re.compile(r"til"))
print(link_node)
8、使用lxml解析html
soup = BeautifulSoup(html_doc, 'lxml')
soup是解析得到的解析器。
我们可以根据html的结构获取对应的节点。例如我想获取p标签:
p = soup.body.p
但该方法只能获取到第1个节点。假如body标签下有很多p节点,该方法无法获取全部。
这里,我们可以用find_all或select方法获取。建议大家使用select方法,这个方法可以jQuery选择器用法差不多。例如:
p1 = soup.select('p') #获取p标签
p2 = soup.select('#test_p') #获取id为test_p的标签
p3 = soup.select('.test') #获取class为test的标签
p4 = soup.select('body .test') #获取body下的class为test的标签 |
|
|
|
|
|