我需要从网站上抓取大量数据。这个网站不属于我。该网站非常快。
要获取输入某些数据所需的数据,请触发POST请求,然后单击不同结果列表中的所有链接。对于每个链接,我需要解析单击它时出现的结果页面。现在我只是使用Selenium。
我估计我需要大约13个小时来解析我想要的所有内容。
性能并不是那么重要,但我担心13个小时有点太长,并且试图连续执行13个小时的程序可能会出现错误(某些冻结,中断等等都会增加复杂性整个东西)。
是否有一个比Selenium更适合我想要实现的Java框架?我不确定它是Selenium还是网站的瓶颈。我已经多线程应用程序了。但我认为Selenium并不是用于我滥用它的东西,所以也许其他东西更快?
到目前为止,我只遇到了JSoup,它似乎不适合处理输入。我需要按照问题中的描述执行输入。我使用的网站使用POST请求加载数据,所以我不能简单地通过URL。
答案 0 :(得分:2)
您估计需要多少HTTP请求才能完全扫描目标网站?你想要做13个小时不断的拼抢 - 而且你希望它能够更快地完成 - 让我想知道你是否有可能对目标造成无意的拒绝服务攻击。
值得考虑的是,即使相关网站能够干净地处理您发送给他们的流量,您的日志中频繁出现的抓取工具也可能会让您面临IP阻止的风险,如果您有这种风险,可能会增加成功地使这个过程更快。
更好的政策是确保您拥有最大抓取速度:如果您在HTTP操作之间没有几秒钟的延迟,请将其添加进去。您可以减去时间自己的开销,所以如果页面解析和渲染平均需要0.5秒,则延迟1.5秒,以便达到目标延迟时间。
当然,如果没有关于您正在抓取的网站类型,您所在的位置,目标所在的位置以及您计划对数据做什么的任何信息,我们只是猜测您的合法性和道德性操作。您可能不应该这样做,通常基于版权问题。如果您正在使用API,请改用它。
请记住,目标网站可以随时阻止您的操作(或起诉您),因此您需要考虑如果发生这种情况,您的企业将如何以另一种方式获取数据。
答案 1 :(得分:0)
回答我自己的问题:
我使用Jsoup实现了相同的逻辑,时间基准测试产生了固定数据量的结果:
因此,似乎Selenium要慢得多。我不能给出技术原因,为什么会这样。我只能猜测并说这是因为渲染开销。