爬虫必学包 lxml,我的一个使用总结!
你好,我是zhenguo
这是我的第504篇原创
这篇文章讲什么?
我们爬取网页后,无非是先定位到html标签,然后取其文本。定位标签,最常用的一个包lxml
。
在这篇文章,我会使用一个精简后的html页面,演示如何通过lxml
定位并提取出想要的文本,包括:
- html是什么?
- 什么是lxml?
- lxml例子,包括如何定位?如何取内容?如何获取属性值?
html是什么?
html,全称HyperText Markup Language,是超文本标记结构。
html组织结构对应数据结构的树模型。
因为是树,所以只有一个根节点,即一对标签。一对<>和名称组合称为标签,例如,
被称为开始标签,
被称为结束标签。
开始标签中可以添加附加信息,风格为属性名=属性值
。
如下所示,选中的 不难猜想, 废话不多说,举例演示 导入 本站总访问量159323次 使用 接下来,就能方便的定位: 取出一对标签中的内容,使用 如下所示,取出属性名为foot的标签div中的text: 除了定位标签,获取标签间的内容外,也会需要提取属性对应值。 获取标签 得到结果: 还可以做一些特殊的定制操作,如使用 使用text获取内容,a.attrib.get获取对应属性值 最后注意一个区别,a_href等于第二个div标签下的子标签a的href属性值; b_href等于第二个div标签下的子或所有后代标签下a的href属性值: 课程视频制作初衷:根据我过往7年多工作经历,5年多自媒体技术写作经验,以及期间与粉丝们的各种各样的交流,最终我决定打造这个系列课程,全由我一人完成,保证质量。真正帮助那些想从零完成就业的小伙伴们。路在何方,路在脚下。 课程总览:全是Python视频系列课程,包括多门课,帮助你从零到就业。不止一门课,目前已有从零学Python精品120课,正在更新从零学Python网络爬虫,从零学Python数据分析等。初步估计,全部更完至少会有300课。每课长度在2分钟~20分钟不等。 课程服务:课程提供电脑和手机双端学习平台,除了多门课精品视频外,还有配套讲义,完整源码文件。最重要的,会设有班级答疑群,解答疑问。 目前已有23个章节的课程大纲(包括从零学Python编程,从零学爬虫,从零学数据分析),鉴于篇幅有限,我就不一一放到这里了,感兴趣的点击下图二维码,去了解: 帮助你从零到就业 现在价格只有299元 299元录制视频,永久反复回看=从零学Python编程课(120课)+从零学爬虫课(50课)+从零学数据分析课(50课)+班级答疑群+课程讲义+配套资料id
,值为content
,还有属性style
等:什么是lxml?
lxml
官档截图如下,按照官档的说法,lxml
是Python语言中,处理XML和HTML,功能最丰富、最易于使用的库。lxml
中一定实现了查询树中某个节点功能,并且应该性能极好。lxml例子
lxml
超简便的定位能力。lxml
中的etree
:from lxml import etree
my_page
是html风格的字符串,内容如下所示:my_page = '''
我的网站
'''etree.fromstring
转化为可以使用xpath
的对象html = etree.fromstring(my_page)
定位
//div
# 定位
divs1 = html.xpath('//div')id
的所有标签,写法为://div[@id]
divs2 = html.xpath('//div[@id]')
//div[@class="foot"]
divs3 = html.xpath('//div[@class="foot"]')
//div[@*]
divs4 = html.xpath('//div[@*]')
not(@*)
divs5 = html.xpath('//div[not(@*)]')
//div[1]
divs6 = html.xpath('//div[1]')
//div[last()]
divs7 = html.xpath('//div[last()]')
//div[position()<3]
,注意从1开始:divs8 = html.xpath('//div[position()<3]')
//div|//h1
,使用|
表达:divs9 = html.xpath('//div|//h1')
取内容
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
的标签。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 = html.xpath('//div[position()=2]/a/@href')
print(a_href)
b_href = html.xpath('//div[position()=2]//a/@href')
print(b_href)宣传我的课程