Python学习——11.html页面解析

html测试脚本:

<!DOCTYPE html>
<html>
<head>
    <meta content="text/html;charset=utf-8" http-equiv="content-type"/>
    <meta content="IE=Edge" http-equiv="x-UA-Compatible"/>
    <meta content="always" name="referrer"/>
    <link href="https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css" rel="stylesheet" type="text/css"/>
    <title>百度一下·你就道</title>
</head>
<body Link="#0000cc">
    <div id="wrapper">
    <div id="head">
        <div class="head_wrapper">
         <div id="u1">
            <a class="mnav" href="http://news.baidu.com" name="tj_trnews"><!--新wen--></a>
            <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新阀</a>
            <a class="mnav" href="https://www.hao123.com" name="tj_trhao123">hao123</a>
            <a class="mnav" href="http://map.baidu.com"  name="tj_trmap">地图</a>
            <a class="mnav" href="http://v.baidu.com" name="tj_trvideo">规频</a>
            <a class="mnav" href="http://tieba.baidu.con" name="tj_trtieba">贴</a>
            <a class="bri"  href="//www.baidu.com/more/" name="tj_br1icon" styLe="...">更多产品</a>
         </div>
        </div>
    </div>
</div>
</body>
</html>


 基本操作解析脚本:

'''
BeautifulSoup4将复杂html文档转换成一个复杂的树形结构,每个节点都是python对象,所以对象都可以归纳为4种

-Tag
-NavigableString
-BeautifulSoup
-Comment

'''

from bs4 import BeautifulSoup

file = open("./baidu.html","rb")
html = file.read()
bs = BeautifulSoup(html,"html.parser")

#1.Tag   标签及其内容(只能拿到第一个内容)
print(bs.title)
##<title>百度一下·你就道</title>##

#2.NavigableString 标签里的字符串
print(bs.title.string)
##百度一下·你就道##

print(bs.a.attrs)
##{'class': ['mnav'], 'href': 'http://news.baidu.com', 'name': 'tj_trnews'}##


#3.BeautifulSoup    整个文档输出
print(bs)

#4.Comment   是一个特殊的NavigableString类型,不包含注释符号
print(bs.a.string)
##新wen##
'''
 <a class="mnav" href="http://news.baidu.com" name="tj_trnews"><!--新wen--></a>
 <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新阀</a>
'''

BeautifulSoup4文档搜索和文档遍历:

'''
BeautifulSoup4将复杂html文档转换成一个复杂的树形结构,每个节点都是python对象,所以对象都可以归纳为4种

-Tag
-NavigableString
-BeautifulSoup
-Comment

'''
import re

from bs4 import BeautifulSoup

file = open("./baidu.html","rb")
html = file.read().decode("utf-8")
bs = BeautifulSoup(html,"html.parser")


#文档遍历     更多遍历内容搜索文档
#print(bs.head.contents)

#print(bs.head.contents[1])
##<meta content="text/html;charset=utf-8" http-equiv="content-type"/>##



#文档搜索
############################################  find_all()  ################################################
#finde_all()查找所有          字符串过滤,查找与字符串完全一致的内容
# t_list = bs.find_all("a")
# print(t_list)
'''
[<a class="mnav" href="http://news.baidu.com" name="tj_trnews"><!--新wen--></a>, 
<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新阀</a>,
<a class="mnav" href="https://www.hao123.com" name="tj_trhao123">hao123</a>, 
<a class="mnav" href="http://map.baidu.com" name="tj_trmap">地图</a>, 
<a class="mnav" href="http://v.baidu.com" name="tj_trvideo">规频</a>, 
<a class="mnav" href="http://tieba.baidu.con" name="tj_trtieba">贴</a>, 
<a class="bri" href="//www.baidu.com/more/" name="tj_br1icon" style="...">更多产品</a>]
'''

import re
#正则表达式,使用search()方法

#正则表达式匹配  凡是含有a的内容都会返回
# t_list = bs.find_all(re.compile("a"))
# print(t_list)


#方法   传入一个函数(),根据函数要求搜索
# def namests(tag):
#     return tag.has_attr("name")
# #包含函数中所指定的必须有name 的内容才会输出
# t_list = bs.find_all(namests)
# print(t_list)
'''
[<meta content="always" name="referrer"/>, 
<a class="mnav" href="http://news.baidu.com" name="tj_trnews"><!--新wen--></a>, 
<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新阀</a>, 
<a class="mnav" href="https://www.hao123.com" name="tj_trhao123">hao123</a>, 
<a class="mnav" href="http://map.baidu.com" name="tj_trmap">地图</a>, 
<a class="mnav" href="http://v.baidu.com" name="tj_trvideo">规频</a>, 
<a class="mnav" href="http://tieba.baidu.con" name="tj_trtieba">贴</a>, 
<a class="bri" href="//www.baidu.com/more/" name="tj_br1icon" style="...">更多产品</a>]
'''

############################################  kwargs 参数  ################################################
# t_list = bs.find_all(id="head")  #herf="http://news.bidu.com"
# print(t_list)

############################################  string 参数  ################################################
# t_list = bs.find_all(string = "hao123")
'''
t_list = bs.find_all(string = ["hao123","地图"])  #可以将参数放进list,多参数获取
t_list = bs.find_all(string = re.compile("\d")   #正则表达式获取带有数字的内容
'''
# print(t_list)

############################################  string 参数  ################################################
# t_list = bs.find_all("a",limit=3)  ##限定获取内容的条数
#
# print(t_list)

############################################  css选择器  ################################################
# print(bs.select("title")) #通过标签查找
# print(bs.select(".mnav")) #通过类名查找
# print(bs.select("#u1"))   #通过id查找
# print(bs.select("a[class='bri']"))#通过属性查找

# print(bs.select("#u1 > .bri"))#通过子标签查找

# t_list =bs.select(".mnav ~ .bri")#通过兄弟标签查找
# print(t_list[0].get_text())


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值