python爬虫解析库初学

       解析库的使用等价于在HTML中查找需要的信息时时使用正则,能够更加快捷地定位到具体的元素获取相应的信息。这里主要简单地介绍XPath,Beautiful Soup的用法,纵向学习对比两种库的用法。

from lxml import etree
from bs4 import BeautifulSoup
  • 将文本/文件/URL转为对应的类型以获取数据

    lxml可以读字符串和文件格式的html文档并且自动补全关闭标签,生成 lxml.etree._Element 数据类型可以用于XPath解析
b=etree.HTML(a)#字符串变量转为etree的数据类型
b=etree.parse(filename,etree.HTMLParser())#HTML文件转为etree的数据类型

BeatifulSoup直接读取字符串(可修正HTML文本),生成  bs4.BeautifulSoup 类的一个对象


c=BeautifulSoup(a,'lxml')#依赖于第三方解析器,这里选取lxml作为其解析器
  • 获取标签,属性,内容

    XPath

    xpath使用 //标签 获取所有该标签节点 /标签 获取所有直接子节点,//标签[1] 选取所有该标签中的第一个(下标从1开始,使用较多);
    获取属性时直接使用在该标签后加 /@class 对应属性名称即可,注意此时返回为列表形式;通过属性值筛选标签时需 /ul[@href="..."] 这种方式获取,若某些属性含多值时可用 [contains(@属性名,“value”)];多属性筛选时可加 and or等运算符;
    获取标签中的内容时 /text(),同样以列表形式返回。若此时该标签内仍有子标签则会以列表形式返回子标签前的文本,若需获取的文本在子标签内则通过 继续取标签的子标签然后 /text()

    BeautifulSoup

    获取标签可使用 bs.ul 直接 .标签名称,返回数据类型为 bs4.element.Tag 且只返回符合条件的第一个标签,返回一个Tag对象;使用 find_all() 查找符合条件元素,参数分别为name='标签名称',attrs={'属性名':'value'},或者 属性名='value' ,注意这种方式时 find_all(class_='value'),类名属性较为特殊,text='value'或者正则表达式,以上参数设置可选定特定条件的标签,返回Tag对象组成的列表;使用 select("") 中的参数与CSS选择器方式类似,例如,select('.classname'),返回列表;
    获取属性直接在获取的标签对象后加 ['属性名'] 或者 ul.attrs['属性名'];
    获取文本时直接使用 .string 即可返回文本
  • 另外,以上两种解析器标签选择后由于返回对象均和选择之前数据类型相同,所以仍可用选择前的所有方式继续选择子标签内容。
个人感觉,Beautiful Soup相对更好用,另外pyquery也可以解析HTML文本,具体用哪种解析方式需要根据具体HTML进行调整。继第一篇博客大概已有10个月之久,望努力从输出有价值的内容开始,最后,六一快乐!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值