一文弄清Python网络爬虫解析库!内含多个实例讲解

在了解爬虫基础、请求库和正则匹配库以及一个具体豆瓣电影爬虫实例之后,可能大家还对超长的正则表达式记忆犹新,设想如果想要匹配的条目更加多那表达式长度将会更加恐怖,这显然不是我们想要的,因此本文介绍的解析库可以帮助我们更加轻松地提取到特定信息 。

一文弄清Python网络爬虫解析库!内含多个实例讲解

文章插图
 
一、Xpath库1.库简介
XPath(XML Path Language)即XML 路径语言,它是一门在XML文档中查找信息的语言,但它同样适用于html 文档的搜索 。所以在做爬虫时,我们完全可以使用XPath 来做相应的信息抽取 。
2.入门测试
需要导入lxml库(若未安装推荐用pip install lxml安装即可),然后使用下面代码进行简单测试:
from lxml import etreetext = '''<html><body><div><ul><li class="item-0"><a href=https://www.isolves.com/it/cxkf/yy/Python/2021-04-12/"link1.html">first
  • second
  • third
  • fourth
  • '''html = etree.HTML(text)result = etree.tostring(html)print(result.decode('utf-8'))结果如下:可以看到,etree模块不仅将缺少的标签闭合了,而且还加上了html、body节点 。
    <html><body><div><ul><li class="item-0"><a href=https://www.isolves.com/it/cxkf/yy/Python/2021-04-12/"link1.html">first
  • second
  • third
  • fourth
  • 3.基本方法
    xpath的常用规则及基本方法如下:
    一文弄清Python网络爬虫解析库!内含多个实例讲解

    文章插图
     
    • 初始化html
    上文中的入门测试即为初始化html 。其中etree.parse()是初始化html构造一个XPath解析对象;etree.tostring()是修复html文件中代码,把缺的头或尾节点补齐;result.deode('utf-8')修复后的HTML代码是字节类型,转化成字符串 。
    • 获取所有节点
    print(html.xpath('//*')) # 获取所有的节点print(html.xpath('//li')) # 获取所有li节点
    • 子节点、子孙节点
    print(html.xpath('//li/a')) # 所有li下是所有直接a子节点print(html.xpath('//ul//a')) # 所有ul下的子孙a节点
    • 父节点
    # 找到所有a节点中href为links.html的父节点的class值#..来实现查找父节点print(html.xpath('//a[@href=https://www.isolves.com/it/cxkf/yy/Python/2021-04-12/@class'))
    • 属性匹配
    # 找到class值为item-0是节点print(html.xpath('//li[@class="item-0"]'))
    • 文本获取
    # 匹配到class值为item-0节点中的a标签中的文本print(html.xpath('//li[@class="item-0"]/a/text()'))
    • 属性获取
    print(html.xpath('//li/a/@href'))# 找到li下a中的href属性值
    • 属性多值匹配
    #只要节点属性class中包含item就能匹配出来print(html.xpath('//li[contains(@class,"item")]/a/text()'))
    一文弄清Python网络爬虫解析库!内含多个实例讲解

    文章插图
     
    二、BeautifulSoup库1.库简介
    BeautifulSoup4和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据 。BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐使用lxml 解析器 。
    一文弄清Python网络爬虫解析库!内含多个实例讲解

    文章插图
     
    2.入门测试
    假设有这样一个Html(即从百度网页源代码截取一段),具体内容如下:
    html = '''<!DOCTYPE html><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type" /><meta content="IE=Edge" http-equiv="X-UA-Compatible" /><meta content="always" name="referrer" /><link href=https://www.isolves.com/it/cxkf/yy/Python/2021-04-12/"https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css" rel="stylesheet" type="text/css" />百度一下,你就知道 _江苏龙网