Python入门网络爬虫selectolax

举报
Gere 发表于 2022/07/16 21:36:44 2022/07/16
【摘要】 速度对比selectolax对比lxml对比10000个文本解析速度解析效率约为lxml的两倍# -*- coding: utf-8 -*-# @Author : zbzimport timeimport requestsfrom lxml import etreefrom selectolax.parser import HTMLParserurl = "https://www.bai...

速度对比

  • selectolax对比lxml
  • 对比10000个文本解析速度
  • 解析效率约为lxml的两倍
# -*- coding: utf-8 -*-
# @Author   : zbz

import time

import requests
from lxml import etree
from selectolax.parser import HTMLParser

url = "https://www.baidu.com"
html = requests.get(url).text

print("使用lxml")
begin = time.time()
for _ in range(10000):
    tree = etree.HTML(html)
print("耗时 {}秒".format(time.time() - begin))

print("使用selectolax")
begin = time.time()
for _ in range(10000):
    tree = HTMLParser(html)
print("耗时 {}秒".format(time.time() - begin))

在这里插入图片描述

先安装一下

pip install selectolax
  • 不支持xpath语法,我的心好痛
  • 被迫学习了css选择器



实战

html = '''
<demo>

    <h1>============欢迎靓仔进来学习============</h1>
    
    <div id='div1'>
        <a href="htt://blog.csdn.net/MarkAdc/article/details/107736445">小明</a>
        <a href="https://blog.csdn.net/MarkAdc">小白</a>
        <a href="2535.png">大牛</a>
        <a href="1241.jpg" id="python375">小黄</a>
        <a id="python275">小红</a>
    </div>
    
    <div id='div2'>
        <a id="python3"></a>
        <a href="2267.png"></a>
    </div>

</demo>
'''

准备工作

from selectolax.parser import HTMLParser
tree = HTMLParser(html)

查找demo节点下的所有子节点

  • demo > *
for node in tree.css("demo > *"):
    print(node.tag)

在这里插入图片描述

查找demo节点下的所有子孙节点

  • demo >> *
for node in tree.css("demo >> *"):
    print(node.tag)

在这里插入图片描述

查找href属性值含有http的所有节点

  • [href*=“http”]
for node in tree.css('[href*="http"]'):
    args = node.tag.ljust(10), node.text(strip=True).ljust(10), node.attributes
    print("标签={} 文本={} 属性={}".format(*args))

在这里插入图片描述

查找所有href属性值以https开头的a节点

  • a[href^=‘https’]
for node in tree.css("a[href^='https']"):
    args = node.tag.ljust(10), node.text(strip=True).ljust(10), node.attributes
    print("标签={} 文本={} 属性={}".format(*args))

在这里插入图片描述

查找所有href属性值以png结尾的节点

  • [href$=‘png’]
for node in tree.css("[href$='png']"):
    args = node.tag.ljust(10), node.text(strip=True).ljust(10), node.attributes
    print("标签={} 文本={} 属性={}".format(*args))

在这里插入图片描述

查找有id属性的a节点或者li节点

  • a[id], li[id]
for node in tree.css("a[id], li[id]"):  #
    args = node.tag.ljust(10), node.text(strip=True).ljust(10), node.attributes
    print("标签={} 文本={} 属性={}".format(*args))

在这里插入图片描述

查找id值含有python的所有节点

  • *[id*=‘python’]
for node in tree.css("*[id*='python']"):
    args = node.tag.ljust(10), node.text(strip=True).ljust(10), node.attributes
    print("标签={} 文本={} 属性={}".format(*args))

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。