Skip to content

new simplify for dripper v1.5#554

Merged
drunkpig merged 5 commits intoccprocessor:devfrom
ideaflow:dev_simplify
Sep 10, 2025
Merged

new simplify for dripper v1.5#554
drunkpig merged 5 commits intoccprocessor:devfrom
ideaflow:dev_simplify

Conversation

@ideaflow
Copy link
Collaborator

  1. Table
  • 去掉数据表格的判断逻辑:th, thead, tfoot, summary
  • 修改原有判断逻辑:将"caption", "colgroup", "col"标签和单元格中的"headers"属性由表格节点下的所有元素修改为当前表格节点下且不包括其嵌套表格内的节点
  • 如果表格内含有块级元素(且不是表格相关的标签如table, tr等),那么也将该表格作为布局表格
  • 如果一个table是数据表格,那么就将其作为一个单独的item,旧版本则是将其内部的tr/caption等作为一个item
  1. List
    增加列表类型的判断逻辑:
  • 如果列表的直接子节点含有非列表元素,则属于布局列表
  • 如果列表的某一个直接子节点包含块级元素,那么也属于布局列表
    如果是内容列表,则整个列表是一个item_id,如果是布局列表,则在列表内部继续细分item
  1. 将块级元素的判断条件修改为:如果一个元素或者其内部某一个元素是块级元素,那么就将该元素当做块级元素,具体的实现是:在process_node函数中,在遍历当前节点的子节点时,将is_block_element(child)修改为is_block_element(child) or has_block_descendants(child),即如果某个节点本身是块级元素,或者内部包含块级元素,都将其视为块级元素来处理
  2. 修改删除注释的逻辑:将正则表达式匹配修改为依靠lxml.html.HTMLParser的remove_comments=True参数来删除。(有些网页的注释写的不规范,比如只有开头,导致正则匹配的范围错误,会造成误删)
  3. 修改header、footer和aside标签的删除逻辑:改为全部保留,不做删除
  4. 修改class和id名为header、footer或者nav的元素的删除逻辑:对于nav,只有当某个元素的class或者id刚好名为nav,并且属于body的直接子元素,才将其删除;对于header和footer,则不删除,全部保留。
  5. 增加一个逻辑:在创建wrapper元素时,如果其父节点包含cc-select=true,那么将wrapper也添加上cc-select=true
  6. 增加一个逻辑:如果一个block_element内部包含cc-select=true的元素,那么将这个block_element也加上cc-select=true属性
  7. 在process_paragraphs函数中,对于每一个待处理段落,将html.fromstring改为html.fragment_fromstring,因为html.fromstring有可能会还原出以为根元素的完整格式的html,导致_item_id被打在标签上,最后etree.tostring又会将的_item_id消除掉,造成_item_id缺失
  8. 对于内联元素包含块级元素的情况,给该内联元素打上'cc-block-type'='true'的属性,作为在process_paragraphs函数中判断是否要创建wrapper的一个条件
  9. 将simplify中计算xpath路径相关的代码删除(linfeng提的修改)
  10. 在修复html可能存在的标签不闭合问题时,将beautifulsoup替换为selectolax以提高速度

@drunkpig drunkpig merged commit 803441f into ccprocessor:dev Sep 10, 2025
8 checks passed
@ideaflow ideaflow deleted the dev_simplify branch October 14, 2025 09:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants