laskuma
V2EX  ›  问与答

爬虫如何处理重复抓取的网页?

  •  
  •   laskuma · Feb 27, 2013 · 7783 views
    This topic created in 4997 days ago, the information mentioned may be changed or developed.
    入门开始写一个爬虫。在爬进一个地址之前是不是需要检测那个地址是否被爬过呢?
    检测的时候一般用什么方法呢?暂时能想到的是用HashMap.
    17 replies  •  1970-01-01 08:00:00 +08:00
    fishsjoy
    fishsjoy
    Feb 27, 2013❤️1
    1
    bloom filter
    xingzhi
    xingzhi
    Feb 27, 2013❤️1
    2
    hashMap是可以,但相对而言耗内存。
    如ls所说,用布隆过滤器较好。 吴军的书 《数学之美》中有详细的介绍。
    twm
    twm
    Feb 27, 2013❤️1
    3
    做一个redis集群,或者memcache集群,bdb也行,抓取过的就扔进去,每次要抓取的时候检查一下。
    xingzhi
    xingzhi
    Feb 27, 2013
    4
    很久前收藏的一篇文章, 你可以看看:
    http://www.xiuwz.com/site/tech-bloom-filter/
    laskuma
    laskuma
    OP
    Feb 27, 2013❤️1
    5
    @xingzhi 多谢分享!
    forest520
    forest520
    Feb 27, 2013
    6
    @fishsjoy
    @xingzhi
    @twm 很多情况下,一个相同的网页可以有很多不同的URL地址,譬如加上一些识别来源的动态参数等,这种情况有什么办法识别是重复的URL?比如:
    item.taobao.com/item.htm?spm=1020.3.9.79.4L0esQ&id=15480553483&from=
    item.taobao.com/item.htm?id=15480553483
    其实是一个网页。
    xingzhi
    xingzhi
    Feb 27, 2013
    7
    @forest520
    我觉得这个就没有万能的解决方案了,得视网站而定。
    如你举的例子,可以先找出taobao究竟是以什么参数来决定这个页面的。
    这里是id, 那就在获取url后,抽取出id来进行二次判断。
    laskuma
    laskuma
    OP
    Mar 1, 2013
    8
    @xingzhi 还想再问一个问题 如何获取tinyurl的真实url呢? 我在java下用getresponcecode拿到的是200不是301= =
    crazybubble
    crazybubble
    Mar 1, 2013
    9
    @laskuma python里的方法是,urllib2.urlopen("http://bit.ly/XKqphv").geturl()
    crazybubble
    crazybubble
    Mar 1, 2013
    10
    @laskuma java里你可以用HttpURLConnection建立链接,然后getURL()
    laskuma
    laskuma
    OP
    Mar 1, 2013 via iPad
    11
    @crazybubble 机制不同 获取的还是tinyurl
    binux
    binux
    Mar 1, 2013
    12
    真没必要用什么bloom filter,就算你爬一千万个页面,那已经很厉害了,哈希一下全放数据库里,MYSQL什么就行,内存数据库都不需要,每次查一下,没任何问题。
    laskuma
    laskuma
    OP
    Mar 1, 2013 via iPad
    13
    @binux 正好不会写 也就练练手了
    crazybubble
    crazybubble
    Mar 1, 2013❤️1
    14
    @laskuma ...这就奇怪了,我试了下tinyurl,能得到原地址
    clowwindy
    clowwindy
    Mar 1, 2013❤️1
    15
    hash 一下存 redis
    laskuma
    laskuma
    OP
    Mar 2, 2013
    16
    @crazybubble http://tinyurl.com/at3p3en 能帮忙测试下吗?我这个网址不行
    laskuma
    laskuma
    OP
    Mar 2, 2013
    17
    @crazybubble 解决了。。我一connect()就立刻call 的get url。所以给出的还是原来的url 谢谢了!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4438 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 143ms · UTC 01:10 · PVG 09:10 · LAX 17:10 · JFK 20:10
    ♥ Do have faith in what you're doing.