• 19爬虫之常见反反扒措施


    爬虫之常见的反反扒

    cookies

    一般用requests直接请求网址的时候有时候可能会遇到反扒措施,这时候可以考虑一下加上user-agent伪装成浏览器;也可能有登录限制,这时候cookies就有用处了

    浏览器中的cookie是保存我们的账号数据和访问记录,在爬取的过程中加上cookie可以增加爬取数据的成功几率

    获取cookies有两种方式,一种是requests 获取cookies ;一种是selenium获取cookies

    1、requests获取cookies

    自动登录原理:人工在浏览器上完成登录操作,获取登录之后的cookie信息,再通过代码发送请求的时候携带cookies信息

    requests 获取cookies步骤:

    浏览器打开网址——浏览器控制台——network——all——headers——cookie ——将cookies的值复制

    import requests
    headers = {
        'cookie':'.....'
    }
    resp=requests.get('https://www.zhihu.com/',headers=headers)
    print(resp.text)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    2、selenium获取cookies

    获取自动登录网站的cookies

    • 打开需要完成自动登录的网站(需要获取cookie的网站)

    • 给足够长的时候让人工完成自动登录并且人工刷新出登录之后的页面

      强调:一定要吧第一个页面刷新出登之后的转态

    • 获取登录之后的cookie并且将获取到的cookie保存到本地文件

    from selenium.webdriver import Chrome
    from json import dumps
    b = Chrome()
    # 1. 打开需要完成自动登录的网站(需要获取cookie的网站)
    b.get('https://www.taobao.com/')
    # 2. 给足够长的时间让人工完成自动登录并且人工刷新出登录后的页面
    # 强调:一定要把第一个页面刷新出登录之后的状态
    input('已经完成登录:')
    # 3. 获取登录后的cookie并且将获取到的cookie保存到本地文件
    cookies = b.get_cookies()
    print(cookies)
    with open('file3/taobao.txt', 'w', encoding='utf-8') as f:
        f.write(dumps(cookies))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    3、selenium使用cookies
    • 打开需要自动登录的网站
    • 添加cookies
    • 重新打开需要登录的网页
    from selenium.webdriver import Chrome
    from json import loads
    b = Chrome()
    # 1. 打开需要自动登录网页
    b.get('https://www.taobao.com/')
    # 2. 添加cookie
    with open('file3/taobao.txt', encoding='utf-8') as f:
        content = f.read()
        cookies = loads(content)
    for x in cookies:
        b.add_cookie(x)
    # 3. 重新打开需要登录的网页
    b.get('https://www.taobao.com/')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    代理ip

    在爬取网站的过程中,因为频繁访问该网站,会出现ip被封情况,但是又必须获取该数据,可以用代理ip来访问该网站;分为两种情况,requests和selenium

    1、requests 使用代理ip

    获取代理ip的流程------省略

    用法如下:

    import requests
    headers={
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
    
    }
    # 两种proxies方式选择其一
    # proxies = {
    #     'http':'.....',
    #     'https':'.....'
    # }
    proxies = {
        'http':'http://119.7.147.173:4531',
        'https':'http://119.7.147.173:4531'
    }
    response=requests.get('https://movie.douban.com/top250',headers=headers,proxies=proxies)
    print(response.text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    实际用法:

    import requests
    from time import sleep
    def get_ip():
        url='获取代理ip的地址'
        while True:
            response=requests.get(url)
            if response.text[0]=='{':
                print('提取失败')
                continue
                sleep(1)
            return response.text
    def get_douban():
        headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
        }
        ip=get_ip()
        proxies = {
            'http': ip,
            'https':ip
        }
        response=requests.get('https://movie.douban.com/top250',headers=headers, proxies=proxies)
        print(response)
    if __name__ == '__main__':
        get_douban()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    2、selenium使用代理ip
    from selenium.webdriver import Chrome,ChromeOptions
    # 1、添加配置对象
    options = ChromeOptions()
    # 2、添加配置
    options.add_argument('--proxy-server=http://代理ip')
    # 3、通过指定配置创建浏览器对象
    b=Chrome(options=options)
    b.get(url)  #  url是我们需要访问的网址
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    全网最详细Java-JUC
    spring framework notes
    PC3329L DC-DC降压 10V-100V输入3A大流输出带EN功能实现零功耗只需极少元器件
    CentOS 7在线安装docker
    uniapp获取一周日期和星期
    grafana 监控无图解决
    音视频开发:MediaCodec录制MP4文件
    JVM系列之java虚拟机与线程
    实时频谱 TFN 手持式频谱分析仪 RMT716A 9KHz-6.3GHz 高性能全功能
    深度学习pytorch之hub模块
  • 原文地址:https://blog.csdn.net/qq_44087994/article/details/126391809