跳转到主要内容

Parsel是一个使用XPath和CSS选择器从HTML和XML中提取数据的库

项目描述

Tests Supported Python versions PyPI Version Coverage report

Parsel是一个BSD许可协议的Python库,用于从HTMLJSONXML文档中提取数据。

它支持

https://parsel.readthedocs.org 找到 Parsel 的在线文档。

示例 (在线演示)

>>> from parsel import Selector
>>> text = """
        <html>
            <body>
                <h1>Hello, Parsel!</h1>
                <ul>
                    <li><a href="http://example.com">Link 1</a></li>
                    <li><a href="https://scrapy.net.cn">Link 2</a></li>
                </ul>
                <script type="application/json">{"a": ["b", "c"]}</script>
            </body>
        </html>"""
>>> selector = Selector(text=text)
>>> selector.css('h1::text').get()
'Hello, Parsel!'
>>> selector.xpath('//h1/text()').re(r'\w+')
['Hello', 'Parsel']
>>> for li in selector.css('ul > li'):
...     print(li.xpath('.//@href').get())
http://example.com
http://scrapy.org
>>> selector.css('script::text').jmespath("a").get()
'b'
>>> selector.css('script::text').jmespath("a").getall()
['b', 'c']

历史

1.9.1 (2024-04-08)

  • 移除了对 pytest-runner 的依赖。

  • 移除了过时的 Makefile

1.9.0 (2024-03-14)

  • 现在需要 cssselect >= 1.2.0(自 1.8.0 起需要此最低版本,但未正确记录)

  • 移除了对 Python 3.7 的支持

  • 添加了对 Python 3.12 和 PyPy 3.10 的支持

  • 修复了在调用某些 JSON 选择器的 __str____repr__ 时出现的异常

  • 使用 black 格式化代码

  • CI 修复和改进

1.8.1 (2023-04-18)

  • 从 NEWS 中移除 Sphinx 参考,以修复 PyPI 描述

  • 添加 twine check CI 检查以检测此类问题

1.8.0 (2023-04-18)

  • 添加了对 JMESPath 的支持:您现在可以创建一个 JSON 文档的选择器并调用 Selector.jmespath()。有关更多信息示例,请参阅文档

  • 选择器现在可以从 bytes(使用 bodyencoding 参数)而不是 str(使用 text 参数)构建,因此没有从 strbytes 的内部转换,内存使用量更低。

  • 类型改进

  • 不再使用 pkg_resources 模块(该模块不在要求中)

  • 文档构建修复

  • 新的要求

    • jmespath

    • typing_extensions(在 Python 3.7 上)

1.7.0 (2022-11-01)

  • 添加 PEP 561 风格的类型信息

  • 移除了对 Python 2.7、3.5 和 3.6 的支持

  • 添加了对 Python 3.9-3.11 的支持

  • 现在可以解析非常大的文档(具有深层嵌套或长标签内容),并且 Selector 现在有一个新的参数 huge_tree 来禁用此功能

  • 添加了对 cssselect 1.2.0 新特性的支持

  • Selector.remove()SelectorList.remove() 方法已弃用,并替换为新的 Selector.drop()SelectorList.drop() 方法,这些方法在 HTML 模式下使用时不会删除删除元素之后的文本。

1.6.0 (2020-05-07)

  • 不再支持 Python 3.4

  • 添加了新的 Selector.remove()SelectorList.remove() 方法,用于从解析的文档树中删除选定的元素

  • 错误报告、测试覆盖率和文档的改进,以及代码清理

1.5.2 (2019-08-09)

  • Selector.remove_namespaces 获得了显著的性能提升

  • 选择器的可打印表示形式中的 data 值现在在截断时以 ... 结尾,以便使截断明显。

  • 轻微的文档改进。

1.5.1 (2018-10-25)

  • has-class XPath 函数正确处理了类名中的换行符和其他分隔符;

  • 修复了解析包含空字节的 HTML 文档的问题;

  • 文档改进;

  • 在 CI 上运行 Python 3.7 测试;其他测试改进。

1.5.0 (2018-07-04)

  • 添加了新的 Selector.attribSelectorList.attrib 属性,这使得获取 HTML 元素的属性变得更加容易。

  • CSS选择器速度提升:编译结果被缓存(使用LRU缓存用于css2xpath),因此当相同的CSS表达式多次使用时,开销更小。

  • .get().getall()选择器方法已被文档化并推荐,优于.extract_first().extract()

  • 各种文档调整和改进。

另一个变化是,现在使用.get().getall()实现.extract().extract_first()方法,而不是反过来,并且除了调用Selector.extract之外,其他所有方法现在都内部调用Selector.get。如果自定义Selector子类覆盖了Selector.extract但没有对Selector.get做同样处理,这可能会导致不兼容。如果您有这样的Selector子类,请确保也覆盖了get方法。例如,这

class MySelector(parsel.Selector):
    def extract(self):
        return super().extract() + " foo"

应该改为这样

class MySelector(parsel.Selector):
    def get(self):
        return super().get() + " foo"
    extract = get

1.4.0 (2018-02-08)

  • SelectorSelectorList不能被序列化,因为序列化和反序列化对lxml.html.HtmlElement不起作用;parsel现在显式地抛出TypeError,而不是允许pickle静默地产生错误输出。如果您使用的是Python < 3.6,这可能是向后不兼容的。

1.3.1 (2017-12-28)

  • 修复了上传到pypi的工件。

1.3.0 (2017-12-28)

  • has-class XPath扩展函数;

  • parsel.xpathfuncs.set_xpathfunc是注册XPath扩展的简化方式;

  • Selector.remove_namespaces现在删除命名空间声明;

  • 删除了对Python 3.3的支持;

  • make htmlview命令,以便更容易地开发Parsel文档。

  • CI:修复了PyPy的安装;parsel现在也为PyPy3运行测试。

1.2.0 (2017-05-17)

  • 添加了SelectorList.getSelectorList.getall方法,作为SelectorList.extract_firstSelectorList.extract的别名

  • SelectorList.re_first方法添加了默认值参数

  • 添加了Selector.re_first方法

  • .re().re_first()上添加了replace_entities参数,以关闭替换字符实体引用

  • 错误修复:检测lxml解析的None结果,并回退到空文档

  • 重新排列选择器使用文档中的XML/HTML示例

  • Travis CI

    • 测试Python 3.6

    • 使用“Portable PyPy for Linux”发行版测试PyPy

1.1.0 (2016-11-22)

  • 将默认HTML解析器更改为lxml.html.HTMLParser,这使得使用一些HTML特定功能更容易

  • 添加css2xpath函数以将CSS转换为XPath

  • 添加对临时命名空间声明的支持

  • 添加对XPath变量的支持

  • 文档改进和更新

1.0.3 (2016-07-29)

  • 添加BSD-3-Clause许可证文件

  • 重新启用PyPy测试

  • 将pytest运行集成到setuptools中(需要Debian打包)

  • 更改了变更日志的名称为NEWS

1.0.2 (2016-04-26)

  • 修复了异常处理中的错误,导致原始跟踪信息丢失

  • 添加了文档字符串和其他文档修复

1.0.1 (2015-08-24)

  • 更新PyPI分类器

  • 为csstranslator模块添加了文档字符串和其他文档修复

1.0.0 (2015-08-22)

  • 文档修复

0.9.6 (2015-08-14)

  • 更新文档

  • 扩展测试覆盖率

0.9.5 (2015-08-11)

  • 支持扩展SelectorList

0.9.4 (2015-08-10)

  • 尝试解决travis-ci/dpl#253的问题

0.9.3 (2015-08-07)

  • 添加base_url参数

0.9.2 (2015-08-07)

  • 将模块统一重命名为selector并提升root属性

  • 添加create_root_node函数

0.9.1 (2015-08-04)

  • 设置Sphinx构建和文档结构

  • 构建通用轮

  • 重命名一些包提取的残留部分

0.9.0 (2015-07-30)

  • 在PyPI上首次发布。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

parsel-1.9.1.tar.gz (51.2 kB 查看哈希值)

上传时间

构建分发

parsel-1.9.1-py2.py3-none-any.whl (17.1 kB 查看哈希值)

上传时间 Python 2 Python 3

支持