主页 > SEO技术 > 新百胜公司推出最全的反爬虫技术

新百胜公司推出最全的反爬虫技术

新百胜公司电话 SEO技术 2020年06月16日
反爬虫 的技术大概分为四个种类:
 
 
 
注:文末有福利!
 
 
 
传统反爬虫手段
 
1、后台对访问进行统计。如果单个IP访问超过阈值。予以封锁。
 
这个虽然效果还不错。但是其实有两个缺陷。一个是非常容易误伤普通用户。另一个就是。IP其实不值钱。几十块钱甚至有可能买到几十万个IP。所以总体来说是比较亏的。不过针对三月份呢爬虫。这点还是非常有用的。
 
2、后台对访问进行统计。如果单个session访问超过阈值。予以封锁。
 
这个看起来更高级了一些。但是其实效果更差。因为session完全不值钱。重新申请一个就可以了。
 
3、后台对访问进行统计。如果单个userAgent访问超过阈值。予以封锁。
 
这个是大招。类似于抗生素之类的。效果出奇的好。但是杀伤力过大。误伤非常严重。使用的时候要非常小心。至今为止我们也就只短暂封杀过mac下的火狐。
 
4、以上的组合
 
 
 
 
一、通过User-Agent来控制访问:
无论是浏览器还是爬虫程序。在向服务器发起网络请求的时候。都会发过去一个头文件:headers。比如知乎的requests headers:
 
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,da;q=0.2,la;q=0.2
Cache-Control:max-age=0
Connection:keep-alive
Cookie: **********
Host:http://zhuanlan.zhihu.com
Referer:Ehco - 知乎
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Query String Parameters
view source
view URL encoded
 
这里面的大多的数的字段都是浏览
这里面的大多数的字段都是浏览器向服务器”表明身份“用的
对于爬虫程序来说。最需要注意的字段就是:User-Agent
很多网站都会建立 user-agent白名单。只有属于正常范围的user-agent才能够正常访问。
 
比如知乎:
 
import requests
import bs4
import random
 
 
def get_html(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "Someting Wrong!"
        
print(get_html('https://zhuanlan.zhihu.com'))
 
# OUT:
'''
<html><body><h1>500 Server Error</h1>
An internal server error occured.
</body></html>
'''
可以看到。这里的请求被拒绝了。并且返回了一个500的错误码:
这里就是因为requests库本身的headers是这样的:
 
{'Date': 'Tue, 09 May 2017 12:13:00 GMT', 'Content-Type': 'text/html', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Set-Cookie': 'aliyungf_tc=AQAAAPDDXQnf6AEAHaBXcP1tHo5z1uta; Path=/; HttpOnly, acw_tc=AQAAAAM
89GeptQMAHaBXcJiyTK3l8c5g; Path=/; HttpOnly', 'Cache-Control': 'no-cache'}
这里面并没有user-agent字段。自然不被知乎的服务器所接受了。
 
解决方法:
 
可以自己设置一下user-agent。或者更好的是。可以从一系列的user-agent里随机挑出一个符合标准的使用。代码如下:
 
def get_agent():
    '''
    模拟header的user-agent字段。
    返回一个随机的user-agent字典类型的键值对
    '''
    agents = ['Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;',
              'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1',
              'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11',
              'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
              'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)']
    fakeheader = {}
    fakeheader['User-agent'] = agents[random.randint(0, len(agents))]
    return fakeheader
    
    # 注意看新的请求函数:
    
    def get_html(url):
    try:
        r = requests.get(url, timeout=30,headers=get_agent())
        r.raise_for_status
        r.encoding = r.apparent_encoding
        return r.status_code    
    except:
        return "Someting Wrong!"
       
    '''
    OUT:
    200
    ''' 
广告位
标签: seo技术