码迷,mamicode.com
首页 > 其他好文 > 详细

9、bs4

时间:2020-06-27 20:03:27      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:包含   baidu   链接   sele   doc   lang   定义函数   过滤   parse   

‘‘‘
BeautifulSoup4 即bs4,是一种解析器方法,将复杂html文档转换成一个复杂的树形结构,
每个节点都是python对象,所有对象可以归纳为4中:
- Tag
- NavigableString
- BeautifulSoup
- Comment
‘‘‘

from bs4 import  BeautifulSoup

file = open("./baidu.html","rb")
html = file.read()
bs = BeautifulSoup(html,"html.parser") ## 使用parser解析器将html解析为一种树形结构

#1.Tag  标签及其内容:拿到所找到的第一个内容
## 打印出第一个标签及标签的内容
print(bs.title)
print(bs.head)
print(bs.a)
print(type(bs.a))   ## 类型为:<class ‘bs4.element.Tag‘>


## 2.NavigableString 标签里的内容
print(bs.a.string)
print(type(bs.a.string))    ## 类型为:<class ‘bs4.element.NavigableString‘>
print(bs.a.attrs)           ## 取标签中的属性及值

## 3.BeautifulSoup 表示整个文档
print(type(bs))         ## 类型为:<class ‘bs4.BeautifulSoup‘>
print(bs.name)          ##[document]
print(bs.attr)          ## None

## bs是整个文档内容,因此直接对bs操作即可
print(bs)

## 4.Comment  是一个特殊的NavigableString,会将注释当做内容,但不会输出注释符号
print(bs.a.string)
print(type(bs.a.string))

## 以上均为介绍
## --------------------
## 以下为应用
# 1、文档的遍历
print(bs.head.contents[1])  ## 返回head的内容,以列表形式给出
print(bs.head.contents[1])  ## 取列表的第一个值
## 更多内容,可在搜索文档实现

# 2、文档的搜索
## 需要的内容如何定位
## 1) find_all() 按标签查找方法,查找所有
## 字符创过滤:会查找与字符串完全匹配的内容
t_list = bs.find_all("a")       ## 查找所有的a标签链接内容,列表形式给出
print(t_list)

## 2)find_all之 search()方法,按标签中含有的内容匹配查找的方法
import re
## 引入正则表达式
t_list = bs.find_all(re.compile("a"))   ## 标签中含有a,如head标签机器内容
print(t_list)

## 3) find_all之 自定义函数方法,传入一个函数(方法),根据函数的要求搜索
def name_is_exits(tag):
    return tag.has_attr("name") ## 标签中含有name属性的

t_list = bs.find_all(name_is_exits)
 for item in t_list:
     print(item)

# 2、kwargs 参数
t_list = bs.find_all(id="head")
t_list = bs.find_all(class_=True)   ## 这里的class_表示有class这个类
t_list = bs.find_all(href="http://news.baidu.com")
for item in t_list:
     print(item)

# 3、text参数
 t_list = bs.find_all(text = "hao123")
 t_list = bs.find_all(text = ["hao123","地图","贴吧","李老师"])
 t_list = bs.find_all(text=re.compile("\d"))     ## 正则表达式来查找包含特定文本的内容(\d表示标签里的字符串)
 for item in t_list:
      print(item)


# 4、limit 限制获取的个数
 t_list = bs.find_all("a",limit=3)       ## 限制获取的个数
 for item in t_list:
      print(item)

# css 选择器
t_list = bs.select("title")  ## 通过指定标签查找
t_list = bs.select(".mnav")     ##通过指定类名查找,.表示类
t_list = bs.select("#u1")       ## 按照id来查找 <div id="u1">
t_list = bs.select("head > title") ## 通过字标签来查找
t_list = bs.select(".mnav ~ .bri")  ## 通过同级的兄弟来查找
for item in t_list:
     print(item)

9、bs4

标签:包含   baidu   链接   sele   doc   lang   定义函数   过滤   parse   

原文地址:https://www.cnblogs.com/moox/p/13199458.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!