TGViewer
开发者工具箱|编程·开发工具·资源 开发者工具箱|编程·开发工具·资源 @devtoolboxhub · 779 subscribers
Post #1499 5
双语爬虫数据陷阱:阿拉伯语与英语

爬虫教程通常只假设单语言场景。当面对阿拉伯语/英语双语市场时,会遇到一种永不抛异常的 bug:请求成功、HTML 解析正确,但每个目标字段都为空。以下是构建双语职位数据集时积累的经验。

一个字段全空的典型场景:抓取职位页的「资历级别」和「雇佣类型」,测试正常,生产环境却返回 null。状态码 200,HTML 有效。原因是链接指向了区域子域名(如 ae.example.com),返回阿拉伯语页面,而选择器匹配的是英文标签「Seniority level」「Employment type」,页面显示为「المستوى الوظيفي」和「نوع التوظيف」。修复只需在抓取前将域名规约为主域名:re.sub(r"https://[a-z]{2}\.example\.com/", "https://www.example.com/", url)。通用教训:如果一个字段在所有记录中都为空,先怀疑地区语言问题,再怀疑选择器本身。防御措施:解析后断言关键字段已填充,否则抛异常——一个会崩溃的爬虫比一个默默返回空值的爬虫好得多。

数字陷阱:阿拉伯页面常使用东阿拉伯数字(如 ٢٠٠ 表示 200)。Python 的 int("٢٠٠") 能正确返回 200,"٢٠٠".isdigit() 为 True,re.findall(r"\d+", text) 能匹配到,因为 \d 默认支持 Unicode。但大多数人习惯写 [0-9]+,这在阿拉伯数字页面上会永远返回空列表,让你误以为字段缺失。如果希望输出始终为 ASCII 数字,可以用 str.maketrans 翻译:ARABIC_DIGITS = str.maketrans("٠١٢٣٤٥٦٧٨٩", "0123456789"),再 int(re.sub(r"\D", "", text.translate(ARABIC_DIGITS)))。

关键词匹配:子串匹配在双语数据集中容易出错。例如 "coo" in title 会匹配到「Coordinator」,把项目协调员误判为首席运营官;"partner" in title 会匹配到「Partner Onboarding Specialist」,把入职专员提升为合作伙伴。解决方案:始终使用单词边界正则 re.search(r"\bcoo\b", title)。数据验证:在发布统计数字前,务必打印实际行。示例中,某市场 18% 的职位被标为「高管级」,打印后发现一半是协调员和入职专员,真实比例仅 16%。

机器翻译与编码:为双语数据集添加阿拉伯语标签时,始终保留原始字段(如 title 和 titleArabic 并存),只将翻译用于显示,所有连接、去重和过滤应在源语言字段上进行。编码方面,在所有读写边界显式设置 UTF-8:sys.stdout.reconfigure(encoding="utf-8"),Path(p).read_text(encoding="utf-8")。注意 UTF-8 BOM 可能导致部分 JSON 解析器报错,先检查 BOM 再检查语法。


以上经验来自维护区域招聘网站的爬虫(输出中英文标签),全部踩坑记录在作者的 Apify 页面。

#开发者 #工具 #爬虫 #Python #阿拉伯语 #双语数据 #Unicode #正则表达式 #数据清洗 #工程效率
@DevToolboxHub
More from @devtoolboxhub
  1. Sep 27, 2026竞品关键词调研的自动化流程 从竞品差距分析导出两万个关键词,约一半只是同一词换了词序。真正的瓶颈在导出之后那一小时:一个好问题变成一堵近似重复词组成的墙,外加三种不同口径的搜索量。…
  2. Sep 26, 2026PostgreSQL 复制槽上限参数 max_replication_slots 解析 max_replication_slots 决定共享内存中复制槽数组的长度,仅此而已。它不决…
  3. Sep 26, 2026五仓库架构踩坑:Gitlink 与双 CI Flude 团队复盘了多仓库架构的实践代价。项目从第一分钟起就选择拆分成独立仓库,Pipeline、engine、design-docs…
  4. Sep 26, 2026Xeno Core:TypeScript 后端架构框架 Node.js 复杂系统的架构选型往往决定代码的长期命运。开发者常在两条路之间纠结:要么依赖重度使用实验性装饰器和反射(如…
  5. Sep 25, 2026用 SLO 给 AI Agent 的行为定个预算 Grafana Labs 提出把可靠性工程里的错误预算(error budget)思路用到 AI Agent 上。延迟、token…
  6. Sep 25, 2026Xcode 27.2 改用 JSON 项目格式 Xcode 27.2 用基于 JSON 的 project.xcproj 取代了沿用多年的 project.pbxproj。新建项目…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →