1
Я пытаюсь разобрать HTML следующий URL с помощью JSoup:JSoup HttpStatusException
http://brickseek.com/walmart-inventory-checker/
Когда я выполнить программу я получаю ниже исключения. Я использую jsoup-1.10.1.jar
Exception in thread "main" org.jsoup.HttpStatusException: HTTP error fetching URL. Status=403, URL=http://brickseek.com/walmart-inventory-checker/
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:598)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:548)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:235)
at Third.main(Third.java:22)
Ниже программа:
import java.io.IOException;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Third {
public static void main(String[] args) throws IOException {
String uniqueSku ="44656182";
String zipCode ="75160";
Response response = Jsoup.connect("http://brickseek.com/walmart-inventory-checker/")
.data("store_type","3", "sku", uniqueSku , "zip" , String.valueOf(zipCode) , "sort" , "distance")
.userAgent("Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2")
.method(Method.POST)
.timeout(0)
.execute();
String rawHTML = response.body();
Document parsedDocument = Jsoup.parse(rawHTML);
Element bodyElement = parsedDocument.body();
Elements inStockTableElement = bodyElement.getElementsByTag("table");
}
}
Любая помощь будет принята с благодарностью.
Это работает для меня. : O –
Он работает? Тем не менее, я получаю ту же проблему. Не могли бы вы рассказать мне, в каком редакторе (Ex Eclipse) вы используете? Версия Java и версия Jsoup? Я не знаю, как решить эту проблему :(Вы можете sysout для объекта inStockTableElement? – Radi
Я использую Eclipse Luna, JDK 1.7.0_67, Jsoup 1.10.1. Да, я могу напечатать 'inStockTableElement' с помощью 'System.out.println()' и он печатает '
ответ
У сервера, вероятно, есть своего рода метод для определения того, используете ли вы бот для очистки страницы. Попробуйте изменить заголовок HTTP, чтобы что-то вроде этого:
Этого заголовок был скопирован именно из заголовков Google Chrome - как правило, боты, обнаруженных в другом порядке заголовков или разная капитализация заголовков. Скопировав Google Chrome точно, вы должны быть в состоянии обойти его незамеченным.
Некоторые алгоритмы обнаружения ботов подсчитывают количество запросов на каждый IP-адрес и начинают блокировку выше определенного порога - поэтому он по-прежнему работает для некоторых людей.
источник
2017-04-01 21:06:50 AJC
Просто добавьте ignoreHttpErrors (true) в свой код.
Благодаря
источник
2017-07-24 11:15:39
Смежные вопросы