Я пытаюсь написать веб-скребок для базы данных зданий Нью-Йорка, и я пытаюсь получить html фактического веб-сайта. По какой-то причине, когда я помещаю URL-адрес веб-сайта, который пытаюсь очистить, моя программа ничего не делает. Всякий раз, когда я помещаю URL-адрес практически любого другого веб-сайта, я фактически получаю запрошенный html. Это потому, что я пытаюсь парсить правительственный сайт?
var request = require("request");
request(
{ uri: "http://a810-bisweb.nyc.gov/bisweb/JobsQueryByNumberServlet?requestid=3&passjobnumber=123768556&passdocnumber=01" },
function(error, response, body) {
console.info(body);
console.info("hello")
}
);
Я ожидал получить html в виде строки, напечатанной в моей консоли, вместо этого я ничего не получил. «Привет» даже не печатается. Однако, когда я пробую любой другой сайт, я получаю фактическую строку html.
У меня не было никаких ошибок, моя консоль просто зависла



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


URL-адрес, который вы пытаетесь получить, дает отказ в доступе.
Я предпочитаю API на основе обещаний для запроса, поэтому следующий код
var request = require("request");
request
.get("http://a810-bisweb.nyc.gov/bisweb/JobsQueryByNumberServlet?requestid=3&passjobnumber=123768556&passdocnumber=01")
.on('response', function(response) {
console.info('Hello');
console.info(response.statusCode);
console.info(response.headers['content-type']);
})
.on('error', function(error){
console.info(error);
})
распечатает
Hello
403
text/html
Я предполагаю, что причина, по которой вы получаете 403, заключается в том, что сайт, вероятно, устанавливает файлы cookie или имеет какое-то состояние сеанса, и вы переходите непосредственно к нужному URL-адресу, а не сначала попадаете на главную страницу. Я также получаю 403 в браузере, если я перехожу непосредственно к URL-адресу, но если я сначала перехожу на главную страницу, а затем к URL-адресу, я получаю страницу.
Большое спасибо за помощь. Есть ли способ обойти это в node. Могу ли я имитировать это состояние сеанса?
вы можете увидеть несколько примеров здесь stackoverflow.com/questions/19936705/…, которые являются публикацией, но применимы, также установите заголовки запроса, чтобы сказать, что вы пришли с первой страницы. Также поэкспериментируйте с этим, посмотрите, сможете ли вы сделать это, просто настроив заголовок запроса, чтобы сказать, что вы пришли с главной страницы сайта. Здесь показано, как установить заголовки с запросом github.com/request/request#custom-http-заголовки, чтобы установить заголовки реферера ['Referer'] = "a810-bisweb.nyc.gov"
Для тех, кому интересно, я смог обойти ограничения, установленные сайтом, с помощью tampermonkey. Мне просто нужно было получить доступ к DOM в любом случае, поэтому tampermonkey позволил мне запустить скрипт, как только я зашел на сайт.
Вам будет легче жить, если вы ВСЕГДА будете проверять наличие ошибок.