爬虫

2019-02-27  本文已影响1人  晨宇
  1. 框架选择分布式scrapy
  2. 通过Scrapyd 部署和运行整个爬虫项目,而项目的管理则可以使用Gerapy
  3. 代理池使用haipproxy动态抓取可用ip
  4. 通过airflow完成爬虫的调度

ip 池

  1. 使用tor,squid作为缓存,避免重复请求
  2. 使用ip代理
  3. 免费的ip池 高可用IP代理池 | haipproxy
  4. 自建adsl服务器

tor搭建

  1. brew install tor Mac下安装洋葱皮(Tor)并结合SS使用 - 吕滔博客

  2. 配置torcc

    copy /etc/tor/torrc.example /etc/tor/torrc
    
  3. 修改配置, tor --hash-password 'password'生成密码

  4. 添加 SOCKS5Proxy 127.0.0.1:1080,可以让tor借助shadowsocks建立链接,要么GFW会墙掉tor的很多链接,导致建立链接很慢,如何在墙内使用Tor | 圣僧

  5. 动态更新ip, bash -c "pip install -U requests[socks]" 安装socks

    import time
    import socket
    import socks
    import requests
    from stem import Signal
    from stem.control import Controller
    
    controller = Controller.from_port(port=9051)
    
    
    def connectTor():
        socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050, True)
        socket.socket = socks.socksocket
    
    
    def renew_tor():
        controller.authenticate()
        controller.signal(Signal.NEWNYM)
    
    
    def showmyip():
        r = requests.get('http://icanhazip.com/')
        ip_address = r.text.strip()
        print(ip_address)
    
    
    for i in range(10):
        renew_tor()
        connectTor()
        showmyip()
        time.sleep(10)
    
  6. How to make python Requests work via socks proxy - Stack Overflow

  7. Make requests using Python over Tor - Stack Overflow

squid

  1. 安装 brew install squid
  2. 安装squidmain
  3. 使用squidMain Mac OSX环境下使用Squid实现Web Caching - 比格·巴塔
  4. 代理配置 Squid 整合 Privoxy 與 Tor 架設匿名代理伺服器教學 - G. T. Wang
  5. scrapy 请求 -》 squid -》 privoxy -》tor

haipproxy

  1. 由于GFW的原因,某些网站需要通过科学上网才能进行访问和采集,如果用户无法访问墙外的网站,请将rules.py task_queue为 SPIDER_GFW_TASK和SPIDER_AJAX_GFW_TASK的任务enable属性设置为0或者启动爬虫的时候指定爬虫类型为common和 ajax

    python crawler_booter.py –usage crawler common ajax
    
  2. haipproxy/针对特定站点添加校验器.md at master · SpiderClub/haipproxy

  3. 先启动代理抓取爬虫和定时任务调度器(这里我只启动了common这个代理抓取任务)

    python crawler_booter.py --usage crawler common ajax

    python scheduler_booter.py --usage crawler common ajax

    再启动zhihu和init校验器和定时任务调度器, init没有调度任务

    python crawler_booter.py --usage validator init http https

    python scheduler_booter.py --usage validator http https

    调用代理IP客户端实现数据采集,参考run.sh。init校验器属于特殊校验器,无论单机还是分布式部署haipproxy的时候,都必须启动至少一个init校验器实例。建议部署足够多的init校验器 实例,因为通过实践发现,一个init校验器往往不够用。init校验器并没有相应的定时任务调度,它的资源获取是代理IP爬虫直接操作的

  4. python客户端调用

    from client.py_cli import ProxyFetcher
    args = dict(host='127.0.0.1', port=6379, password='123456', db=0)
    # 这里`zhihu`的意思是,去和`zhihu`相关的代理ip校验队列中获取ip
    # 这么做的原因是同一个代理IP对不同网站代理效果不同
    fetcher = ProxyFetcher('zhihu', strategy='greedy', redis_args=args)
    # 获取一个可用代理
    print(fetcher.get_proxy())
    # 获取可用代理列表
    print(fetcher.get_proxies()) # or print(fetcher.pool)
    
  5. scrapy-splash 安装

    docker run -p 8050:8050 -d --name mysplash --restart=always scrapinghub/splash
    

反爬虫

  1. 浅谈Python网络爬虫 - FreeBuf互联网安全新媒体平台
  2. 设置agent,referer
  3. 反反爬虫 luyishisi/Anti-Anti-Spider
上一篇下一篇

猜你喜欢

热点阅读