网络抓取领域中的常见问题,是如何避免被目标服务器阻止;以及如何提高检索到的数据的质量。
HTTP 头之用户代理
HTTP 头之 Accept-Language
HTTP 头之 Accept-Encoding
HTTP 头之 Accept
HTTP 头之 Referer
当然,有已经验证行之有效的资源和技巧可以帮助网络爬虫避免被封,例如使用代理(如 HTTPS 代理)或轮换 IP 地址。
然而,还有一个容易被忽视的方法,那就是通过优化 HTTP 标头。这种做法可以大大降低网络爬虫被各种数据源阻止的可能性,并确保检索到高质量的数据。
您不必担心自己对 HTTP 标头了解不多,我们介绍过 HTTP 标头是什么,也探讨过如何将它们集成到网络抓取流程中。如果您想进一步了解抓取,可以查看我们的指南:如何使用 Python 抓取网站。
在本文中,我们将介绍五种可以使用和优化的最常见 HTTP 标头并探究其背后的原因。
最常见的 HTTP 标头列表如下:
标头 | 示例 |
---|---|
HTTP 头之用户代理 | Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0 |
HTTP 头之 Accept-Language | cn-CN |
HTTP 头之 Accept-Encoding | gzip, deflate |
HTTP 头之 Accept | text/html |
HTTP 头之 Referer | http://www.baidu.com/ |
HTTP 标头使客户端和服务器可以通过请求或响应传输更多 HTTP 详细信息。
用户代理请求头可以传递应用类型、操作系统、软件及其版本的识别信息,并且可让数据目标来判断通过哪种类型的 HTML 设计作为响应,例如移动设备、平板电脑还是 PC。
用户代理 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 Safari/605.1.15 |
网页服务器通常都会对用户代理 HTTP 请求头部信息进行身份验证,这是数据源用以识别可疑请求的第一重关卡。例如,在进行网络抓取过程中,海量请求传输至网页服务器,如果用户代理的 HTTP 请求头内容(HTTP 请求头信息)完全雷同,看起来像是爬虫活动。因此,有经验的网络抓取人员就会修改 HTTP 用户代理标头字符串,使它们看似是来自不同自然用户的会话。
因此,对于 HTTP 用户代理请求头,切记要经常修改 HTTP 头信息,这样就能充分降低被阻止的几率。
Accept-Language 请求头将客户端能识别的语言,以及当 Web 服务器发回响应时首选哪种特定语言,这些信息传递给网页服务器。
Accept-Language | cn-cn |
值得指出的是,当网页服务器无法识别首选语言时,这个特定标头通常就会发挥作用,例如通过 URL。
也就是说,Accept-Language 请求头的关键是相关性。必须确保设置的语言符合数据目标域和客户端的 IP 位置。原因很简单,如果来自同一个客户端的请求以多种语言显示,网页服务器就会怀疑是爬虫行为(非自然用户请求),因此,网站就可能会阻止网络抓取。
Accept-Encoding 请求头会告诉网页服务器在处理请求时应使用哪种压缩算法。换句话说,它表明将所需信息从网页服务器发送到客户端时可以压缩这类信息(如果 Web 服务器可以处理的话)。
Accept-Encoding | br, gzip, deflate |
而优化以后就可以节省流量,从流量负载角度来说,这对客户端和网页服务器都有利。客户端可以获得所需信息(只是被压缩了),Web 服务器则可以减少传输的流量负载,无需浪费资源。
Accept 请求头属于内容协商类别,它的用途是告诉 Web 服务器可以向客户端返回哪种类型的数据格式。
Accept | test/html,application/xhtml+xml,application/x ml;q=0.9,*/*;q=0.8 |
听起来简单,但网络抓取的一个常见问题就是会忽略或忘记根据 Web 服务器能够接受的格式来配置请求头。如果 Accept 请求头配置得当,客户端和服务器之间的通信就会更加自然,更像是真实用户,从而减少网络爬虫被阻止的可能性。
在请求被发送到 Web 服务器之前,Referer 请求头会提供用户在请求前所在网页的地址。
Referer | http://www.baidu.com/ |
如果网站要阻止抓取流程,Referer 请求头看似作用不大,事实上也确实如此。想想一个随机互联网真实用户的上网模式。在一天当中,用户很有可能一上网冲浪就是几个小时,浑然忘记时间。因此,如果您想要模仿网络抓取人员的流量模式,从而让浏览模式更加自然,只需在开始网络抓取会话前,随机指定一个网站就可以了。
关键就是不要不要操之过急,而只需增加这个简单的步骤。因此,始终不要忘记设置 Referer 请求头,这样就能绕过 Web 服务器的反抓取措施,提高成功抓取的几率。
通过了解本文中介绍的常见 HTTP 请求头,现在您已知道要配置哪些 Web 抓取标头,这样就会提高您的网络爬虫成功抓取的几率,高效地进行数据提取。
可以肯定地说,您对网页抓取技术方面了解得越多,您的网页抓取就会越有成效。妥善运用这些知识,毫无疑问可以提高您的网络爬虫工作效率。如果您想了解网络抓取项目想法,想知道如何开启网络抓取,不妨查看我们博客上的帖子。若是直奔主题,想解决网络抓取任务,欢迎了解 Oxylabs 的通用网络爬虫。
当然,如果您有任何其他问题,或者想要进行咨询,尽管在下方留言,也可以通过在线聊天或发送电子邮件至 hello@oxylabs.io 联系我们。
关于作者
Maryia Stsiopkina
文案
Maryia Stsiopkina 在 Oxylabs 担任一名初级文案。随着她对写作的热情逐渐发展,她在不同的时间点上不是写令人毛骨悚然的侦探故事,就是写儿童童话故事。最终,她发现自己进入了科技仙境,拥有无数隐藏的领域值得他去探索。在业余时间,她用望远镜观鸟(有些人误以为是跟踪,这就是为什么 Maryia 有时会发现自己处于尴尬的境地),制作花卉饰品,并品尝很多泡菜和绿橄榄。
Oxylabs博客上的所有信息均按“原样”提供,仅供参考。对于您使用Oxylabs博客中包含的任何信息或其中可能链接的任何第三方网站中包含的任何信息,我们不作任何陈述,亦不承担任何责任。在从事任何类型的抓取活动之前,请咨询您的法律顾问,并仔细阅读特定网站的服务条款或取得抓取许可。
选择Oxylabs®,业务更上一层楼
联系我们
一般信息:
hello@oxylabs.io客服团队:
support@oxylabs.io销售团队:
sales@oxylabs.io经过认证的数据中心和上游提供商
关注我们
高级代理解决方案
oxylabs.cn© 2024 保留所有权利©