爬虫

作者: 晨宇 | 来源:发表于2019-02-27 22:45 被阅读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

    相关文章

      网友评论

          本文标题:爬虫

          本文链接:https://www.haomeiwen.com/subject/wvnquqtx.html