爬虫定位 3 bs4

# -*- coding:utf-8 -*-


from bs4 import BeautifulSoup
import codecs
# BeautifulSoup 是python支持第三方的解析包,用于解析HTML网页,提取信息

# lxml 第三方的解析包,解析html 速度比较快,功能强大 ,底层是c语言实现
######## 1 html 源代码 2 解析器 lxml
        # bs 根节点对象
bs = BeautifulSoup(codecs.open("index.html", "r", encoding="utf-8"), 'lxml')
        #bs 是BeautifulSoup 类型对象
print(type(bs.prettify()))
print(type(bs))

print(bs.head)
# 类型是Tag  bs4.element.Tag子节点
print(type(bs.head))

#name 字节的名称,bs.name获取得到是【document】文件
# 对于a\p\div 等标签来数,获取的就是标签的名称
print(bs.name)
print(bs.title.name)
# 字符串
print(type(bs.title.name))
# # attrs获取标签节点的属性。返回的是一个key:values的字典,如果属性有多个值返回的是列表
print(bs.a.attrs)
# #获取某一个属性值
print(bs.a['href'])
print(bs.a["class"])
# #<class 'bs4.element.NavigableString'> 类型 节点之间的text文本
print(bs.a.string)
print(type(bs.a.string))

#
# # bs4 使将html代码转换为一个python对象(BeautifulSoup)
# # Tag : 指的就是html 中的一个标签(包含开始标签和结束标签在内的整个标签),name。attrs,
# # string
# # NavigableString :指的是标签中的文本,不包含标签

print(bs.head.contents)
# content 获取直接子节点,返回一个列表
print(bs.body.contents)

# 根据索引从所有节点中取出某一个
title = bs.head.contents[3]
print(title)
print(title.string)

# children 返回的是列表生成器
res = bs.body.children
for ele in res:
    print("*****")
    print(ele)
#descendants 获取子孙节点(包含子节点,子节点的子节点,每个节点的内容),返回的 结果是一个生成器对象
res = bs.body.descendants
for ele in res:
    print("...")
    print(ele)

# 获取节点的父节点
print(bs.title.parent)
# next_sibling 获取节点的下一个兄弟节点  \n 是一个字节
print(bs.meta.next_sibling.next_sibling)
# previous_sibling 获取节点的上一个兄弟节点
print(bs.title.previous_sibling.previous_sibling)

# # 搜索 文档树中的数据
res = bs.find_all("p")
print(res)
# # 可以根据多个标签名查找
es = bs.find_all(["p", "a"])
print(es)

# find()函数查找唯一标签
# find_all()
#通过class类名查找。不能直接写class 因为class是python关键字,使用class_代替
print(bs.find_all(class_="two"))

# 2 通过css 选择器 查找标签,返回时一个列表,列表中存放是要查找的标签
#    # 代表是ID  .表示class
print(bs.select('#data'))
print(bs.select('.two'))
# 找到指定的标签
print(bs.select('a[target="_blank"]'))
# 找到某个标签下的指定属性值的标签
print(".....")
#.表示class
print(bs.select('div .spider'))
print(bs.select('div #data'))


"""

"""

查找的网页位置

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>bs4测试网页</title>
    <style>
        <!--css选择器-->
        #web span{
            color: red;
        }
        /*#id   .class*/
        /*p span  后代选择器*/
        /*p>span 直接子标签*/
    </style>
</head>
<body>

    <a href="http://www.baidu.com" id="top" class="one two three" target="_blank">百度一下</a>
    <p class="spider">qwertyui</p>
    <div>
        <p class="spider">Python爬虫工程师</p>
        <p id="web">Python后台工程<span>123456</span></p>
        <p id="data" class="two">数据分析工程师</p>
    </div>
    <a href="#" target="_blank">123</a>
    <a href="#">456</a>
</body>
</html>

猜你喜欢

转载自my.oschina.net/u/3771014/blog/1631896
今日推荐