一日一技:爬虫如何解析JavaScript Object?
我们在开发爬虫的过程中,经常发现有一些网站,会直接把数据放到HTML中的<script>
标签里面。这些数据长得有点像JSON,但又有差异,如下图所示:
这种格式,我们叫做JavaScript Object。长得很像Python的字典,又很像是JSON。但是这个格式在Python里面,无论直接当字典解析,还是当JSON解析,都会报错,如下图所示:
遇到这种情况,有同学准备使用正则表达式来解析,又有同学直接放弃。
我们在开发爬虫的过程中,经常发现有一些网站,会直接把数据放到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'] |
光是看到这些方括号和单引号,就够让人头晕了。
今天我从网上下载了一批数据。这些数据是Excel格式,我需要把他们转移到MySQL中。这是一个非常简单的需求。
相信很多同学或多或少都在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 | # 实际需要请求的url参数为: |
那么在Scrapy中,发起GET请求时,应该怎么写才能实现这种效果呢?
有不少同学在写爬虫时,会使用Scrapy + scrapy_redis实现分布式爬虫。不过scrapy_redis最近几年更新已经越来越少,有一种廉颇老矣的感觉。Scrapy的很多更新,scrapy_redis已经跟不上了。