服务器防爬虫方案

服务器防爬虫方案,第1张

首先了解爬虫的突破方式:

防爬虫的基本理念:增加爬虫成本

防爬虫的几种方法 参考( >实际上,在网络应用中,Web服务器通常不会直接将自己的数据提供给用户。通常,它们会将数据存储在数据库中,并提供一个API(>

爬虫技术是一种自动化程序。

爬虫就是一种可以从网页上抓取数据信息并保存的自动化程序,它的原理就是模拟浏览器发送网络请求,接受请求响应,然后按照一定的规则自动抓取互联网数据。

搜索引擎通过这些爬虫从一个网站爬到另一个网站,跟踪网页中的链接,访问更多的网页,这个过程称为爬行,这些新的网址会被存入数据库等待搜索。简而言之,爬虫就是通过不间断地访问互联网,然后从中获取你指定的信息并返回给你。而我们的互联网上,随时都有无数的爬虫在爬取数据,并返回给使用者。

爬虫技术的功能

1、获取网页

获取网页可以简单理解为向网页的服务器发送网络请求,然后服务器返回给我们网页的源代码,其中通信的底层原理较为复杂,而Python给我们封装好了urllib库和requests库等,这些库可以让我们非常简单的发送各种形式的请求。

2、提取信息

获取到的网页源码内包含了很多信息,想要进提取到我们需要的信息,则需要对源码还要做进一步筛选。可以选用python中的re库即通过正则匹配的形式去提取信息,也可以采用BeautifulSoup库(bs4)等解析源代码,除了有自动编码的优势之外,bs4库还可以结构化输出源代码信息,更易于理解与使用。

3、保存数据

提取到我们需要的有用信息后,需要在Python中把它们保存下来。可以使用通过内置函数open保存为文本数据,也可以用第三方库保存为其它形式的数据,例如可以通过pandas库保存为常见的xlsx数据,如果有等非结构化数据还可以通过pymongo库保存至非结构化数据库中。

总结一下,解决办法:

换供应商,这个方案不是很靠谱,github 还是很好用的

让 github 改,这个也很难

利用 CDN 加速 ,这个方案可行!

Github是通过 UA 来判定百度爬虫并返回 403 Forbidden 的。而百度爬虫的 UA 一般是这样的:

Mozilla/50 (compatible; Baiduspider/20; +>

那么使用 CDN 来解决这个问题的关键就在于,让百度爬虫不要直接向 Github 的服务器发送请求,而是通过 CDN 边缘服务器的缓存来抓取网站的内容。边缘服务器本身是不会关心 UA 的,所以问题就迎刃而解了。

结果是只有偶尔能够抓取成功,结果很让人失望吧?让我们来分析以下原因,首先罗列我目前可知的一些情况:

所有抓取成功的页面都访问了 20991305 节点

所有抓取失败的页面都访问了 20991306 节点

我本机ping jerryzoucom会 ping 到 20991308 节点

好了,细心的同学应该已经发现问题所在了,百度爬虫大部分的请求被导到了 20991306 节点,但是这个节点上没有页面的缓存!!如果百度爬虫是某个页面的第一个访问者,CDN 的边缘服务器会用百度爬虫的 UA 去请求 Github 的服务器,得到的结果自然是被拒绝了。

最终我们得到了通过 CDN 来解决这个问题的必要条件:你的博客必须有巨大的访问量!这样才能保证 CDN 的每一个边缘服务器上都有任何一个页面的缓存。

在我没接触这一行时这个问题困扰了我很长时间,让我十分的不理解到底什么是爬虫,它难道是一种实体工具?,直到我学习python 深入分析了解以后才揭开了它神秘的面纱。

爬虫是什么呢?爬虫有简单的爬虫和复杂的爬虫。实际上简单的爬虫是一种 脚本 ,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

脚本就是粗糙的,但往往非常实用的小程序(一般来说不会超过几千行,有时候也就几百几十行的代码构成)。举个简单的例子,你现在要从一个学生租房的网站上读取关于出租的学生公寓的信息。你一条一条去抄写肯定是不现实的。所以就要用爬虫。可以把一个信息类网站上几千条信息一次全部扒下来。百度,谷歌这类的搜索引擎你也可以认为是一种爬虫,只不过这类的技术十分的复杂,不是简单的脚本。

搜索引擎是如何工作的?其实就是通过网络爬虫技术,将互联网中数以百亿计的网页信息保存到本地,形成一个镜像文件,为整个搜索引擎提供数据支撑。

这样的技术首先就会涉及到一个十分重要并且人人关注的问题——是否违法?

仔细探究后总结出了如下观点:

1遵守 Robots 协议,但有没有 Robots 都不代表可以随便爬,

2限制你的爬虫行为,禁止近乎 DDOS 的请求频率,一旦造成服务器瘫痪,约等于网络攻击;

3对于明显反爬,或者正常情况不能到达的页面不能强行突破,否则是 Hacker 行为;

4审视清楚自己爬的内容,绝不能触碰法律的红线。

至此你应该明白,爬虫本身并不违法,而是要看你使用的方式和目的,还要看其商业用途。

Python使用socket进行网络通信的爬虫可能会遇到以下问题:
1 网络错误:网络连接不稳定或者网络环境差导致连接失败或者数据传输不完整。
2 服务器反爬虫机制:一些网站可能会设置反爬虫机制,如IP封禁、验证码、限制爬取频率等,使得爬虫无法正常工作。
3 数据解析问题:爬取到的数据可能需要进行解析和清洗,如果没有处理好可能会影响后续的数据分析和应用。
4 安全问题:使用socket进行爬虫时需要注意安全问题,如防止网络劫持、防止恶意攻击等。
5 代码可维护性问题:使用socket进行爬虫时,需要处理的细节较多,如果代码不够规范、不够模块化,会影响代码的可维护性和可扩展性。

简单来讲,你通过代码向服务器发送的请求与浏览器向服务器发送的请求不一样,所以你可以通过浏览器获取数据,但是无法通过代码。

首先建议你打开浏览器的开发者工具,推荐使用Chrome浏览器。选中Network一栏之后重新通过浏览器向服务器发送一次请求,然后,你就可以看到你刚才通过浏览器访问服务器资源的流程和数据流向。其中,数据流向包括:

浏览器向服务器发送的请求头

浏览器向服务器发送的请求体

(可能)服务器向浏览器发送的重定向地址及浏览器重新向新的地址发送请求

服务器返回的响应头

服务器返回的响应体

---
你面临的问题很可能是在模拟浏览器发送请求这一步(1、2)。检查代码,修复之。

至于解决方案,既然你可以通过浏览器访问,说明你的IP并没有被服务器禁封,加上你提到用了requests库,我猜测你通过requestsSession()来获取了一个对象或者指定了headers中的Cookie字段来发送请求。这两种方法,服务器都会认为你的多次请求来自同一个客户端,自然访问过快之后,服务器会向此客户端d验证码(服务器端通过Session确认某一个用户,客户端通过Cookie[中的某一条]告诉服务器自己是某Session对应的用户)。

所以,你可以尝试切换一个新的requestsSession()对象来发送请求。更甚之,你可以通过代理IP,使用代理IP需要注意的是,最好选择高匿的IP,并在使用前校验有效性。通过requests使用代理:

import requests
proxies = {
 "",
 "",
}
requestsget(")


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/12572500.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)