java - 从网站抓取数据的问题
问题描述
我正在尝试通过使用带有 Jsoup 的 Java 抓取网页来收集数据。理想情况下,我想要大约 8000 行数据,但我想知道多次访问网站时的礼仪是什么。对于每一个,我的代码都必须导航到网站的不同部分,所以我必须加载 8000 个(或更多)网页。在每个请求之间设置延迟是不是一个好主意,这样我就不会超载网站?他们不提供我所看到的 API。
此外,我尝试运行我的代码以获取 80 行数据而没有任何延迟,但我的互联网中断了。运行该代码会导致它吗?当我打电话给公司时,自动消息听起来好像该地区没有服务,所以也许我只是在尝试运行代码之前没有注意到它。任何帮助表示赞赏,我对网络编码很陌生。谢谢!
解决方案
以下是您应该考虑的几件事,以及我在使用 Java 和 Jsoup编写超快速网络爬虫时学到的东西:
- 最重要的是法律方面,网站是否允许抓取以及他们允许在多大程度上使用他们的数据。
- 延迟很好,但添加与 robots.txt 兼容的自定义用户代理更可取。我看到将用户代理从默认更改为 robots.txt 后响应时间显着增加。
- 如果站点允许并且您需要抓取大量页面,这是我之前的一个项目所允许的,您可以使用 adexecutor 同时加载 N 个页面。它将使用单线程 Java Web 抓取工具进行数小时的数据收集工作变成了几分钟。
- 许多 ISP 的黑名单用户正在执行可编程的重复性任务,例如网络爬取和设置电子邮件服务器。它因ISP而异。我以前通过使用代理来避免这种情况。
对于每个请求的响应时间为 500 毫秒的网站,我的网络抓取工具能够通过100MBPS的连接在 3 分钟内使用 50 个线程和 1000 个代理从 200k 页面中抓取数据。
请求之间应该有延迟吗?
答:这取决于网站是否允许您不断点击,那么您不需要它,但最好有它。我在每个请求之间有 10 毫秒的延迟。
我尝试运行我的代码以获取 80 行数据而没有任何延迟,但我的互联网断了?
答:最有可能。ISP 可能会假设您正在对网站进行 DOS 攻击,并且可能暂时/永久地限制了您的连接。
推荐阅读
- ruby-on-rails - 为什么我在创建控制器/模型时出错?
- c# - 如何打乱子串
- python - 获取函数中必需和非必需参数的数量
- javascript - How to use
in google map label's text: - r - data.table fread 无法为具有 200Gb RAM 的 300Mb 文件分配内存
- javascript - 如何使用 querySelector 删除“p”标签
- annotations - @版本号生成问题
- php - 使用下拉列表填充字段
- c# - 适用于消费者的 Amazon Kinesis KCL 客户端无法在 .NET 中运行
- mysql - 查询错误:错误:ER_PARSE_ERROR:您的 SQL 语法有错误;检查与您的 MySQL 对应的手册