前言
python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。
申明
本系列所涉及的代码仅用于个人研究与讨论,并不会对网站产生不好影响。
目录结构
lxml库是python的第三方库,安装方式也是十分简单(pip安装),这里就不多赘述。而lxml库的特点就是简单和易上手,并且解析大型文档(特指xml或html文档)的速度也是比较快的,因此写爬虫解析网页的时候它也是我们的一个不错的选择。
这里大家需要明白一个事情:解析网页,其实就是去获取网页源码中的某些节点中的文本内容或属性值。举个例子,比如我们爬取的是小说网站,那么一般获取的是html代码中某些节点的文本值,再比如我们爬取图片网站,那么一般获取的是html代码中某些节点的属性值,这个属性值一般为url地址,但是这个地址指向的是图片内容而已。
初始化:使用lxml库的第一个步骤永远是初始化,只有初始化之后我们才可以去使用它的语法。
初始化方法:
html = etree.HTML(text)
其中:
text : html内容的字符串
html : 一个lxml库的对象
例子:
from lxml import etree #我们主要使用的lxml库中的etree库
text = '''
清空
发送
'''
#开始初始化
html = etree.HTML(text) #这里需要传入一个html形式的字符串
lxml库的语法就是基于xpath语法来的,所以会了xpath语法,自然就会了lxml语法。而在lxml库中,加载xpath语法的方法为:html.xpath('xpath语法')
。
而且观察返回的结果,发现大部分返回的都是以列表的形式返回的结果,这一点请注意。
语法 | 含义 |
---|---|
nodename(节点名字) | 直接根据写的节点名字查找节点,如:div |
// | 在当前节点下的子孙节点中寻找,如://div |
/ | 在当前节点下的子节点中寻找,如:/div |
. | 代表当前节点(可省略不写,就像我们有时候写的相对路径),如:./div |
… | 当前节点的父节点,如:…/div |
下面来个例子:
from lxml import etree
text = '''
这时测试的div
这是嵌套的div标签
这时嵌套的p标签
这时测试的p
'''
html = etree.HTML(text)
result = html.xpath('//div') #使用xpath语法,一是在子孙节点中寻找,二是寻找div的标签
print(result)
#结果:
#[, , ]
上面只是找到节点,但是找到符合条件的结果非常多,因此我们需要进行筛选工作。
**重要说明:**当我们使用筛选时,筛选的方法都是包含在[](中括号)中的。
方法集合一:属性筛选:
方法名\符号 | 作用 |
---|---|
@ | 获取属性或者筛选属性,如:@class |
contains | 判断属性中是否含有某个值(用于多值判断),如:contains(@class,‘hello’) |
属性筛选示例:
from lxml import etree
text = '''
Hello,this is used to tested
你好,这是用于测试的html代码