成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

爬蟲必學(xué)包 lxml,搞個有趣的

開發(fā) 后端
在這篇文章,我會使用一個精簡后的html頁面,演示如何通過lxml定位并提取出想要的文本。

你好,我是zhenguo,今天搞點有趣的。

這篇文章講什么?

我們爬取網(wǎng)頁后,無非是先定位到html標簽,然后取其文本。定位標簽,最常用的一個包lxml。

在這篇文章,我會使用一個精簡后的html頁面,演示如何通過lxml定位并提取出想要的文本,包括:

  • html是什么?
  • 什么是lxml?
  • lxml例子,包括如何定位?如何取內(nèi)容?如何獲取屬性值?

html是什么?

html,全稱HyperText Markup Language,是超文本標記結(jié)構(gòu)。

html組織結(jié)構(gòu)對應(yīng)數(shù)據(jù)結(jié)構(gòu)的樹模型。

因為是樹,所以只有一個根節(jié)點,即一對<html></html>標簽。一對<>和名稱組合稱為標簽,例如,<html>被稱為開始標簽,</html>被稱為結(jié)束標簽。

開始標簽中可以添加附加信息,風(fēng)格為屬性名=屬性值。

如下所示,選中的<div>就是一個開始標簽,它有屬性id,值為content,還有屬性style等:

什么是lxml?

lxml官檔截圖如下,按照官檔的說法,lxml是Python語言中,處理XML和HTML,功能最豐富、最易于使用的庫。

不難猜想,lxml中一定實現(xiàn)了查詢樹中某個節(jié)點功能,并且應(yīng)該性能極好。

lxml例子

廢話不多說,舉例演示lxml超簡便的定位能力。

導(dǎo)入lxml中的etree:

from lxml import etree

my_page是html風(fēng)格的字符串,內(nèi)容如下所示:

my_page = '''
<html>
<title>程序員zhenguo</title>
<body>
<div>我的文章</div>
<h1>我的網(wǎng)站</h1>
<div id="photos">
<img src="pic1.png" />
<span id="pic1"> 從零學(xué)Python </span>
<img src="pic2.png" />
<span id="pic2">大綱</span>
<p>
<a href="http://www.zglg.work">更多詳情</a>
</p>
<a href="http://www.zglg.work/python-packages/">Python包</a>
<a href="http://www.zglg.work/python-intro/">Python小白</a>
<a href="http://www.zglg.work/python-level/">Python進階</a>
</div>
<div id="explain">
<p class="md-nav__item">本站總訪問量159323次</p>
</div>
<div class="foot">Copyright ? 2019 - 2021 程序員zhenguo</div>
</body>
</html>
'''

使用etree.fromstring轉(zhuǎn)化為可以使用xpath的對象。

html = etree.fromstring(my_page)

定位

接下來,就能方便的定位:

  1. 定位出所有div標簽,寫法//div

# 定位
divs1 = html.xpath('//div')
  1. 定位出含有屬性名為id的所有標簽,寫法為://div[@id]

divs2 = html.xpath('//div[@id]')
  1. 定位出含有屬性名class等于foot的所有div標簽,寫法為://div[@class="foot"]

divs3 = html.xpath('//div[@class="foot"]')
  1. 定位出含有屬性名的所有div標簽,寫法為://div[@*]

divs4 = html.xpath('//div[@*]')
  1. 定位出不含有屬性名的所有div標簽,寫法為:not(@*)

divs5 = html.xpath('//div[not(@*)]')
  1. 定位出第一個div標簽,寫法為://div[1]

divs6 = html.xpath('//div[1]')
  1. 定位出最后一個div標簽,寫法為://div[last()]

divs7 = html.xpath('//div[last()]')
  1. 定位出前兩個div標簽,寫法為//div[position()<3],注意從1開始:

divs8 = html.xpath('//div[position()<3]')
  1. 定位出所有div標簽和h1標簽,寫法為://div|//h1,使用|表達:

divs9 = html.xpath('//div|//h1')

取內(nèi)容

取出一對標簽中的內(nèi)容,使用text()方法。

如下所示,取出屬性名為foot的標簽div中的text:

text1 = html.xpath('//div[@class="foot"]/text()')

取屬性

除了定位標簽,獲取標簽間的內(nèi)容外,也會需要提取屬性對應(yīng)值。

獲取標簽a下所有屬性名為href的對應(yīng)屬性值,寫法為://a/@href

value1 = html.xpath('//a/@href')

得到結(jié)果:

['http://www.zglg.work', 'http://www.zglg.work/python-packages/', 'http://www.zglg.work/python-intro/', 'http://www.zglg.work/python-level/']

還可以做一些特殊的定制操作,如使用findall方法,定位到div標簽下帶有a的標簽。

使用text獲取內(nèi)容,a.attrib.get獲取對應(yīng)屬性值。

divs = html.xpath('//div[position()<3]')
for div in divs:
ass = div.findall('a') # div/a
for a in ass:
if a is not None:
# print(dir(a))
print(a.text, a.attrib.get('href'))

最后注意一個區(qū)別,a_href等于第二個div標簽下的子標簽a的href屬性值;

b_href等于第二個div標簽下的子或所有后代標簽下a的href屬性值:

a_href = html.xpath('//div[position()=2]/a/@href')
print(a_href)
b_href = html.xpath('//div[position()=2]//a/@href')
print(b_href)
責(zé)任編輯:龐桂玉 來源: Python小例子
相關(guān)推薦

2022-10-10 23:19:02

Python腳本語言工具庫

2020-04-25 19:00:15

Linux終端命令

2014-11-14 17:08:24

代碼

2010-08-18 08:53:53

Scala

2012-09-07 10:09:56

CC語言編程

2015-07-30 09:27:04

2024-06-25 15:41:41

2024-10-23 08:00:00

PythonExcel數(shù)據(jù)分析

2019-12-03 19:09:19

JavaScriptNumbers阿里云計算

2009-08-25 14:25:19

Eclipse 3.5

2011-02-13 13:04:00

HTML 5Web

2023-08-13 08:29:27

ChatGPT指令AI

2022-06-16 08:35:10

CSS屬性前端

2018-10-25 14:47:53

分析消費數(shù)據(jù)挖掘

2011-07-11 10:16:07

JavaScript

2019-11-25 14:24:24

機器學(xué)習(xí)算法數(shù)據(jù)

2022-09-20 15:43:58

Python工具包編程

2025-02-10 00:45:00

pairplotheatmaplmplot

2020-09-06 08:19:11

Python編程語言開發(fā)

2022-05-15 15:14:04

爬蟲Requests反爬
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩久久久久久 | 久久成人免费 | 美女爽到呻吟久久久久 | www.4虎影院 国产999精品久久久影片官网 | 精品一区二区三区视频在线观看 | 欧美日韩不卡合集视频 | 色综合成人网 | 免费一级黄色电影 | 亚洲免费视频网站 | 国产一区中文字幕 | 欧美一区二区三区视频在线播放 | 亚洲精品3 | av黄色在线 | 中文在线a在线 | 国产亚洲精品精品国产亚洲综合 | 午夜影院普通用户体验区 | 国产精品免费一区二区 | 91社区在线观看播放 | 欧美日韩在线免费观看 | 成人一区二区三区在线观看 | 日韩在线一区视频 | 日韩成人影院 | 欧美成人二区 | 久草.com | 国产成人久久久 | 成人精品国产一区二区4080 | 日本一卡精品视频免费 | 99精品久久 | 暖暖日本在线视频 | 国产精品一区在线观看你懂的 | 黑人巨大精品欧美一区二区免费 | 国产视频一区二区 | 91精品国产乱码久久久 | 亚洲av毛片 | 精品久久久久香蕉网 | 午夜码电影 | 看片wwwwwwwwwww | 国产亚洲欧美在线视频 | 99pao成人国产永久免费视频 | 久热国产在线 | 粉嫩av久久一区二区三区 |