как исправить ошибку 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();
....
}