你好,我是zhenguo,今天搞点有趣的。
专注于为中小企业提供成都做网站、网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业桃山免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
我们爬取网页后,无非是先定位到html标签,然后取其文本。定位标签,最常用的一个包lxml。
在这篇文章,我会使用一个精简后的html页面,演示如何通过lxml定位并提取出想要的文本,包括:
html,全称HyperText Markup Language,是超文本标记结构。
html组织结构对应数据结构的树模型。
因为是树,所以只有一个根节点,即一对标签。一对<>和名称组合称为标签,例如,被称为开始标签,被称为结束标签。
开始标签中可以添加附加信息,风格为属性名=属性值。
如下所示,选中的
lxml官档截图如下,按照官档的说法,lxml是Python语言中,处理XML和HTML,功能最丰富、最易于使用的库。
不难猜想,lxml中一定实现了查询树中某个节点功能,并且应该性能极好。
废话不多说,举例演示lxml超简便的定位能力。
导入lxml中的etree:
from lxml import etree
my_page是html风格的字符串,内容如下所示:
my_page = '''程序员zhenguo
我的文章
我的网站
本站总访问量159323次
Copyright © 2019 - 2021 程序员zhenguo
'''
使用etree.fromstring转化为可以使用xpath的对象。
html = etree.fromstring(my_page)
接下来,就能方便的定位:
# 定位
divs1 = html.xpath('//div')
divs2 = html.xpath('//div[@id]')
divs3 = html.xpath('//div[@class="foot"]')
divs4 = html.xpath('//div[@*]')
divs5 = html.xpath('//div[not(@*)]')
divs6 = html.xpath('//div[1]')
divs7 = html.xpath('//div[last()]')
divs8 = html.xpath('//div[position()<3]')
divs9 = html.xpath('//div|//h1')
取出一对标签中的内容,使用text()方法。
如下所示,取出属性名为foot的标签div中的text:
text1 = html.xpath('//div[@class="foot"]/text()')
除了定位标签,获取标签间的内容外,也会需要提取属性对应值。
获取标签a下所有属性名为href的对应属性值,写法为://a/@href
value1 = html.xpath('//a/@href')
得到结果:
['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获取内容,a.attrib.get获取对应属性值。
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'))
最后注意一个区别,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)
当前名称:爬虫必学包lxml,搞个有趣的
文章位置:http://www.mswzjz.cn/qtweb/news5/53455.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能