扫码关注官方订阅号
因定制内容较多,暂时无发现现有爬虫框架满足要求,所以需要自己写(用redis做队列)。 我的问题是在爬虫得到一个网页之后,怎么识别出这个网页是否为中文网页?
认证高级PHP讲师
用 Google Chrome 的识别算法吧,支持 HTML,有 Python 绑定。
首先取响应头里的编码, 如果是几种中文编码之一,则认为中文网页, 如果不是中文编码, 也不是几种unicode方案之一, 则不是中文. 否则再在<head>标签里找 charset , 如果有并且为几种中文编码之一, 则是中文 如果不是中文编码, 也不是几种unicode方案之一, 则不是中文. 否则对body的内容(如果考虑性能问题,可以不对整个body,只对前N个字节)用正则洗标签 过滤所有ASCII码字符, 剩余部分按字取内码, 如果考虑性能问题其实取第一个字符就可以了, 如果性能不重要,可以多采样几个(防止一个页面有中文日文等各种文字混合) 判断采到的字符的内码是否位于中文unicode区域.
(PS: 如果性能非常不重要, 只是要代码简单, 那么做法可以: 正则 [^\x00-\xff] 这样可以取到第一个不是ASCII的字符, 判断这个字符是否是中文字符就可以了)
检查网页编码,看看有没有对应编码的中文字符。
正则取出中文字符,看看在整个页面上的占比
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
用 Google Chrome 的识别算法吧,支持 HTML,有 Python 绑定。
首先取响应头里的编码,
如果是几种中文编码之一,则认为中文网页,
如果不是中文编码, 也不是几种unicode方案之一, 则不是中文.
否则再在<head>标签里找 charset ,
如果有并且为几种中文编码之一, 则是中文
如果不是中文编码, 也不是几种unicode方案之一, 则不是中文.
否则对body的内容(如果考虑性能问题,可以不对整个body,只对前N个字节)用正则洗标签
过滤所有ASCII码字符, 剩余部分按字取内码,
如果考虑性能问题其实取第一个字符就可以了,
如果性能不重要,可以多采样几个(防止一个页面有中文日文等各种文字混合)
判断采到的字符的内码是否位于中文unicode区域.
(PS: 如果性能非常不重要, 只是要代码简单, 那么做法可以: 正则 [^\x00-\xff] 这样可以取到第一个不是ASCII的字符, 判断这个字符是否是中文字符就可以了)
检查网页编码,看看有没有对应编码的中文字符。
正则取出中文字符,看看在整个页面上的占比