首页 / 知识
创建网络爬虫时的主要考虑因素是什么?
2023-04-13 11:56:00

What are the key considerations when creating a web crawler?我今天才开始考虑创建/自定义网络爬虫,对网络爬虫/机器人礼仪知之甚少。我发现的大部分关于礼仪的著作都显得陈旧而笨拙,所以我想从 Web 开发人员社区获得一些当前(和实用)的见解。 我想使用爬虫来遍历"网络",目的非常简单——"XYZ 站点的标记是否满足条件 ABC?"。 这对我提出了很多问题,但我认为我首先需要解决的两个主要问题是:
遵守 robots.txt(不要像已经说过的那样过于激进)。 您可能需要考虑一下您的用户代理字符串 - 它们是您提前了解您正在做什么以及如何联系您的好地方。 所有的优点,都是在这里提出的。您还必须处理动态生成的 Java 和 JavaScript 链接、参数和会话 ID、转义单引号和双引号、相对链接尝试失败(使用 ../../ 越过根目录)、区分大小写、框架、重定向、cookie.... 我可以坚持几天,而且有点。我有一份涵盖大部分内容的机器人检查表,我很乐意尽我所能回答。 您还应该考虑使用开源机器人爬虫代码,因为它可以帮助您解决所有这些问题。我也有一个页面:开源机器人代码。希望有帮助! 也不要忘记遵守机器人元标记:http://www.w3.org/TR/html4/appendix/notes.html#h-B.4.1.2 另一件要考虑的事情——当蜘蛛页面时,不要太草率地决定事情不存在或有错误。由于维护工作或在短时间内更正的错误,某些页面处于脱机状态。 请务必在您的用户代理字符串中包含一个 URL,该 URL 解释了您的机器人正在抓取的对象/内容/原因。 除了 WillDean\\'s 和 Einar\\'s good answers 之外,我真的建议你花点时间阅读 HTTP 响应代码的含义,以及你的爬虫在遇到每个响应代码时应该做什么,因为它会使对您的表现有很大影响,以及您是否被某些网站禁止。 一些有用的链接: HTTP/1.1:状态码定义 聚合器客户端 HTTP 测试 维基百科 您需要添加一些功能来将站点/域或其他内容(IP 范围、ASN 等)列入黑名单,以避免您的蜘蛛陷入垃圾邮件站点。 您需要有一个对超时和行为进行大量控制的 HTTP 实现。预计很多网站会发回无效响应、大量响应、垃圾标题,或者只是无限期地保持连接打开而没有响应等。 也不要相信 200 状态意味着"页面存在"。根据我的经验,相当大比例的网站会因"未找到"或其他错误而返回 200(以及大型 HTML 文档)。 负载是一个重要的考虑因素。限制抓取特定网站的频率以及实现目标所需的最基本信息。如果您正在寻找文本,请不要下载所有图像,诸如此类。 当然要遵守 robots.txt,但也要确保您的用户代理字符串包含准确的联系信息,也许还有一个指向描述您正在做什么以及如何做的网页的链接。如果网络管理员看到您的大量请求并且很好奇,您也许可以通过信息丰富的网页回答很多问题。 这是完全可以接受的——只要确保它在每个会话中只访问每个页面一次。当您在技术上创建搜索机器人时,您必须遵守 robots.txt 和 据我所知,您只是在寻找源代码,因此您需要构建一些东西来遵循 我会说,考虑你造成了多少负载是非常重要的。例如,如果您的爬虫请求单个站点的每个对象,或多或少一次,它可能会导致该特定站点的负载问题。 换句话说,确保你的爬虫不太激进。 |
最新内容
相关内容
Python网络编程调用接收数据的三种
Python网络编程调用接收数据的三种方法,数据,代码,基础,通用,通讯,服务,网络,培训,方法,报文,最近在使用python进行网络编程开发一个通用的tc怎么在Python装饰器中自定义功能呢
怎么在Python装饰器中自定义功能呢?,代码,包装,环境,名称,工具,名字,变动,业务,主体,面临,setattr和getattr操作首先我们来看下setattr和geta网络功能对于Python的意义
网络功能对于Python的意义,网络,项目,标准,工作,通信,培训,管理,数据,位置,功能,现在,网络功能的强弱很大程度上决定了一个语言的成功与否。从python中字典遍历时如何同时获得键
python中字典遍历时如何同时获得键和值?,培训,字典,方法,数组,语法,实例,以上,时候,更多,内容,1、item()方法把字典中每对key和value组成一个python网络编程及前端常见问题
python网络编程及前端常见问题,数据,服务,分析,培训,状态,前端,区别,服务器,常见问题,上面,当我们学习Python时,需要掌握的的知识有很多,除了有python怎么遍历字典
python怎么遍历字典,培训,代码,字典,方法,下列,上述,缩写,变量,元素,以上,1、遍历key值>>>d={Python:astonishing,C++:complicated,Java:verspython如何自定义一个函数
python如何自定义一个函数,代码,名称,培训,函数,圆括号,参数,定义,表达式,选择性,字符串,python函数是组织好的,可重复使用的,用来实现单一,或相python如何遍历dict
python如何遍历dict,培训,字典,以上,以下,方式,更多,内容,python遍历字典有以下几种方式我们先创建一个字典D={‘a’:1,‘b’:2,’b‘:3,’d‘:4}python使用items()遍历键值对
python使用items()遍历键值对,信息,培训,字典,顺序,代表,方式,实例,以上,之间,关系,python使用items()遍历键值对字典可以用来存储各种方式的python有几种循环遍历的方法?
python有几种循环遍历的方法?,数字,培训,数组,方法,副本,序列,字典,函数,以上,操作,python有几种循环遍历的方法?1、for-in可以用来遍历数组python有哪些自定义函数规则
python有哪些自定义函数规则,代码,培训,函数,圆括号,规则,表达式,自变量,参数,冒号,括号,python有哪些自定义函数规则1、规则函数代码块必须python如何自定义元类
python如何自定义元类,地方,培训,定义,过程,方法,其他地方,实例,属性,声明,以上,python如何自定义元类1、说明一个类没有声明自己的元类,默认