code4craft / webmagic

A scalable web crawler framework for Java.
http://webmagic.io/
Apache License 2.0
11.43k stars 4.18k forks source link

从知乎上爬数据返回Read timed out错误,怎么解决 #297

Closed youyouYoung closed 8 years ago

youyouYoung commented 8 years ago

目的:

从知乎的一个问题开始爬取其中所有的回答.我选了贫穷会对人的身心造成多大的影响?问题.

实现:

 public static void main(String[] args)
 {
         //test是实现了PageProcessor的类
         Spider.create(new test()).addUrl("https://www.zhihu.com/question/30603447").addPipeline(new JsonFilePipeline("/home/youyou/zhihu")).thread(5).run();
 }

 public void process(Page page)
 {
          //我只写出里面重要的部分
          page.putField("title", page.getHtml().xpath("//head/title/text()").toString());
          page.putField("answerNumber", page.getHtml().xpath("//div[@class='zh-answers-title clearfix']/h3/text()").toString());
          page.putField("content", page.getHtml().xpath("//div[@class='zh-question-answer-wrap']/div[@class='zm-item-answer']/div[@class='zm-item-rich-text js-collapse-body']/div[@class='zh-summary summary clearfix']/text()").toString());
          page.addTargetRequests(page.getHtml().links().regex("https://www\\.zhihu\\.com/question/.*").all());

 }

可能的错误原因:

知乎需要链接访问需要登录才可以,是不是需要添加账户信息.如果需要才怎么做. 之前写过一个使用java.net包中的类实现的爬取一个知乎页面内容的代码是不需要账户信息的这是为什么!

麻烦各位帮助!

yokiqust commented 8 years ago

read time out是因为网络原因downloader下载失败 用Site.setTimeOut()设置一个较大的值

code4craft commented 8 years ago

同 @yokiqust 所说。网络不好的话,建议设置Site.setTimeOut(),并且将Site.setRetryTimes()设置一个重试次数,可以保证抓的更全一些。

crazyjavar commented 6 years ago

这个我发现没有出发listener里面的onerror()方法,请问下作者出现timeout该怎么抓取这个超时的url