You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于urllib的阿拉伯语网站爬取:<font>标签解析异常问题

解决自定义HTML解析器无法提取标签内容的问题

核心问题分析

你的解析器仅针对<p>标签做了内容提取逻辑,未处理嵌套<font>标签或直接用<font>包裹内容的场景,再加上阿拉伯语网站可能存在的编码差异,最终导致内容提取失败。

具体修复方案

1. 扩展标签匹配规则

修改解析器的标签处理逻辑,同时监听<p>和<font>标签的开始与结束状态,记录当前是否处于目标标签内,无论标签是否嵌套都能捕获内容。

2. 适配阿拉伯语编码

阿拉伯语网站常用编码为Windows-1256或UTF-8,使用urllib获取响应后,先确认编码再解码,避免乱码导致的解析异常。

修改后的代码示例

from urllib.request import urlopen

class CustomHTMLParser:
    def __init__(self):
        self.in_target_tag = False
        self.content = []
    
    def feed(self, html):
        i = 0
        len_html = len(html)
        while i < len_html:
            # 匹配<p>或<font>开始标签
            if html.startswith('<p', i) or html.startswith('<font', i):
                end_tag = html.find('>', i)
                if end_tag != -1:
                    self.in_target_tag = True
                    i = end_tag + 1
                else:
                    i += 1
            # 匹配</p>或</font>结束标签
            elif html.startswith('</p>', i) or html.startswith('</font>', i):
                self.in_target_tag = False
                tag_len = len('</p>') if html.startswith('</p>', i) else len('</font>')
                i += tag_len
            # 处于目标标签内时收集文本
            elif self.in_target_tag:
                next_tag = html.find('<', i)
                if next_tag != -1:
                    self.content.append(html[i:next_tag].strip())
                    i = next_tag
                else:
                    self.content.append(html[i:].strip())
                    break
            else:
                i += 1
    
    def get_content(self):
        return ' '.join([text for text in self.content if text])

# 爬取解析流程
url = "你的目标URL"
response = urlopen(url)
html_bytes = response.read()

# 兼容阿拉伯语编码
try:
    html = html_bytes.decode('utf-8')
except UnicodeDecodeError:
    html = html_bytes.decode('windows-1256')

parser = CustomHTMLParser()
parser.feed(html)
print(parser.get_content())

说明

  • 解析器同时支持<p>和<font>标签,不管是<p>嵌套<font>还是单独的<font>标签,都能提取其中的文本内容。
  • 编码处理部分做了兼容,解决阿拉伯语网站常见的编码混乱问题。
  • 全程使用原生urllib实现,未引入第三方解析库,符合你的需求。

内容的提问来源于stack exchange,提问作者Zeid Tisnes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:15:01