• 常见反爬策略及应对方案

    常见反爬策略及应对方案

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

      • Accept

      • User-Agent - 三方库fake-useragent

        1. from fake_useragent import UserAgent
        2. ua = UserAgent()
        3. ua.ie
        4. # Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US);
        5. ua.msie
        6. # Mozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0)'
        7. ua['Internet Explorer']
        8. # 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)
        9. ua.opera
        10. # Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11
        11. ua.chrome
        12. # Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2'
        13. ua.google
        14. # 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
        15. ua['google chrome']
        16. # Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11
        17. ua.firefox
        18. # Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1
        19. ua.ff
        20. # Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1
        21. ua.safari
        22. # 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
        23. # and the best one, random via real world browser usage statistic
        24. ua.random
      • Referer

      • Accept-Encoding

      • Accept-Language

    2. 检查网站生成的Cookie。
      • 有用的插件:EditThisCookie
      • 如何处理脚本动态生成的Cookie
    3. 抓取动态内容。
      • Selenium + WebDriver
      • Chrome / Firefox - Driver
    4. 限制爬取的速度。
    5. 处理表单中的隐藏域。
      • 在读取到隐藏域之前不要提交表单
      • 用RoboBrowser这样的工具辅助提交表单
    6. 处理表单中的验证码。

      • OCR(Tesseract) - 商业项目一般不考虑

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

        ```Pythonfrom hashlib import md5

        class ChaoClient(object):

        1. def __init__(self, username, password, soft_id):
        2. self.username = username
        3. password = password.encode('utf-8')
        4. self.password = md5(password).hexdigest()
        5. self.soft_id = soft_id
        6. self.base_params = {
        7. 'user': self.username,
        8. 'pass2': self.password,
        9. 'softid': self.soft_id,
        10. }
        11. self.headers = {
        12. 'Connection': 'Keep-Alive',
        13. 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
        14. }
        15. def post_pic(self, im, codetype):
        16. params = {
        17. 'codetype': codetype,
        18. }
        19. params.update(self.base_params)
        20. files = {'userfile': ('captcha.jpg', im)}
        21. r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
        22. return r.json()
    1. if __name__ == '__main__':
    2. client = ChaoClient('用户名', '密码', '软件ID')
    3. with open('captcha.jpg', 'rb') as file:
    4. print(client.post_pic(file, 1902))
    5. ```
    1. 绕开“陷阱”。
      • 网页上有诱使爬虫爬取的爬取的隐藏链接(陷阱或蜜罐)
      • 通过Selenium+WebDriver+Chrome判断链接是否可见或在可视区域
    2. 隐藏身份。

      • 代理服务 - 快代理 / 讯代理 / 芝麻代理 / 蘑菇代理 / 云代理

        《爬虫代理哪家强?十大付费代理详细对比评测出炉!》

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

        1. yum -y install tor
        2. useradd admin -d /home/admin
        3. passwd admin
        4. chown -R admin:admin /home/admin
        5. chown -R admin:admin /var/run/tor
        6. tor