V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
vvwvv
V2EX  ›  问与答

有人研究过看准网的防采集规则吗?

  •  
  •   vvwvv · 2016-04-15 10:47:35 +08:00 · 2540 次点击
    这是一个创建于 3154 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近想采集看准网的部分内容,但是老是被封,每次基本上被封两三天;不知道这里有没有朋友研究过他们的防采集? 怎么突破

    11 条回复    2016-04-15 17:09:24 +08:00
    leavic
        1
    leavic  
       2016-04-15 10:49:29 +08:00
    先说说你做了哪些防封措施?
    vvwvv
        2
    vvwvv  
    OP
       2016-04-15 11:02:13 +08:00
    @leavic 做了 代理、已经休眠 比如 采集 30 条 休眠 1 分钟 ps :用的火车头····
    leavic
        3
    leavic  
       2016-04-15 11:06:04 +08:00   ❤️ 1
    1 :代理是 IP 池吗?单个 IP 或者不经常随机更换没有意义。
    2 :采集 30 分钟休眠 1 分钟,这个机器特征太明显了,如果真要封当然可以找出来。而且连续爬 30 分钟,这个对服务器不是个小的负担,把每次请求的间隔增大个几秒可能更有意义,这样更接近人类访问。

    真要搞,其实也只能大规模分布式爬了。
    zqhong
        4
    zqhong  
       2016-04-15 11:57:50 +08:00   ❤️ 1
    可以看下这个:
    https://github.com/ericls/vote_against_37/blob/master/main.py

    这里面采用一种思路:在发送 HTTP 请求前,添加 X-Forwarded-For 请求头,值为随机 IP 。某些网站通过 X-Forwarded-For 来获取用户的“真实 IP ”。比如: www.ip138.com 这个网站。

    关于 X-Forwarded-FOr :一般你使用代理的时候,代理服务器会在 HTTP 头里面加一个 X-Forwarded-For 来标识用户的真实 IP 。具体请看 wiki : https://zh.wikipedia.org/wiki/X-Forwarded-For


    这是我最近爬取豆瓣电影写的一个爬虫,也可以看看:
    https://github.com/zqhong/douban_movie

    感觉很多方面还有待提高,欢迎提出 issues 。
    popok
        5
    popok  
       2016-04-15 13:51:50 +08:00
    @zqhong 这个是 PHP 一个获取 IP 的函数, discuz 也是用的这个,被借用的比较广泛,但是 X-Forwarded-For 这个请求头,客户端可是自己设置,所以很多 php 的程序都可以被伪造 IP 。。

    不过现在很多程序都把这个函数改了,不从 X-Forwarded-For 上读 IP ,所以看运气
    popok
        6
    popok  
       2016-04-15 13:52:03 +08:00
    function GetIP(){
    if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
    $ip = getenv("HTTP_CLIENT_IP");
    else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
    $ip = getenv("HTTP_X_FORWARDED_FOR");
    else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
    $ip = getenv("REMOTE_ADDR");
    else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
    $ip = $_SERVER['REMOTE_ADDR'];
    else
    $ip = "unknow";
    return($ip);
    }
    manhere
        7
    manhere  
       2016-04-15 13:56:27 +08:00 via iPhone
    只用 remote_addr 判断 IP ,怎么伪造
    xiaoding
        8
    xiaoding  
       2016-04-15 14:04:54 +08:00
    动态 vps
    不过现在就算用动态 vps 我也有办法反爬,一整套方案。
    crab
        9
    crab  
       2016-04-15 14:29:49 +08:00
    @xiaoding 按地区吗?不然的话 IP 不一样,缓存, cookies 都清空。
    zqhong
        10
    zqhong  
       2016-04-15 15:06:13 +08:00
    @popok 是的,这个确实得看服务端怎么识别用户 ip 的。
    justlikemaki
        11
    justlikemaki  
       2016-04-15 17:09:24 +08:00
    @xiaoding 能分享下么
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5901 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:52 · PVG 10:52 · LAX 18:52 · JFK 21:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.