數據解析,重中之重!

Hello,我是 Alex 007,一個熱愛計算機編程和硬件設計的小白,爲啥是007呢?因爲叫 Alex 的人太多了,再加上每天007的生活,Alex 007就誕生了。

一、正則表達式

在這裏插入圖片描述

二、XPATH解析

xpath解析是我們在爬蟲中最常用也是最通用的一種數據解析方式,由於其高效且簡介的解析方式受到了廣大程序員的喜愛。在後期學習scrapy框架期間,也會再次使用到xpath解析。

pip install lxml

使用通用爬蟲爬取網頁數據

實例化etree對象,且將頁面數據加載到該對象中

使用xpath函數結合xpath表達式進行標籤定位和指定數據提取

屬性定位:
#找到class屬性值爲song的div標籤
//div[@class=“song”]
層級&索引定位:
#找到class屬性值爲tang的div的直系子標籤ul下的第二個子標籤li下的直系子標籤a
//div[@class=“tang”]/ul/li[2]/a
邏輯運算:
#找到href屬性值爲空且class屬性值爲du的a標籤
//a[@href="" and @class=“du”]
模糊匹配:
//div[contains(@class, “ng”)]
//div[starts-with(@class, “ta”)]
取文本:
# /表示獲取某個標籤下的文本內容
# //表示獲取某個標籤下的文本內容和所有子標籤下的文本內容
//div[@class=“song”]/p[1]/text()
//div[@class=“tang”]//text()
取屬性:
//div[@class=“tang”]//li[2]/a/@href

  • 本地文件:tree = etree.parse(文件名)
    tree.xpath(“xpath表達式”)
  • 網絡數據:tree = etree.HTML(網頁內容字符串)
    tree.xpath(“xpath表達式”)

三、BS4解析

pip install bs4

pip install lxml

使用流程:
- 導包:from bs4 import BeautifulSoup
- 使用方式:可以將一個html文檔,轉化爲BeautifulSoup對象,然後通過對象的方法或者屬性去查找指定的節點內容
(1)轉化本地文件:
- soup = BeautifulSoup(open(‘本地文件’), ‘lxml’)
(2)轉化網絡文件:
- soup = BeautifulSoup(‘字符串類型或者字節類型’, ‘lxml’)
(3)打印soup對象顯示內容爲html文件中的內容
基礎鞏固:
(1)根據標籤名查找
- soup.a 只能找到第一個符合要求的標籤
(2)獲取屬性
- soup.a.attrs 獲取a所有的屬性和屬性值,返回一個字典
- soup.a.attrs[‘href’] 獲取href屬性
- soup.a[‘href’] 也可簡寫爲這種形式
(3)獲取內容
- soup.a.string
- soup.a.text
- soup.a.get_text()
【注意】如果標籤還有標籤,那麼string獲取到的結果爲None,而其它兩個,可以獲取文本內容
(4)find:找到第一個符合要求的標籤
- soup.find(‘a’) 找到第一個符合要求的
- soup.find(‘a’, title=“xxx”)
- soup.find(‘a’, alt=“xxx”)
- soup.find(‘a’, class_=“xxx”)
- soup.find(‘a’, id=“xxx”)
(5)find_all:找到所有符合要求的標籤
- soup.find_all(‘a’)
- soup.find_all([‘a’,‘b’]) 找到所有的a和b標籤
- soup.find_all(‘a’, limit=2) 限制前兩個
(6)根據選擇器選擇指定的內容
select:soup.select(’#feng’)
- 常見的選擇器:標籤選擇器(a)、類選擇器(.)、id選擇器(#)、層級選擇器
- 層級選擇器:
div .dudu #lala .meme .xixi 下面好多級
div > p > a > .lala 只能是下面一級
【注意】select選擇器返回永遠是列表,需要通過下標提取指定的對象

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