不用编程,用一行命令就能抓取网站信息
很多时候我们想要拿一些网站的信息做分析,而有用的信息经常是要登录后才能看到的。而且为了防爬虫,很多网站加了千奇百怪的验证码,这个就卡住了太多人。难道真的要学AI学编程才能拿到数据吗?
其实很早以前网页没那么复杂的时候,就有一些基于命令行的浏览器比如w3m,我们稍做定制就可以只看我们想的数据。但现在很多网站都改成用javascript 框架来实现了,我们就拿不到静态生成的html了。可网站上的数据从哪儿来呢,往往是一个json文件,然后再用javascript 渲染成页面。我们只要找到json文件,就可以拿到所有数据了。
首先打开Chrome, 登录你想进的网站,右键选“检查”,就会打开开发者工具,点Network选项卡
image.png我们可以看到有很多项在下方,这些代表这个网页所有的HTTP请求,我们挨着点击后,选response, 直到发现类似json的数据, 这就代表网页从服务器端取回了一个json
image.png我们再点Headers选项卡,找到Cookie: 全选后面那个长长的字符串选复制。再找到Request URL也存在某个文本文件里
image.png image.png这时我们就需要一个Linux主机了,windows10的用户可以安装wsl, 其它版本的则需要Cygwin或者一个虚拟机。 有安卓的同学可以装termux (我在以前的文章写过), 然后执行apt install jq curl 这两个是我们需要的工具
首先我们运行
curl -o test.json --cookie <cookie> "<url>"
三角括号里就是上面步骤中我们存好的两项,粘贴过来,运行后就会拿到test.json 文件
然后运行
jq '.' test.json
就会以良好的格式显示json的内容,我们可以修改上面的命令只取我们需要的数据 比如json类似这样的结构
{"data": {"list":[{"a":"b"},{"a":"c"}]}} 这样的,我们就可以用'.data.list[]" 取出所有list下面的数据
我们还可以写成一行语句实现功能,但要加个参数s,保证curl 不显示进度条
curl -s --cookie <cookie> "<url>" | jq '.data.list'