1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python爬虫从入门到精通:(6)数据解析2_使用bs4(BeautifulSoup)_Python涛哥

Python爬虫从入门到精通:(6)数据解析2_使用bs4(BeautifulSoup)_Python涛哥

时间:2020-12-05 17:51:16

相关推荐

Python爬虫从入门到精通:(6)数据解析2_使用bs4(BeautifulSoup)_Python涛哥

使用bs4BeautifulSoup

数据解析的作用?

用来实现聚焦爬虫

网页中显示的数据都是存储在那里的?

都是存储在html的标签中或者是标签的属性中

数据解析的通用原理是什么?

指定标签的定位取出标签中存储的数据或者标签属性中的数据

bs4解析原理

实例化一个BeautifulSoup对象,且待解析的页面源码数据加载到该对象中调用BeautifulSoup对象中相关方法或者属性进行标签定位和文本数据的提取

环境的安装

pip install lxml #解析器pip install bs4

BeautifulSoup对象的实例化:

BeautifulSoup(file,'lxml')用来将本地存储的html文档中的数据进行解析BeautifulSoup(page_text,'lxml')用来将互联网上请求的页面源码数据进行解析

我们来看这段test.html源码:

<html lang="en"><head><meta charset="UTF-8"><title>测试bs4</title></head><body><div><p>百里守约</p></div><div class="song"><p>李清照</p><p>王安石</p><p>苏轼</p><p>柳宗元</p><a href="/" title="赵匡胤" target="_self"><span>this is span</span>宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a><a href="" class="du">总为浮云能蔽日,长安不见使人愁</a><img src="/meinv.jpg" alt=""/></div><div class="tang"><ul><li><a href="" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li><li><a href="" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li><li><a href="" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li><li><a href="" class="du">杜甫</a></li><li><a href="" class="du">杜牧</a></li><li><b>杜小月</b></li><li><i>度蜜月</i></li><li><a href="" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li></ul></div>

bs4的使用

from bs4 import BeautifulSoupfile = open('./test.html', 'r', encoding='utf-8')soup = BeautifulSoup(file, 'lxml')soup # 打印出完整页面源码

标签定位:

soup.tagName:只可以定位到第一次出现的tagName标签

soup.p # <p>百里守约</p>

属性定位

soup.find('tagName',attrName=value):定位到第一次出现的tagName标签

举例:

soup.find('div', class_='song') # 注意class 后面有 _

打印结果:

<div class="song"><p>李清照</p><p>王安石</p><p>苏轼</p><p>柳宗元</p><a href="/" target="_self" title="赵匡胤"><span>this is span</span>宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a><a class="du" href="">总为浮云能蔽日,长安不见使人愁</a><img alt="" src="/meinv.jpg"/></div>/

soup.find('a', id='feng')

打印结果:

<a href="" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a>

# soup.findAll:跟find一样作属性定位,只不过findAll返回的是列表,定位到所有满足条件的标签soup.findAll('a', id='feng')

打印结果:

[<a href="" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a>]

选择器定位:soup.select(‘选择器’)

类选择器

id选择器

层级选择器

>大于号 表示一个层级

soup.select('.tang > ul > li')

空格表示隔多个层级

soup.select('.tang li')

其结果都是:

[<li><a href="" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li><li><a href="" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li><li><a alt="qi" href="">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li><li><a class="du" href="">杜甫</a></li><li><a class="du" href="">杜牧</a></li><li><b>杜小月</b></li><li><i>度蜜月</i></li><li><a href="" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>]

取数据

.text:返回的是该标签下所有的文本内容

.string:返回的是该标签直系的文本内容

a_tag = soup.find('a', id='feng')# <a href="" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a>a_tag.texta_tag.string

打印结果:

凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘

# 另一个例子a_tag=soup.find('div',class_='song')a_tag.strings'''<generator object Tag._all_strings at 0x00000200F390BAC0>''' # 不同的编译器显示不同a_tag.text'''李清照王安石苏轼柳宗元this is span宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱总为浮云能蔽日,长安不见使人愁'''

取属性

a_tag['attrName']

a_tag.a['attrName']

a_tag['class']# 打印结果 ['song']a_tag.a['href']# 打印结果 /

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。