Jsoup的行为与我的测试PC和服务器不同

时间:2016-07-14 15:29:21

标签: java jsoup

我正在使用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。

0 个答案:

没有答案