TechBlog
首页分类标签搜索关于

© 2025 TechBlog. All rights reserved.

pythonpyquery的初步使用

12/24/2025
未分类#开发语言#Python

微信小程序星海飞驰

python:pyquery的初步使用

虽然同目录下面有这个ceshi.html文件,但是按照书中的代码写是会报错的。

将代码使用with语句,转换为utf-8就可以正常解析了,如下:

关键知识点解析:

  • pq是PyQuery类的别名,pq(html_content)本质上是调用PyQuery类的构造方法,创建并返回一个PyQuery类的实例。

  • doc作为实例,拥有PyQuery类定义的所有方法(如.find()、.text()、.attr()、.items()等),这也是你能执行doc('.list li')的原因。

  • **因为PyQuery类实现了 Python 的 **__call__魔法方法 。

    __call__方法的作用

    当一个类实现了__call__方法,它的实例就可以像函数一样被调用。PyQuery的__call__方法被设计为接收 CSS 选择器,返回匹配的新 PyQuery 实例,这也是doc('.list li')能生效的核心原理。

    举个简化的例子,模拟PyQuery的__call__实现:


class MyPyQuery:
    def __init__(self, html):
        self.html = html  # 存储HTML内容
    
    def __call__(self, selector):
        # 模拟根据选择器匹配元素的逻辑
        print(f"根据选择器 {selector} 匹配元素")
        return self  # 实际PyQuery会返回新的实例

# 创建实例
my_doc = MyPyQuery('<div class="list"><li>测试</li></div>')
# 实例像函数一样被调用(因为实现了__call__)
my_doc('.list li')  # 输出:根据选择器 .list li 匹配元素

因此,doc('.list li')并不是因为doc是函数,而是doc作为PyQuery实例,通过__call__方法支持了 “调用” 语法。

微信小程序星海飞驰