谢乾坤 | Kingname

给时光以生命。

写后端的同学,有时候需要在网站上实现一个功能,让用户上传或者编写自己的Python代码。后端再运行这些代码。

涉及到用户自己上传代码,我们第一个想到的问题,就是如何避免用户编写危险命令。如果用户的代码里面涉及到下面两行,在不做任何安全过滤的情况下,就会导致服务器的Home文件夹被清空。

1
2
import os
os.system('rm -rf ~/*')

有人想的比较简单,直接判断用户的代码里面有没有os.systemexecsubprocess……这些危险关键词不就可以了吗?

这种想法乍看起来没有问题,但细想下,就会发现非常天真。如果用户的代码像下面这样写,你又要如何应对?

阅读全文 »

我们在开发爬虫的过程中,经常发现有一些网站,会直接把数据放到HTML中的<script>标签里面。这些数据长得有点像JSON,但又有差异,如下图所示:

这种格式,我们叫做JavaScript Object。长得很像Python的字典,又很像是JSON。但是这个格式在Python里面,无论直接当字典解析,还是当JSON解析,都会报错,如下图所示:

遇到这种情况,有同学准备使用正则表达式来解析,又有同学直接放弃。

阅读全文 »

我们在开发爬虫的过程中,经常发现有一些网站,会直接把数据以JSON的形式,通过<script>标签放到页面源代码中。如下图所示:

有时候请求URL拿到HTML的过程比较麻烦,有些同学习惯先把HTML复制到代码里面,先把解析的逻辑写好,然后再去开发请求HTML的代码。

阅读全文 »

现在有很多网站,已经能够通过JA3或者其他指纹信息,来识别你的请求是不是Requests发起的。这种情况下,你无论怎么改Headers还是代理,都没有任何意义。

我之前写过一篇文章:Python如何突破JA3,但方法非常复杂,很多初学者表示上手有难度。那么今天我来一个更简单的方法,只需要修改两行代码。并且不仅能过JA3,还能过Akamai。

阅读全文 »

产品经理这两天在跟我抱怨他们公司的一个码农。听的我火冒三丈,差点把跟了我十多年的搪瓷水杯砸烂。

正好在知识星球和微信群里面,有不少同学跟我咨询程序员的职业发展以及怎么应对三十岁危机。

借此机会,我准备用几篇文章来讲讲自己的经验和个人的观点。

阅读全文 »

我们知道,在Python里面,要把JSON转成字典是非常容易的,只需要使用json.loads(JSON字符串)就可以了。

但如果这个JSON转成的字典,嵌套比较深,那么要读取里面的数据就非常麻烦了。如下图所示:

如果我要读取把图中的end减去start字段,那么用字典的时候,代码要写成这样:

1
result = info['data'][0]['entities']['annotations'][0]['end'] - info['data'][0]['entities']['annotations'][0]['start']

光是看到这些方括号和单引号,就够让人头晕了。

阅读全文 »

相信很多同学或多或少都在Python中使用过GPT API,通过Python安装openai库,来调用GPT模型。

OpenAI官方文档中给出了一个示例,如下图所示:


如果你只有一个API账号,那么你可能不觉得这样写有什么问题。但如果你想同时使用两个账号怎么办?

阅读全文 »

在之前很长一段时间,从PDF文件中提取表格都是一个老大难的问题。无论你使用的是PyPDF2还是其他什么第三方库,提取出来的表格都会变成纯文本,难以二次利用。

但现在好消息来了,专业处理PDF的第三方库PyMuPDF升级到了1.23.0,已经支持完美提取PDF中的表格了。还可以把表格转换为Pandas的DataFrame供你分析。

阅读全文 »

我们知道,在使用Requests发起GET请求时,可以通过params参数来传递URL参数,让Requests在背后帮你把URL拼接完整。例如下面这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 实际需要请求的url参数为:
# https://www.kingname.info/article?id=1&doc=2&xx=3

import requests

params = {
'id': '1',
'doc': '2',
'xx': '3'
}

requests.get('https://www.kingname.info/article', params=params)

那么在Scrapy中,发起GET请求时,应该怎么写才能实现这种效果呢?

阅读全文 »
0%