我现在在写这样一个程序:用户输入一个关键词,指定搜索引擎(一般为百度)去搜索指定网站(测试的是新华网news.xinhuanet.com),将返回的结果链接一个个地打开,把网页里面的标题、时间、发布者、正文都获取出来,写进数据库。我的思路是这样的:利用 htmlparser 把构造的百度搜索链接(百度貌似没有提供API,我只有直接用GET方式提交检索了)返回的内容全部读取出来,过滤出其中的结果链接(链接中含有www.xinhuanet.com的)。最后再一个个地读取结果链接,将页面中的内容去出来(思路也是遍历标签节点,遇到特定格式的标签把内容取出来)。目前已经初步完成,测试的效果是:正常情况下前五六十条数据没问题(测试的关键词是 西门子冰箱 1000+ 条结果应该),很好,但从五六十条开始,就停止爬取了(就是等好久也没反应,我用的是一个独立的进程爬取的,跟GUI无关)。问题是:
       1.爬取了五六十条为什么会停止爬取?
       2.有没有好一点、稳定一点的方法?

解决方案 »

  1.   

    1.爬取了五六十条为什么会停止爬取?
    —— 很多主流网站有防爬虫设计,如果爬虫访问过于频繁,或者是并发爬,会被band;
    —— 另一种可能是网络不稳定导致,类似你有时候浏览器刷新页面刷出个空白页面。2.有没有好一点、稳定一点的方法?
    —— 看问题情况,如果是前者,需要调整爬的频度;
    —— 如果是后者,设置超时机制,比如5秒内没有响应就断开重试。
      

  2.   

    好吧,我表示我已经解决这个问题了。
    2楼的说法还是比较正确的。
    应该是目标网站给了限制。
    我现在是用HttpClient来获取网页的。
    HttpClient可以冒充浏览器,这样就不会被限制了。
    感谢大家,特别感谢2楼!