谢乾坤 | Kingname

给时光以生命。

GNE(GeneralNewsExtractor)是一个通用新闻网站正文抽取模块,输入一篇新闻网页的 HTML, 输出正文内容、标题、作者、发布时间、正文中的图片地址和正文所在的标签源代码。GNE在提取今日头条、网易新闻、游民星空、 观察者网、凤凰网、腾讯新闻、ReadHub、新浪新闻等数百个中文新闻网站上效果非常出色,几乎能够达到100%的准确率。

阅读全文 »

假设你有一个函数connect,它有一个参数address,这个参数可能是一个字符串,也可能是一个元组。例如:

1
2
connect('123.45.32.18:8080')
connect(('123.45.32.18', 8080))

你想在代码里面兼容这两种写法,于是你可能会这样写代码:

1
2
3
4
5
6
7
def connect(address):
if isinstance(address, str):
ip, port = address.split(':')
elif isinstance(address, tuple):
ip, port = address
else:
print('地址格式不正确')

这种写法简单直接,但是如果参数的类型更多,那么你就需要写很长的 if-elif-elif-...-else。代码看起来就非常不美观。

学习过 Java 的同学,应该对函数重载比较熟悉,可以定义几个名字相同的函数,但是他们的参数类型或者数量不同,从而实现不同的代码逻辑。

在 Python 里面,参数的数量不同可以使用默认参数来解决,不需要定义多个函数。那如果参数类型不同就实现不同的逻辑,除了上面的 if-else外,我们还可以使用functools模块里面的singledispatch装饰器实现函数重载。

阅读全文 »

在知乎上有这样一个问题:《如果当年汉字真的拼音化了会怎么样?》,下面有一个高赞回答写道:

这个答主的逻辑非常简单,因为《施氏食狮史》这个小故事,全篇只有shisi两种发音,如果用汉语拼音,那么完全无法读懂。只有通过不同的中文汉字,才能正确读懂故事的意思。因此中文汉字比汉语拼音强,信息量比汉语拼音大。

然而这个答主忽略了一个问题,这个小故事实际上只有生活在汉字环境中的人才能想出来。对于完全生活在拼音环境中的人来说,他们的思维方式决定了根本不可能有这个故事产生。

阅读全文 »

当我们想从 Redis 的列表里面持续弹出数据的时候,我们一般使用lpop或者rpop:

1
2
3
4
5
6
7
8
9
import redis

client = redis.Redis()

while True:
data = client.lpop('key')
if not data:
break
print(f'弹出一条数据:{data.decode()}')

但这种写法有一个问题,就是每弹出1条数据都要连接一次 Redis 服务器,当你要把1000万条数据从列表里面弹出来的时候,实际上超过一半的时间都消耗在了网络请求上面。

阅读全文 »

在编程语言中,有常见的符号被赋予了特殊的意义,例如小数点.,在正则表达式里面表示任意一个非换行符的字符;小于号<在 html 中表示标签。

但有时候,我们只想让这些符号表示它本来的意思,不想让它的特殊意义表露出来,应该怎么办?

阅读全文 »

我们知道,读取 Python 字典时,如果某个 Key 不存在,Python 就会报错,如下图所示:

为了防止它报错,我们可以使用.get()方法:

但每次都要写.get()稍显麻烦。于是我们可以通过自己实现一个自定义的字典对象,来解决这个问题。

阅读全文 »

在极客时间某设计模式相关的课程中,某老师说 Python 不支持抽象类和接口。

但实际上,Python 支持抽象类。

阅读全文 »

GeneralNewsExtractor以下简称GNE是一个新闻网页通用抽取器,能够在不指定任何抽取规则的情况下,把新闻网站的正文提取出来。

我们来看一下它的基本使用方法。

阅读全文 »
0%