python3爬蟲實踐(八) lxml 庫

2021-10-23 04:28:52 字數 2713 閱讀 2850

1、基本使用

from lxml import etree

text =

''' **標題的效果

四級標題的效果

'''# 利用 etree.html ,將字串解析為 html 檔案

html = etree.html(text)

# 將字串序列化為 html 文件

2、從檔案中讀取 html **

from lxml import etree

'''使用lxml.etree.parse()解析html檔案,該方法預設使用的是「xml」解析器,所以如果碰到不規範的html檔案時就會解析錯誤,報錯**如下:

lxml.etree.xmlsyntaxerror: opening and ending tag mismatch: meta line 3 and head, line 3, column 87

解決辦法:

自己建立html解析器,增加parser引數

'''parser = etree.htmlparser(encoding=

"utf-8"

)# 讀取外部檔案 lizi.html

html = etree.parse(

'c:/users/asus/desktop/lizi.html'

,parser = parser)

result = etree.tostring(html,pretty_print =

true

,encoding =

'utf-8'

)print

(result.decode(

'utf-8'

))

3、在 lxml 中使用 xpath 語法

from lxml import etree

parser = etree.htmlparser(encoding=

"utf-8"

)html = etree.parse(

'tengxun.html'

,parser = parser)

# 1. 獲取所有的 meta 標籤

# xpath 函式返回的是乙個列表

metas = html.xpath(

'//meta'

)for meta in metas:

print

(etree.tostring(meta,encoding =

'utf-8'

).decode(

'utf-8'))

# 2. 獲取第二個 meta 標籤

metas = html.xpath(

'//meta[2]')[

0]print

(etree.tostring(metas,encoding =

'utf-8'

).decode(

'utf-8'))

# 3. 獲取所有 class 等於 recruit-share 的 div 標籤

divs = html.xpath(

'//div[@class="recruit-share"]'

)for div in divs:

print

(etree.tostring(div,encoding =

'utf-8'

).decode(

'utf-8'))

# 4. 獲取所有 a 標籤的 class 屬性

alist = html.xpath(

'//a/@class'

)for a in alist:

print

(a)# 5. 獲取所有的職位資訊

divs = html.xpath(

'//div[@class="recruit-list"]'

)positions =

for div in divs:

# 在某個標籤下,在執行 xpath 函式,獲取這個標籤下的子孫元素

# 那麼應該在 // 之前加乙個點,代表在當前元素下獲取

text = div.xpath(

'.//h4')[

0]# text() 是取文字函式,這裡相當於 //h4/text()

title = text.xpath(

'text()')[

0]sector = div.xpath(

'./a/p/span[1]/text()')[

0]address = div.xpath(

'./a/p/span[2]/text()')[

0]category = div.xpath(

'./a/p/span[3]/text()')[

0]time = div.xpath(

'./a/p/span[4]/text()')[

0]position =

print

(positions)

python3爬蟲實踐(二) 爬蟲前奏

1.1 什麼是網路爬蟲 1.2 通用爬蟲和聚焦爬蟲 2.1 什麼是 http 和 https 協議 2.2 在瀏覽器中傳送乙個 http 請求的過程 2.3 url 詳解 scheme host port path query string anchor2.4 常用請求方法 get 請求 一般情況下...

python3爬蟲實踐(七) xpath介紹

1 什麼是 xpath 2 xpath 開發工具 3 xpath 語法 表示式描述 示例結果 nodename 選取此節點的所有節點 bookstore 選取 bookstore 下所有的子節點 如果是在最前面,代表從根節點擊取。否則選擇某節點下的某個節點 bookstore 選取根元素下所有的 b...

python3爬蟲實戰(3)

今天心血來潮去爬取了一下招聘 的實時招聘資訊。是 選的條件是北京,實習生,計算機軟體。分析 之後發現還是很容易的,不過過程中出了不少小問題,在這裡分享一下。想要爬取的是類似的表單內容。是在ul的li裡。用beautifulsoup解析之後,tem ul bsoj.find ul 存下整個ul元素。對...