Как использовать запросы Python для подделки посещения браузера?
Я хочу получить контент с сайта ниже. Если я использую браузер, например Firefox или Chrome, я могу получить реальную страницу веб-сайта, которую хочу, но если я использую пакет запросов Python (или wget
) для его получения, он возвращает совершенно другую HTML-страницу. Я думал, что разработчик веб-сайта сделал для этого несколько блоков, поэтому вопрос:
Как подделать посещение браузера с помощью запросов python или команды wget?
http://www.ichangtou.com/#company:data_000008.html
Ответы
Ответ 1
Предоставьте заголовок User-Agent
:
import requests
url = 'http://www.ichangtou.com/#company:data_000008.html'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
response = requests.get(url, headers=headers)
print(response.content)
FYI, вот список строк User-Agent для разных браузеров:
В качестве побочного примечания есть довольно полезный сторонний пакет под названием fake-useragent, который обеспечивает хороший уровень абстракции над пользовательскими агентами:
поддельный UserAgent
Обновленный простой пользовательский фейкер с базой данных реального мира
Демо:
>>> from fake_useragent import UserAgent
>>> 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'
Ответ 2
если этот вопрос остается в силе
Я использовал поддельный UserAgent
Как использовать:
from fake_useragent import UserAgent
import 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; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/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]>
Ответ 3
Попробуйте сделать это, используя firefox как фальшивый пользовательский агент (более того, это хороший запуск script для веб-скрепок с использованием файлов cookie ):
#!/usr/bin/env python2
# -*- coding: utf8 -*-
# vim:ts=4:sw=4
import cookielib, urllib2, sys
def 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)
ПРИМЕНЕНИЕ:
python script.py "http://www.ichangtou.com/#company:data_000008.html"
Ответ 4
Корень ответа заключается в том, что человек, задающий вопрос, должен иметь интерпретатор JavaScript, чтобы получить то, что им нужно. Я нашел, что я могу получить всю информацию, которую я хотел на веб-сайте json, прежде чем она была интерпретирована JavaScript. Это сэкономило мне массу времени в том, что будет анализировать html, надеясь, что каждая веб-страница будет в том же формате.
Поэтому, когда вы получаете ответ от веб-сайта с использованием запросов, действительно смотрите на html/text, потому что вы можете найти javascripts JSON в нижнем колонтитуле, готовом к анализу.