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


    放飞梦想 1497 次 PHP新手2016-02-17 大 中 小


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

     

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

    第二,一套动态分配代理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。

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

  • 相关阅读:
    java利用JFreeChart实现各种数据统计图(柱形图,饼图,折线图)
    Java面试题集合(比较实用)
    java实现导出Excel(跨行,跨列)
    使用java类破解MyEclipse
    Oracle的导入导出 DMP 文件
    报表导出功能
    win7_oracle11g_64位连接32位PLSQL_Developer
    oralce11g导出dmp然后导入Oracle10g
    回首向来萧瑟处
    【Python】1.PyQT5界面初尝试
  • 原文地址:https://www.cnblogs.com/SZLLQ2000/p/5199893.html
Copyright © 2020-2023  润新知