Сводка проблемы
Я пытаюсь загрузить этот URL (https://www.glassdoor.com/Reviews/reviews-SRCH_IP2.htm) с помощью вызова метода yield scrapy.Request(url = url, callback = ...)
, а свойство response.body возвращает HTML, который совсем не напоминает HTMLЯ ожидаю возврата.
Выдержка из тела, которое возвращается в response.body :
<!DOCTYPE html>\n
<html lang=\'en\' xmlns:fb=\'http://www.facebook.com/2008/fbml\' xmlns:og=\'http://opengraph.org/schema/\'\n class=\'flex\'>
\n\n<head prefix=\'og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# glassdoor: http://ogp.me/ns/fb/glassdoor#\'><script src="https://browser.sentry-cdn.com/5.2.0/bundle.min.js" crossorigin="anonymous"></script><script>\n\t\n\tSentry.init(\n\t\t{\n\t\t\tdsn: \'https://a0ab694c43ba4fccafb5987e4a3e8367@sentry.glassdoor.com/8\',\n\t\t\tenvironment: \'prod\',\n\t\t\tsampleRate: 0.0\n\t\t}\n\t);\n\tSentry.configureScope(function(scope){\n\t\tscope.setUser(\n\t\t\t{\n\t\t\t\tid: \'0\',\n\t\t\t\tguid: \'0b8f8e55-d91d-4ea7-848a-0a3a1b215fc8\'\n\t\t\t}\n\t\t);\n\t});\n</script><!-- because the getter clears the value --><script>\n\twindow.gdGlobals = window.gdGlobals ||\n\t\t[{\n\t\t\t\'analyticsId\':
Полный текст приведенного выше HTML также несодержит содержимое тела, которое я пытаюсь очистить.
Выдержка из тела HTML при личном посещении URL :
<!DOCTYPE html>
<html lang='en' xmlns:fb='http://www.facebook.com/2008/fbml'xmlns:og='http://opengraph org/schema/'class='flex'>
<head prefix='og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# glassdoor: http://ogp.me/ns/fb/glassdoor#'>
<script src="https://browser.sentry-cdn.com/5.2.0/bundle.min.js" crossorigin="anonymous"></script><script>
Sentry.init(
{
dsn: 'https://a0ab694c43ba4fccafb5987e4a3e8367@sentry.glassdoor.com/8',
environment: 'prod',
sampleRate: 0.0
}
);
Что я пытался
У меня есть другой паук (spider1, давайте назовем его), который успешно вызывает scrapy.Request()
и возвращает ожидаемый HTML. Основное различие между spider1 и этим пауком заключается в том, что spider1 требует логин для доступа к информации.попытался запросить вышеуказанный URL-адрес как до, так и после входа в систему, но возвращенный HTML-код одинаков. Кроме того, Glassdoor не требует входа пользователя в систему для чтения содержимого URL-адреса, на который я ссылалсявыше, поэтому я не верю, что это является причиной проблемы.
Мой код и что странно
Код для вызова этого приведен ниже:
start_urls = ["https://www.glassdoor.com/Reviews/reviews-SRCH_IP2.htm"]
yield scrapy.Request(url = self.start_urls[0], callback = self.process_page)
Странная часть в том, что при отладке HTML-код действительно возвращается правильно (но очень нечасто - я бы оценил, может быть, в 1/20 раза).Это происходит без каких-либо изменений кода , и я испытываю значительные трудности в определении причин, по которым это работает в тех редких случаях.
Мои мысли
Единственное слегка обоснованное подозрениеУ меня есть вот что мне нужно для реализации паук прокси.Glassdoor мог намеренно блокировать мои запросы, объясняя, почему HTML-код корректно возвращается только во время отладки - опять же, это происходит примерно через 1/20 выполнения, и он никогда не возвращался правильно без точек останова, ведущих к вызову scrapy.Request()
.
Большое спасибо за любые советы и / или указатели.С благодарностью!