Как использовать запросы Python для подделки посещения браузера?
Я хочу получить контент с сайта ниже. Если я использую браузер, такой как Firefox или Chrome, я могу получить реальную страницу сайта, которую я хочу, но если я использую пакет запросов Python (или wget command) чтобы получить его, он возвращает совершенно другую HTML-страницу. Я думал, что разработчик сайта сделал некоторые блоки для этого, так что вопрос:
Как я могу поддельные посещения браузера с помощью запросов на языке Python или команду wget?
4 ответов:
обеспечить
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 это обеспечивает хороший уровень абстракции над агентами пользователей:
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'
если этот вопрос все еще действителен
Как использовать:
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]>
попробуйте сделать это, используя firefox как подделку пользовательский агент (кроме того, это хороший скрипт для веб-выскабливание с использованием cookies):
#!/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"
корень ответа заключается в том, что человек, задающий вопрос, должен иметь интерпретатор JavaScript, чтобы получить то, что им нужно. Я нашел, что я могу получить всю информацию, которую я хотел на веб-сайте в json, прежде чем она была интерпретирована JavaScript. Это сэкономило мне кучу времени в том, что бы разбирать html, надеясь, что каждая веб-страница находится в том же формате.
поэтому, когда вы получаете ответ с веб-сайта, используя запросы, действительно посмотрите на html / текст, потому что вы можете найдите javascripts JSON в нижнем колонтитуле, готовый к анализу.
Comments