comment fixer erreur HTTP récupérer l'URL. Statut=500 en java lors de l'exploration?
Je suis en train d'analyser les classements de l'utilisateur de cinéma des films de imdb à partir de la page d'examen:
(nombre de films dans ma base de données est d'environ 600 000). J'ai utilisé jsoup pour analyser les pages ci-dessous: (désolé, je n'avais pas écrire tout le code ici, car il est trop long)
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
...
Je l'ai testé pour la première 100, 500 premiers et également pour les 2000 premiers films dans ma db et cela a bien fonctionné. Mais le problème est que lorsque j'ai testé pour 100 000 films j'ai eu cette erreur:
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)
J'ai beaucoup cherché pour cette erreur et j'ai trouvé que c'est une erreur du côté serveur avec 5xx erreur de numéro.
Alors j'ai décidé de définir une condition que lorsque la connexion échoue, il essaie 2 fois plus et puis si toujours impossible de se connecter, ne s'arrête pas et va à l'url suivante. depuis, je suis nouveau sur java, j'ai essayé de rechercher des questions similaires, et de lire ces réponses dans stackoverflow:
Des Exceptions alors que je suis l'extraction de données à partir d'un site Web
Jsoup erreur de manipulation lors impossible de se connecter au site web
Gestion des erreurs de connexion et JSoup
mais, quand j'essaie de la Connexion".Réponse", comme ils le suggèrent, il me dit que la Connexion".La réponse ne peut pas être résolu de type".
J'apprécie si quelqu'un pouvait m'aider, car je suis un novice et je sais que ça peut être simple, mais je ne sais pas comment le résoudre.
Bien, j'ai corrigé l'erreur http statut de 500 par le simple ajout de "ignoreHttpError(vrai)" comme ci-dessous:
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();
......
espère que cela peut aider ceux qui ont la même erreur.
cependant, après l'analyse de l'examen des pages de 22907 films (environ 12 heures), j'ai une autre erreur:
"READ TIMED OUT".
J'apprécie toute suggestion pour corriger cette erreur.
org.jsoup.Connection.Response
?J'ai essayé, mais je reçois cette erreur: Connexion refusée à java.net.PlainSocketImpl.socketConnect(Native method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
Je l'ai essayé et il me met le sortie:
Connection.Response con = Jsoup .connect( "http://www.imdb.com/search/title?release_date=1899,1899&title='Columbia'%20Close%20to%20the%20Wind&title_type=feature,short,documentary,unknown") .userAgent( "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21") .timeout(10000).execute(); System.out.println(con.body());
désolé, l'erreur est: erreur HTTP récupérer l'URL. Statut=403, URL=imdb.com/search/... at org.jsoup.helper.HttpConnection$De Réponse.execute(HttpConnection.java:449) at org.jsoup.helper.HttpConnection$De Réponse.execute(HttpConnection.java:424) at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:178) at org.jsoup.helper.HttpConnection.get(HttpConnection.java:167)
403 moyens interdits, certains sites ne permettent pas des robots, donc vous devez utiliser
.useragent()
lors de l'extraction de la réponse. Essayez de copier le code dans mon commentaire ci-dessus et de voir si vous voyez le code javascript ou html comme code dans votre console, ce qui signifierait que la connexion a été un succèsOriginalL'auteur mOna | 2014-02-18
Vous devez vous connecter pour publier un commentaire.
La mise à niveau de mes commentaires pour la réponse:
Connection.Response
estorg.jsoup.Connection.Response
Pour permettre
document
exemple seulement quand il y a un code http (200), à briser votre appel en 3 parties;Connection
,Response
,Document
De là, votre partie du code ci-dessus se modifie:
Eh bien, malheureusement, j'ai reçu le statut de l'erreur 500 à nouveau:(
eh bien, c'était l'idée derrière l'utilisation de la Connexion.La réponse, pour obtenir un handle sur le code d'état, et si c'est autre chose que de 200 (comme dans votre cas, 500) de ne pas continuer avec l'instance de Document et de passer à la suivante
sinon, essayez d'augmenter le délai d'attente de 10 000 à dire, 60000 (une minute), si c'est faisable
OriginalL'auteur PopoFibo