как исправить ошибку HTTP получение URL. Status=500 в java во время обхода?

Я пытаюсь сканировать рейтинги пользователей кинофильмов imdb со страницы обзора: (количество фильмов в моей базе около 600 000 человек). Я использовал jsoup для разбора страниц, как показано ниже: (извините, я не написал весь код здесь, так как он слишком длинный)

try {
  //connecting to mysql db
  ResultSet res = st
        .executeQuery("SELECT id, title, production_year " +
                "FROM title " +
                "WHERE kind_id =1 " +
                "LIMIT 0 , 100000");
  while (res.next()){
       .......
       .......
     String baseUrl = "http://www.imdb.com/search/title?release_date=" +
            ""+year+","+year+"&title="+movieName+"" +
            "&title_type=feature,short,documentary,unknown";
    Document doc = Jsoup.connect(baseUrl)
            .userAgent("Mozilla")
            .timeout(0).get();
      .....
      ..... 
//insert ratings into database
      ...

я протестировал его для первых 100, затем первых 500, а также для первых 2000 фильмов в моей БД, и он работал хорошо. Но проблема в том, что когда я тестировал фильмы 100,000, я получил эту ошибку:

org.jsoup.HttpStatusException: HTTP error fetching URL. Status=500,   URL=http://www.imdb.com/search/title?release_date=1899,1899&title='Columbia'%20Close%20to%20the%20Wind&title_type=feature,short,documentary,unknown
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:449)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:424)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:178)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:167)
at imdb.main(imdb.java:47)

I много искал эту ошибку, и я обнаружил, что это ошибка на стороне сервера с номером ошибки 5xx.

затем я решил установить условие, что при сбое соединения он пытается еще 2 раза, а затем, если все еще не может подключиться, не останавливается и переходит к следующему url-адресу. поскольку я новичок в java, я попытался найти подобные вопросы и прочитать эти ответы в stackoverflow:

исключения, когда я извлекаю данные с веб-сайта

ошибка Jsoup обработка, когда не удалось подключиться к веб-сайту

обработка ошибок подключения и JSoup

но, когда я пытаюсь с "соединение.Ответ " как они предполагают, он говорит мне, что "соединение.Ответ не может быть разрешен к типу".

Я ценю, если кто-то может мне помочь, так как я просто новичок, и я знаю, что это может быть просто, но я не знаю, как это исправить.


Ну, я мог бы исправить состояние ошибки http 500, просто добавив "ignoreHttpError (true)" как показано ниже:

org.jsoup.Connection con = Jsoup.connect(baseUrl).userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21");
con.timeout(180000).ignoreHttpErrors(true).followRedirects(true);
Response resp = con.execute();
Document doc = null;

if (resp.statusCode() == 200) {
    doc = con.get();
......

надеюсь, что это может помочь тем, у кого такая же ошибка.

однако, после обхода страниц обзора 22907 фильмов (около 12 часов), я получил еще одну ошибку:
"ЧТЕНИЯ ИСТЕКЛО".

Я ценю любое предложение исправить эту ошибку.

1 ответов


обновление моих комментариев до ответа:

Connection.Response is org.jsoup.Connection.Response

разрешить document экземпляр только при наличии допустимого http-кода (200) разбейте вызов на 3 части; Connection, Response, Document

следовательно, ваша часть кода выше изменяется на:

while (res.next()){
       .......
       .......
       String baseUrl = "http://www.imdb.com/search/title?release_date=" + ""
                + year + "," + year + "&title=" + movieName + ""
                + "&title_type=feature,short,documentary,unknown";
       Connection con = Jsoup.connect(baseUrl).userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21").timeout(10000);
       Connection.Response resp = con.execute();
       Document doc = null;
        if (resp.statusCode() == 200) {
            doc = con.get();
                    ....
        }