Как использовать запросы Python для имитации посещения браузера?
129
Я хочу получить контент с указанного ниже веб-сайта. Если я использую браузер, такой как Firefox или Chrome, я могу получить настоящую страницу веб-сайта, которую хочу, но если я использую пакет (или wgetкоманду) запросов Python для ее получения, он возвращает совершенно другую HTML-страницу. Я думал, что разработчик веб-сайта сделал для этого несколько блоков, поэтому вопрос:
Как подделать посещение браузера с помощью запросов python или команды wget?
В качестве примечания, существует довольно полезный сторонний пакет под названием fake-useragent, который обеспечивает хороший уровень абстракции над пользовательскими агентами:
поддельный UserAgent
Современный простой пользовательский агент-фейкер с реальной базой данных
Демо-версия:
>>>from fake_useragent importUserAgent>>> ua =UserAgent()>>> ua.chrome
u'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36'>>> ua.random
u'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36'
спасибо за ваш ответ, я пробовал использовать заголовки в своих запросах, но все еще не смог получить реальное содержимое страницы, есть строка «В вашем веб-браузере должен быть включен JavaScript, чтобы это приложение отображалось правильно». на возвращенной html-странице, следует ли мне добавлять поддержку java-скриптов в запросы? Если да, то как мне это сделать?
user1726366
8
@ user1726366: Вы не можете просто добавить поддержку JavaScript - для этого вам понадобится интерпретатор JavaScript. Самый простой подход - использовать интерпретатор JavaScript реального веб-браузера, но вы можете автоматизировать это из Python с помощью Selenium .
PM 2Ring
1
@ alecxe, @ sputnick: я попытался захватить пакеты с помощью wirehark, чтобы сравнить разницу от использования запросов python и браузера, похоже, что URL-адрес веб-сайта не статический, мне нужно дождаться завершения рендеринга страницы, поэтому звучит Selenium подходящие инструменты для меня. Спасибо за вашу любезную помощь. :)
user1726366
4
@ user1726366 да, если использование настоящего браузера + селен соответствует вашим потребностям, то это самый безболезненный подход. Обратите внимание, что вы можете использовать PhantomJSбезголовый браузер с селеном. Спасибо. (не забудьте принять ответ, если он был полезен)
alecxe
Оказывается, некоторые поисковые системы фильтруют некоторые UserAgent. Кто-нибудь знает почему? Может ли кто-нибудь предоставить список приемлемых UserAgents?
from fake_useragent importUserAgentimport requests
ua =UserAgent()print(ua.chrome)
header ={'User-Agent':str(ua.chrome)}print(header)
url ="https://www.hybrid-analysis.com/recent-submissions?filter=file&sort=^timestamp"
htmlContent = requests.get(url, headers=header)print(htmlContent)
вывод:
Mozilla/5.0(Macintosh;IntelMac OS X 10_8_2)AppleWebKit/537.17(KHTML, like Gecko)Chrome/24.0.1309.0Safari/537.17{'User-Agent':'Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'}<Response[200]>
404 - это другая ошибка, вы уверены, что можете просматривать страницу с помощью браузера?
Умеш Кошик
Абсолютно. Мне кажется, что веб-сайт, который я пытаюсь использовать, заблокировал все IP-адреса Amazon EC2.
Максим Князев
Не могли бы вы проверить ссылку здесь? Я могу попробовать со своей стороны. Кроме того, если IP заблокирован, код ошибки должен быть 403 (запрещено) или 401 (неавторизовано). Есть сайты, на которых парсинг вообще запрещен. Кроме того, многие веб-сайты используют Cloudflare, чтобы боты не заходили на сайт.
Умеш Кошик
Вот моя ссылка regalbloodline.com/music/eminem . Раньше все работало нормально. Перестал работать на python 2. Работал на python 3 на локальной машине. Переход на AWS EC2 там не работал. Продолжала получать ошибку 404. Затем перестала работать и на локальной машине. Использование эмуляции браузера работало на локальном компьютере, но не на EC2. В конце концов я сдался и нашел альтернативный веб-сайт для очистки. Кстати, можно ли избежать облачного пожара?
Максим Князев
7
Попробуйте сделать это, используя firefox как поддельный пользовательский агент (более того, это хороший сценарий запуска для парсинга веб-страниц с использованием файлов cookie):
#!/usr/bin/env python2# -*- coding: utf8 -*-# vim:ts=4:sw=4import cookielib, urllib2, sysdef doIt(uri):
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
page = opener.open(uri)
page.addheaders =[('User-agent','Mozilla/5.0')]print page.read()for i in sys.argv[1:]:
doIt(i)
Корень ответа заключается в том, что человеку, задающему вопрос, необходим интерпретатор JavaScript, чтобы получить то, что ему нужно. Я обнаружил, что могу получить всю необходимую информацию на веб-сайте в json до того, как она будет интерпретирована JavaScript. Это сэкономило мне массу времени при анализе html в надежде, что каждая веб-страница будет в одном формате.
Поэтому, когда вы получаете ответ от веб-сайта с использованием запросов, действительно посмотрите на html / text, потому что вы можете найти javascripts JSON в нижнем колонтитуле, готовом для анализа.
PhantomJS
безголовый браузер с селеном. Спасибо. (не забудьте принять ответ, если он был полезен)UserAgent
. Кто-нибудь знает почему? Может ли кто-нибудь предоставить список приемлемыхUserAgent
s?если этот вопрос все еще актуален
Я использовал поддельный UserAgent
Как пользоваться:
вывод:
источник
Попробуйте сделать это, используя firefox как поддельный пользовательский агент (более того, это хороший сценарий запуска для парсинга веб-страниц с использованием файлов cookie):
ИСПОЛЬЗОВАНИЕ:
источник
Корень ответа заключается в том, что человеку, задающему вопрос, необходим интерпретатор JavaScript, чтобы получить то, что ему нужно. Я обнаружил, что могу получить всю необходимую информацию на веб-сайте в json до того, как она будет интерпретирована JavaScript. Это сэкономило мне массу времени при анализе html в надежде, что каждая веб-страница будет в одном формате.
Поэтому, когда вы получаете ответ от веб-сайта с использованием запросов, действительно посмотрите на html / text, потому что вы можете найти javascripts JSON в нижнем колонтитуле, готовом для анализа.
источник