it-swarm.com.ru

Как использовать Python запросы для фальсификации посещения браузера?

Я хочу получить контент с сайта ниже. Если я использую браузер, такой как Firefox или Chrome, я могу получить реальную страницу веб-сайта, которую я хочу, но если я использую Python пакет запросов (или команду wget), чтобы получить его, он возвращает совершенно другая HTML-страница. Я думал, что разработчик сайта сделал несколько блоков для этого, поэтому вопрос:

Как подделать посещение браузера с помощью python запросов или команды wget?

http://www.ichangtou.com/#company:data_000008.html

87
user1726366

Укажите User-Agent header :

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)

К вашему сведению, вот список строк User-Agent для разных браузеров:


В качестве примечания отметим, что есть довольно полезный сторонний пакет под названием fake-useragent , который обеспечивает хороший уровень абстракции над пользовательскими агентами:

поддельный 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'
204
alecxe

если этот вопрос все еще актуален

Я использовал поддельный 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]>
21
Umesh Kaushik

Попробуйте сделать это, используя firefox как fake пользовательский агент (более того, это хороший стартовый скрипт для просмотра веб-страниц с использованием файлов 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"
7
Gilles Quenot

Корень ответа в том, что человеку, задающему вопрос, нужен интерпретатор JavaScript, чтобы получить то, что ему нужно. Я обнаружил, что могу получить всю информацию, которую хотел найти на веб-сайте в json, прежде чем она будет интерпретирована JavaScript. Это сэкономило мне массу времени при разборе html, надеясь, что каждая веб-страница имеет одинаковый формат.

Поэтому, когда вы получаете ответ от веб-сайта, использующего запросы, действительно смотрите html/text, потому что вы можете найти JSON Javascripts в нижнем колонтитуле, готовый для анализа.

2
Daniel Butler