python爬虫之lxml简单学习案例使用方法

使用BeautifulSoup和lxml,可以解析代码并不规范的网页,并补充代码方便解析。使用过BeatuifulSoup解析网页,解析速度上并没有lxml快,本人爬取过一个网站,用aiohttp+BeautifulSoup,协程一起爬20多个网页,由于解析超时会中断,改用lxml后,就没有出现这个问题,爬取速度提升了数倍。

使用lxml步骤:

1,引入包:from lxml import etree

2,解析获得的网页:html = etree.HTML(要解析的网页或文本)

3,使用etree匹配获得要取得的内容:

例如:获得 html中所有的li内容:

li = html.xpath('//li')

下面是一份完整代码:

假设html内容如下:

<html>
<head></head>
<title>***</title>
<body>
...
<li class="name"  id = "hahaha"> 哈哈哈<a href="'www.bai.com" id="a" ></a></li>
<li class="haha"></li>
...
</body>
</html>

python代码:

from lxml import etree
    html = etree.HTML(html)
    li = html.xpath('//li/@class')      #代表从根目录寻找所有li的class属性,输出 ['name','haha']
    print(html.xpath('//li[contains(@class,"name")]/text()') ) #从根目录寻找class为name的li下的文本,输出为哈哈哈
    print(li.xpath('./a/@href'))  #从li节点开始寻找所有的a节点的href,输出为www.bai.com
    print(li[0].attrib) #输出li[0]的属性,输出为{"class":"name","id":"haha"}
    pirnt(li.text) #哈哈哈

常用的符号如下,跟shell寻找目录路径规则相似:   

表达式 描述
nodename选取此节点的所有子节点
/下一节点
// 从当前节点开始递归下降,此路径运算符出现在模式开头时,表示应从根节点递归下降。
.选取当前节点
.. 选取当前节点的父节点
@  选取属性
@* 选取所有属性
[]   应用筛选模式,可以用来筛选想要的内容


   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值