常见反爬策略及应对方案.md 4.0 KB
Newer Older
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
## 常见反爬策略及应对方案

1. 构造合理的HTTP请求头。
   - Accept

   - User-Agent - 三方库fake-useragent

     ```Python
     from fake_useragent import UserAgent
     ua = UserAgent()
     
     ua.ie
     # Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US);
     ua.msie
     # Mozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0)'
     ua['Internet Explorer']
     # Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)
     ua.opera
     # Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11
     ua.chrome
     # Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2'
     ua.google
     # Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13
     ua['google chrome']
     # Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11
     ua.firefox
     # Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1
     ua.ff
     # Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1
     ua.safari
     # Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25
     
     # and the best one, random via real world browser usage statistic
     ua.random
     ```

   - Referer

   - Accept-Encoding

   - Accept-Language
2. 检查网站生成的Cookie。
   - 有用的插件:[EditThisCookie](http://www.editthiscookie.com/)
   - 如何处理脚本动态生成的Cookie
3. 抓取动态内容。
   - Selenium + WebDriver
   - Chrome / Firefox - Driver
4. 限制爬取的速度。
5. 处理表单中的隐藏域。
   - 在读取到隐藏域之前不要提交表单
   - 用RoboBrowser这样的工具辅助提交表单
6. 处理表单中的验证码。
   - OCR(Tesseract) - 商业项目一般不考虑 

   - 专业识别平台 - 超级鹰 / 云打码

     ```Python
     from hashlib import md5
     
     class ChaoClient(object):
     
         def __init__(self, username, password, soft_id):
             self.username = username
             password =  password.encode('utf-8')
             self.password = md5(password).hexdigest()
             self.soft_id = soft_id
             self.base_params = {
                 'user': self.username,
                 'pass2': self.password,
                 'softid': self.soft_id,
             }
             self.headers = {
                 'Connection': 'Keep-Alive',
                 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
             }
     
         def post_pic(self, im, codetype):
             params = {
                 'codetype': codetype,
             }
             params.update(self.base_params)
             files = {'userfile': ('captcha.jpg', im)}
             r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
             return r.json()
     
     
     if __name__ == '__main__':
         client = ChaoClient('用户名', '密码', '软件ID')
         with open('captcha.jpg', 'rb') as file:                                                
             print(client.post_pic(file, 1902))                                          
     ```

7. 绕开“陷阱”。
   - 网页上有诱使爬虫爬取的爬取的隐藏链接(陷阱或蜜罐)
   - 通过Selenium+WebDriver+Chrome判断链接是否可见或在可视区域
8. 隐藏身份。
   - 代理服务 -  快代理 / 讯代理 / 芝麻代理 / 蘑菇代理 / 云代理

     [《爬虫代理哪家强?十大付费代理详细对比评测出炉!》](https://cuiqingcai.com/5094.html)

   - 洋葱路由 - 国内需要翻墙才能使用

     ```Shell
     yum -y install tor
     useradd admin -d /home/admin
     passwd admin
     chown -R admin:admin /home/admin
     chown -R admin:admin /var/run/tor
     tor
     ```