我正在使用JSoup测试网络抓取工具。问题出现在我在常规PC上测试爬虫并按预期工作时,然后我将此Web爬虫作为jar导出,以便在cron作业中的服务器中工作。这就是出错的地方。
代码相同,没有变化。我试图提取的数据是用户对服务评级方式的不同评论,问题是网络抓取工具在服务器中执行时的行为有所不同,例如:评论是重复的,当我在本地测试程序时,事情并没有发生。
此外,网络抓取工具还会区分评论的语言(我从网址获取该信息,德语为.de
,西班牙语为.es
等)。例如,此信息混合在一起,西班牙语中的评论被归类为葡萄牙语评论。
我再次重申爬虫背后的逻辑是正确的,我用不同的输入进行了多次测试。
这些问题背后的问题可能是什么?
附加说明:
没有异常/崩溃。
我正在使用jsoup 1.9.2。
这是我从网站获取数据的方式:
Document doc = Jsoup.connect(link).userAgent(FakeAgentBooking.getAgent()).timeout(60 * 4000).get();
我已经尝试过使用代理,以防服务器被禁止。
System.getProperties()。put(" https.proxyHost"," PROXY"); System.getProperties()。put(" https.proxyPort"," PORT"); System.getProperties()。put(" https.proxyUser"," USER"); System.getProperties()。put(" https.proxyPassword"," PASSWORD");
这是cron作业的代码:
@Crawler(name = "Booking comments", nameType = "BOOKING_COMMENTS", sentimetal = true, cron = "${cron.booking.comments}")
public class BookingCommentsJob extends MotherCrawler {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(BookingCommentsJob.class);
@Value("${full.booking.comments}")
private String full;
@Autowired
private ComentariosCDMXRepository comentariosCDMXRepository;
@Override
@PostConstruct
public void init() {
setInfo(this.getClass().getAnnotation(Crawler.class));
}
@Override
public void exec(int num) {
// <DEBUG>
String startTime = time.format(new Date());
// </DEBUG>
Set<CrawQuery> li = queryManager.getMeQueries(type, num, threadnum);
Gson gson = new GsonBuilder().create();
for (CrawQuery s : li) {
String query = s.getQuery().get("query");
try {
//the crawling begins here-->
String result = BookingComentarios.crawlBookingComentarios(query, Boolean.parseBoolean(full));
//get the result from json to a standarized class
ComentarioCDMX[] myComments = gson.fromJson(result, ComentarioCDMX[].class);
for (ComentarioCDMX myComment : myComments) {
//evaluates if the comment is positive, neutral or negative.
Integer sentiment = sentimentAnalysis.classifyVector(myComment.getComment());
myComment.setSentiment(sentiment);
myComment.setQuery(query);
/* <Analisis de sentimiento /> */
comentariosCDMXRepository.save(myComment);
}
s.setStatus(true);
} catch (Exception e) {
logger.error(query, e);
s.setStatus(false);
mailSend.add(e);
} finally {
s.setLastUse(new Date());
//Saves data to Solr
crawQueryDao.save(s);
}
}
update();
// <DEBUG>
String endTime = time.format(new Date());
logger.info(name + " " + num + " > Inicio: " + startTime + ", Fin: " + endTime);
// </DEBUG>
}
@Scheduled(cron = "${cron.booking.comments}")
public void curro0() throws InterruptedException {
exec(0);
}
}
这是应该执行代码的时间:
cron.booking.comments=00 30 02 * * *
附加说明: 测试PC OS是Windows 7,服务器OS是linux Debian 3.16.7。测试PC中的java版本是1.7 oracle JDK,服务器上是1.8.0 JRE。