摘要: 假设我们有一段程序,从 Redis 中读取数据,解析以后提取出里面的 name 字段: import json import redis client = redis.Redis() def read(): while True: data = client.lpop('info') if data 阅读全文
posted @ 2022-03-09 23:58 阿布_alone 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 我们经常会遇到监控文件变化的需求。例如日志监控程序监控日志文件,一旦日志文件发生变化,就进行读取。或者是大批量爬虫的规则配置文件监控,爬虫本身持续运行,一旦规则文件发生修改就自动读取新的规则。 常见的做法,如果文件比较小,可以直接读取以后跟上次读取的内容做对比;也可以判断文件的修改时间是否发生变化; 阅读全文
posted @ 2022-03-09 23:54 阿布_alone 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 如果大家在 Linux 或者 macOS 下面运行一段可能导致内存泄露的程序,那么你可能会看到下面这样的情况: 而如果你用的系统是 Windows,那么可能电脑直接就卡死了。 但是,调试这种 OOM(Out of Memory)的问题有时候是非常困难的,因为你不知道代码哪个地方会导致内存泄露。但是如 阅读全文
posted @ 2022-03-09 23:48 阿布_alone 阅读(463) 评论(0) 推荐(0) 编辑
摘要: 经常使用 Selenium 或者 Puppeteer 的同学都知道,他们启动的 Chrome 浏览器分为有头模式和无头模式。在自己电脑上操作时,如果是有头模式,会弹出一个 Chrome 浏览器窗口,然后你能看到这个浏览器里面在自动操作。而无头模式则不会弹出任何窗口,只有进程。 别去送死了。Selen 阅读全文
posted @ 2022-03-09 23:32 阿布_alone 阅读(903) 评论(0) 推荐(0) 编辑
摘要: 设想有这样一个场景:爬虫把数据一条一条写入到 Redis 中,你的另一个程序从 Redis 中一条条读取出来,进行一些处理后写入 MongoDB。 一开始,你的处理逻辑非常简单,如果爬虫爬取的数据中,包含“垃圾信息”这四个字,那么直接把信息丢弃。 运行了一段时间,新增了一个需求:如果数据的“sour 阅读全文
posted @ 2022-03-09 23:27 阿布_alone 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 假设我们实现了一个程序,它从 Redis 读取数据,然后写入 MongoDB。一开始程序是这样的: def read_from_redis(): ... def write_to_mongodb(doc): ... def parse(): for doc in self.read_from_red 阅读全文
posted @ 2022-03-09 23:21 阿布_alone 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 假设我们通过爬虫获取了上万条不规范的地址信息: 杭州市滨江区网商路599号东城区和平里街道上海市徐汇区 xx 小区... 现在老板想让你把这些地址统一格式化为标准的省市区地址格式,并写入到 Excel 中。你应该如何操作? 有一个库,叫做 cpca,可以非常方便地解决这个问题。我们来写一段非常简单的 阅读全文
posted @ 2022-03-09 23:17 阿布_alone 阅读(1374) 评论(0) 推荐(0) 编辑
摘要: 目前在中文网上能搜索到的绝大部分关于装饰器的教程,都在讲如何装饰一个普通的函数,或者把类方法当做普通函数装饰。但如果要在装饰器里面运行你装饰的这个方法所在的类中的其他方法和属性,应该如何操作? 以捕获一个方法的异常为例来进行说明。我们写一个类Test, 它的结构如下: class Test(obje 阅读全文
posted @ 2022-03-09 23:13 阿布_alone 阅读(769) 评论(0) 推荐(0) 编辑
摘要: 我的公众号是使用Bear这个Mac App来写的。它在官网上写到,所有笔记数据通过SQLite来储存,如下图所示。 SQLite是一个基于文件的关系型数据库,它只有一个文件,但是却最多能储存140TB的数据[1]。 SQLite官网给出了一个判断是否适合使用 SQLite 的标准: 如果程序和数据分 阅读全文
posted @ 2022-03-09 23:08 阿布_alone 阅读(54) 评论(0) 推荐(0) 编辑
摘要: 今天的问题来自于公众号粉丝交流群。有同学问道:使用 loguru 时,如何把日志中不同的内容写入不同的文件中? 这位同学试图通过下面这种写法,创建三个不同的日志文件,并分别接收不同的内容: from loguru import logger logger_1 = logger logger_2 = 阅读全文
posted @ 2022-03-09 22:51 阿布_alone 阅读(665) 评论(0) 推荐(0) 编辑
摘要: 设想这样一个场景,你要给一个项目开发测试程序,程序开始运行的时候,会创建初始环境,测试完成以后,会清理环境。 这段逻辑本身非常简单: setup() test() clean() 但由于测试的代码比较复杂,你总是在调试的时候程序异常,导致每次clean()函数还没有来得及运行,程序就崩溃了。 你可能 阅读全文
posted @ 2022-03-09 22:45 阿布_alone 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 假设有这样一个需求,你需要从 Redis 中持续不断读取数据,并把这些数据写入到 MongoDB 中。你可能会这样写代码: import json import redis import pymongo client = redis.Redis() handler = pymongo.MongoCl 阅读全文
posted @ 2022-03-09 22:39 阿布_alone 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 大家有时候可能需要在 Linux 上面生成 zip 文件或者对一个 zip 文件进行解压。如果你在网上搜索怎么在 Linux 解压 zip 文件,你一般会看到下面这样的回答: 但如果你手边刚好有一台 Linux 服务器的话,你可以试一试,一般你会得到这样的返回: 这是因为,zip、unzip 这两个 阅读全文
posted @ 2022-03-09 00:32 阿布_alone 阅读(684) 评论(0) 推荐(0) 编辑
摘要: 在写爬虫的过程中,我们经常需要解析网站的列表页。例如下面这个例子: <html> <head> <meta charset="utf-8"> <title>测试相对路径</title> </head> <body> <div> <h1>书籍列表</h1> <ul> <li><a href="http 阅读全文
posted @ 2022-03-09 00:29 阿布_alone 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 在我们写爬虫的时候,可能会需要在爬虫里面基于当前url生成一个新的url。例如下面这段伪代码: import re current_url = 'https://www.kingname.info/archives/page/2/' current_page = re.search('/(\d+)' 阅读全文
posted @ 2022-03-09 00:22 阿布_alone 阅读(499) 评论(0) 推荐(0) 编辑
摘要: 我们知道,URL 由下面几个部分组成: 其中Query部分,中文叫做查询参数。它在 URL 中,是由等号连接的键值对。这些键值对有一些是有效的,例如: https://open.163.com/newview/movie/courseintro?newurl=MDAPTVFE8 这个网址中的newu 阅读全文
posted @ 2022-03-09 00:15 阿布_alone 阅读(143) 评论(0) 推荐(0) 编辑
TOP