爬蟲定位 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'))


"""

"""

查找的網頁位置css

<!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>
相關文章
相關標籤/搜索