• 一些令你瞠目结舌的爬虫技巧[转]


    众所周知,爬虫很容易遇到被封IP的情况,最近国外一家公司做过一件很有意思的事情,跟大家一起分享分享。对于IP被封,大多数情况下是可以换代理来解决的。于是这家公司做了两件事情:

    第一,开发了一款软件,包括Android/iOS/WP/OS X/Windows/Linux全平台支持,使用这个软件就可以FQ出去了(不只是中国有FQ的需求哟,也不只是有墙的时候才需要翻),但是你免费使用他的FQ服务的同时,需要接受一条协议:将自己的终端作为这个系统代理出墙的一个节点。

    第二,一套动态分配代理IP的系统。主要是对于爬虫,需要使用代理IP的时候,只需要设置一个特定的proxy,连接到他们的系统之后,会自动从目前活跃的终端节点中挑选一个代理你的请求,你不需要一直切换代理,却可以每次请求使用不一样的出口IP。

    这个系统大概有2000多万用户使用代理服务,意味着有2000万IP代理可用,基本上可以解决大多数IP被封的问题了。而第二步中的服务,价格是500美元每月(不限时间,限制流量),而且在称为付费用户之前,还得经过一次Skype的面试。

    这算是一个不错的爬虫技巧了,不但解决了代理不够的难题,还为他人爬虫问题提供了简单粗暴的解决方案,总之钱能够解决的问题就是小问题。后来,这家公司自己不再抓取数据了,改为出售代理IP,活得非常滋润。

    听知乎的朋友说过,当时爬一个网站的时候需要大量代理,正好手上有不少PHP的虚拟空间,就是万网卖的那种,几十块钱一年,只能上传PHP代码。就用PHP写了一个代理脚本,应该算应用层代理了吧,还加了双向接口验证,伪装成普通文件,瞬间有了几十个代理,一直在用,这个代理好像也不可追踪。

    其实非常简单,把url用GET或者POST提交给PHP脚本,脚本用file_put_contents(url)获取数据,然后把数据返回给你就行了。

    还有一个知乎的朋友最近在学go,随手用go写了个小爬虫,从入口页开始解析并找到站内地址,然后开个goroutine去爬,对,没有控制线程数。用的公司的代理出口,然后顺手用hduoj做测试,结果瞬间把它爬挂了…

    说一个只有在大规模爬取的时候才用得到的技巧吧.

    比如你在建立一个汽车数据库,需要从上百万各种来源爬一大堆元数据,肯定不能靠人了,训练一个模型也太花时间.

    有一种简单可行的办法,首先去google或者垂直网站抓元数据

    想办法将元数据与它来源的url配对(比如google肯定会有来源url)

    这样对于一个url,你能知道它的提取结果是什么,然后能找到对应页面什么位置

    然后逆向出页面模板

    因为这些页面都是模板生成的,于是对整站套用模板, ok,数据出来了.

    刚开始写爬虫用的是urllib2,后来知道了requests,惊为天人。

    刚开始解析网页用的是re,后来知道了BeautifulSoup,解析页面不能再轻松。

    再后来看别人的爬虫,知道了scrapy,被这个框架惊艳到了。

    之后遇到了一些有验证码的网站,于是知道了PIL。但后来知道了opencv,pybrain。当在爬虫中用上人工神经网络识别出验证码,兴奋得守在爬虫旁边看他爬完全站。

    再后来知道了threading,知道了celery。

    不断的学习,不断的接触和知道更多的东西,爬虫与反爬虫的对抗会一直进行下去。

    本文固定链接:http://www.phpxs.com/post/4688



    文/dayan(简书作者)
    原文链接:http://www.jianshu.com/p/33e7340e728a
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  • 相关阅读:
    cloud-init 手动调试及问题解决
    深入理解openstack网络架构(四)
    深入理解openstack网络架构(三)
    深入理解openstack网络架构(二)
    深入理解openstack网络架构(一)
    ovs总结与常用命令
    如何debug cloud-init
    nova snapshot
    Openstack并行性能加速
    Nova 是如何统计 OpenStack 计算资源
  • 原文地址:https://www.cnblogs.com/jexus/p/5471665.html
Copyright © 2020-2023  润新知