Python~Css選擇器、Xpath選擇器

寫爬蟲是經常會使用到提取器,這裏做一個簡單的學習記錄。

環境:Python 3.7

模塊:parsel

t = """html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>標籤選擇器</title>
</head>
<style>
    /*-標籤選擇器*/
    p{
        color: #1aff32;
        font-size: 16px;
    }
    span{
        color: #6495ff;
        font-size: 28px;
    }
    div{
        color: #8dd4ff;
        font-size: 32px;
    }
</style>
<body>
    <h1 class="title">標題1</h1>
    <h2 class="title">標題2</h2>
    <h2 class="test">標題3</h2>
    <p>css標籤選擇器的介紹</p>
    <p>標籤選擇器、類選擇器、ID選擇器</p>
    <span>span標籤</span>
    <div>div標籤</div>
    <a href="https://www.baidu.com">百度一下</a>
    <ul>
    <li>列表1</li>
    <li>列表2</li>
    <li>列表3</li>
    <li>列表4</li>
    </ul>
</body>
</html>"""

複製一串html代碼,賦值給變量t
爬蟲中經常需要提取網頁標籤中的內容,re、css、xpath
這裏記錄一下css和xpath常用的提取方法。

這裏使用的是parsel模塊,先將字符串t轉換爲html結構

import parsel
html = parsel.Selector(t)

CSS選擇器

1.提取h1標籤文本

預覽結果:“標題1”

tags = html.css('h1::text').get()
# 或者
# tags = html.css('h1::text').extract_first()
print(tags)

2.提取a標籤的href屬性

預覽結果www.baidu.com

attr = html.css('a::attr(href)').get()
print(attr)

3.提取所有屬性class="title"的標籤

預覽結果['標題1', '標題2']
.get()返回的是字符串,而.getall()返回的是列表。
get()等價於extract_first()getall()等價於extract()

attr_class = html.css('.title::text').getall()
print(attr_class)

4.提取第一個li標籤,提取第二個li標籤,提取最後一個li標籤

預覽結果列表1
預覽結果列表2
預覽結果列表4

lst1 = html.css('li:first-child::text').get()
lst2 = html.css('li:nth-child(2)::text').get()
lst4 = html.css('li:last-child::text').get()
print(lst1)
print(lst2)
print(lst4)


xpath選擇器

1.提取h1標籤文本

預覽結果標題1

tags = html.xpath('//h1/text()').get()
print(tags)

2.提取a標籤的href屬性

預覽結果www.baidu.com

attr = html.xpath('//a/@href').get()
print(attr)

3.提取第一個li標籤,提取第二個li標籤,提取倒數第二個li標籤,提取最後一個標籤

預覽結果列表1
預覽結果列表2
預覽結果列表3
預覽結果列表4

lst1 = html.xpath('//ul/li[1]/text()').get()
lst2 = html.xpath('//ul/li[2]/text()').get()
lst3 = html.xpath('//ul/li[last()-1]/text()').get()
lst4 = html.xpath('//ul/li[last()]/text()').get()
print(lst1)
print(lst2)
print(lst3)
print(lst4)

4.提取屬性class="test"h2標籤

預覽結果標題3

attr_class = html.xpath("//h2[@class='test']/text()").get()
print(attr_class)

總結:在學習爬蟲的過程,個人覺得CSS選擇器要比xpath方便的多。css選擇器是通過標籤提取的,而xpath選擇器則是通過節點提取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章