0%

spider | 接到要爬取 medium 的需求

最近接到需要,要爬取 medium ,看了一下资料,决定整理起来。


参考资料



爬取须知


  • mediumGraphQL 返回数据,这个基本上就不能使用 requests 之类的请求爬虫爬了
    • 但是,如果在用户的 url 后面加上 ?format=json 就会返回 json 数据
    • 封了,但又没完全封
  • 所以选择了模拟浏览器,这里我选择的是 Playwright
  • medium 经过不断的迭代更新,有多种版本,这个后续会说明

medium 多种版本说明


经过看

看到有这么一段代码

https://medium.com/@${username}?format=json

举一个例子

https://medium.com/@GoldFeverAdmin

直接访问是可以访问的,如果变成下面这样

https://medium.com/@GoldFeverAdmin?format=json

就会有 json 数据返回过来,可以和之前的页面对的上。

这是其中一个版本。

但是,有的用户名加上这个返回的是 404,如

https://medium.com/@copuppy-bsc

但是,如果访问

https://medium.com/copuppy-bsc

发现是可以正确访问的,并且加上 ?format=json 也可以正常返回 json 。

说明,这个 usename 是不带 @ 的。

所以,目前我们找到了两个版本的链接。

那么, username 怎么得到呢,这个你 follow 一个用户后,打开,就是了,但是,有的时候会出现下面这个情况

https://co-puppy.medium.com/

这个时候就要

https://medium.com/@co-puppy
https://medium.com/co-puppy

自己尝试了。


解析代码


1
2
3
4
msg = response.txt
msg = json.loads(msg.replace(
'<html><head></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">])}while(1);&lt;/x&gt;',
'').replace('</pre></body></html>', ""))
请我喝杯咖啡吧~