一、数据解析方式-bs4
1、 爬虫数据的解析常用方式有三种:
1、正则表达式
2、bs4
3、xpath解析
2、本次主要学习bs4,首先要先准备好环境,即要安装使用beautiful Soup,这里已经安装好了bs4模块,如下:
pip install bs4 和 pip install lxml
3、通过一个实例理解bs4的用法:
<html lang="en"> <head> <meta charset="UTF-8" /> <title>Title</title> </head> <body> <div class="url"> <ul> <li><a href="http://www.baidu.com">百度</a></li> <li><a href="http://www.google.com">谷歌</a></li> <li><a href="http://www.sogou.com">搜狗</a></li> </ul> <ol> <li><a href="feiji">飞机</a></li> <li><a href="dapao">大炮</a></li> <li><a href="huoche">火车</a></li> </ol> </div> <div class="job">李嘉诚</div> <div class="common">胡辣汤</div> </body> </html>
如下:
from bs4 import BeautifulSoup #导入bs4 if __name__=="__main__": # 将本地的html文档中的数据加载到该对象中 file = open('b.html', encoding='utf-8') soup = BeautifulSoup(file,'lxml')
print(soup.ul) #返回ul所有内容 # < ul > # < li > < a # href = "http://www.baidu.com" > 百度 < / a > < / li > # < li > < a # href = "http://www.google.com" > 谷歌 < / a > < / li > # < li > < a # href = "http://www.sogou.com" > 搜狗 < / a > < / li > # < / ul > print(soup.div) #等同于print(soup.find('div')) #具体定位到某一个div,可根据属性定位
print(soup.find('div',class_='common')) #<div class="common">胡辣汤</div>
# 属性定位
soup.findAll('tagName') #返回soup中符合要求的所有标签
a_list = soup.findAll('a') #返回的是一个列表
for a in a_list:
print(a)
print(soup.findAll('a')[1]) #定位第2个a标签的内容
# <a href="http://www.google.com">谷歌</a>
# select选择器:
# -select('某种选择器(id,class ,标签。。。选择器)’)
print(soup.select('.common')) #返回login下的所有标签 :[<div class="common">胡辣汤</div>]
print(soup.select('div')[1]) #返回一个列表 :<div class="job">李嘉诚</div>
# 层级选择器
# soup.select('.tag > ul > li > a')[1]#:表示的一个层级,不能在里写所有,
print(soup.select('.url > ol > li > a '))
# [<a href="feiji">飞机</a>, <a href="dapao">大炮</a>, <a href="huoche">火车</a>
#一个>表示一个层级
print(soup.select('.url > ul > li > a')[0]['href'])
# http://www.baidu.com
print(soup.select('.url ul a')) #[<a href="http://www.baidu.com">百度</a>, <a href="http://www.google.com">谷歌</a>, <a href="http://www.sogou.com">搜狗</a>]
print(soup.select('.url ol li a')) #[<a href="feiji">飞机</a>, <a href="dapao">大炮</a>, <a href="huoche">火车</a>]
获取标签的文本数据
#text/get.text() 可以获取某一个标签中所有内容
#string :获取直系标签的内容
print(soup.find('div',class_= 'url').text) #获取一个url下的所有的值# 1、查找所有的<a>标签元素,2、打印每个<a>标签的href属性值
百度
谷歌
搜狗
飞机
大炮
火车
#获取某一个元素的值
print(soup.find('div',class_= 'job').string) #李嘉诚
获取属性的值比如href
links = soup.findAll('a')标签:soup,python,li,bs4,print,div,解析,select From: https://www.cnblogs.com/zp513/p/17948225
for link in links:
print(link['href'])