首页 > 解决方案 > 从网站抓取数据的问题

问题描述

我正在尝试通过使用带有 Jsoup 的 Java 抓取网页来收集数据。理想情况下,我想要大约 8000 行数据,但我想知道多次访问网站时的礼仪是什么。对于每一个,我的代码都必须导航到网站的不同部分,所以我必须加载 8000 个(或更多)网页。在每个请求之间设置延迟是不是一个好主意,这样我就不会超载网站?他们不提供我所看到的 API。

此外,我尝试运行我的代码以获取 80 行数据而没有任何延迟,但我的互联网中断了。运行该代码会导致它吗?当我打电话给公司时,自动消息听起来好像该地区没有服务,所以也许我只是在尝试运行代码之前没有注意到它。任何帮助表示赞赏,我对网络编码很陌生。谢谢!

标签: javajsoup

解决方案


以下是您应该考虑的几件事,以及我在使用 Java 和 Jsoup编写超快速网络爬虫时学到的东西:

  1. 最重要的是法律方面,网站是否允许抓取以及他们允许在多大程度上使用他们的数据。
  2. 延迟很好,但添加与 robots.txt 兼容的自定义用户代理更可取。我看到将用户代理从默认更改为 robots.txt 后响应时间显着增加。
  3. 如果站点允许并且您需要抓取大量页面,这是我之前的一个项目所允许的,您可以使用 adexecutor 同时加载 N 个页面。它将使用单线程 Java Web 抓取工具进行数小时的数据收集工作变成了几分钟。
  4. 许多 ISP 的黑名单用户正在执行可编程的重复性任务,例如网络爬取和设置电子邮件服务器。它因ISP而异。我以前通过使用代理来避免这种情况。

对于每个请求的响应时间为 500 毫秒的网站,我的网络抓取工具能够通过100MBPS的连接在 3 分钟内使用 50 个线程和 1000 个代理从 200k 页面中抓取数据

请求之间应该有延迟吗?

答:这取决于网站是否允许您不断点击,那么您不需要它,但最好有它。我在每个请求之间有 10 毫秒的延迟。

我尝试运行我的代码以获取 80 行数据而没有任何延迟,但我的互联网断了?

答:最有可能。ISP 可能会假设您正在对网站进行 DOS 攻击,并且可能暂时/永久地限制了您的连接。


推荐阅读