标题问题详解参见“问题解答7”。
一、问题解答
1.南哥,我在用python selenium爬取药物临床试验登记与信息公示平台(http://www.chinadrugtrials.org.cn/index.html)数据的时候遇见一些问题。一开始,selenium根本打不开网页,隐藏了WebDriver才能打开。就用南哥你之前文章说的方法,通过execute_cdp_cmd函数,单隐藏和通过JS文件隐藏的方法我都试过,可以访问网页,但在翻页的时候就又出问题了,翻到下一页的时候,网页会自动重新加载新页面,直接打不开了。这个可能的反爬虫的机制是什么呀?还能用selenium做吗?
你的操作只是对老页面执行的,新页面不会自动生效。我公众号写了一篇文章,讲到如何防止网站开新页面。进一步防止 Selenium 被检测——如何防止浏览器用新标签页打开链接?
2.Node.js自带的吧?
是的
3.提问:第5行代码在控制台运行报错:Uncaught ReferenceError: arguments is not defined。这点我能理解,符合我的预期结果。但是,在vscode运行,它居然不报错。第5行的结果,它报:arg: 5。为什么它不报错的?还有这5是什么来的啊?不可能是arguments.length吧。
node.js有这个东西 4."请读者在Linux、Mac OS或者Windows 10自带的Ubuntu Bash下使用mitmproxy,只有这样,才能发挥它的最大能力。" 问题: windows10自带的Ubuntu Bash在哪里啊?
搜索:wsl你就能找到
5.手机上设置了代理ip(ip设置的是Ubuntu里面的ip)和端口8080, 执行的命令是 mitmproxy, 执行之后没有弹出那个单击"允许"的窗口, 手机也断网... 网上说关闭防火墙, 还是不行。南哥, 求解
有一个办法。你先把mitmproxy关了。在子系统里面执行:python -m http.server 然后用手机访问电脑ip:8000,如果能看到东西,说明是mitm的问题。如果打不开,说明是你网络的问题。
6.我的bin下面好像没有这个文件哦~ 这个要怎么弄啊
先运行sdkmanager,它还需要联网下载一些东西才有。你按照airtest,它自带完整的sdk。使用Airtest超快速开发App爬虫
7.提问:其实从虚拟机感染到实体机是什么原理呢?如果虚拟机运行的是一个厉害的新品种的病毒,会中招吗?
有两种情况:
1. 虚拟机本身有漏洞,病毒在虚拟机里面通过这个漏洞感染宿主机。例如这两天java的log4j2漏洞。如果虚拟机是Java写的,而又用log4j2来记录日志。就可以利用。
2. 虚拟机和宿主机网络是通的,他们的关系就像是一个局域网里面两台电脑的关系。病毒怎么在局域网感染其他电脑,那么虚拟机里面的病毒就怎么感染宿主机。
8.南哥,有关采集监控设计的问题向您请教下:目前项目里有几十个采集程序在跑,并将采集数据存放入库。现在用的监控方法很简陋,就是去数据库统计一下当前每个信源采集回来了多少数据,从而判断采集器是否正常。现在想的改造方案是使用Prometheus Grafana搭建一套可视化的监控体统,更详细的展示每个采集器的运行状态、采集时的一些消耗(代理消耗,账号消耗等)、采集完成后是否有数据等等。这是我第一次尝试去搭建监控系统,想请南哥指导下如何设计和实现这套系统,尽可能让现有的几十个采集器改动比较小 (可能表达的不清楚,图片上是我要完成的事情)
你的爬虫有没有日志?能不能通过分析日志得到你想要的数据?
不行,那些爬虫是好几个人开发的,没有统一的日志输出, 只有入库的结构是一样的。现在想的是弄一套监控,制定推送规范,然后爬虫的各个开发者去改自己的爬虫代码,最后把信息推送给普罗米修斯
普罗米修斯是侵入型的,对代码改动比较大。你们会不会用Kafka?把需要监控的数据推进Kafka。下游用另一个程序从Kafka读出来,再传给普罗米修斯。如果你们不会Kafka,那可以用redis代替。
这样的话,貌似我写一个服务,然后各个采集器把要监控的数据发送到我的服务上,我这边解析数据最后传给普罗米修斯,好像也可以。爬虫那边只需要加几个request请求应该就行了。南哥觉得这个方案可行么?
如果你自己写的服务能扛得住那么大的并发量,当然可以。
END