web-dev-qa-db-fra.com

Comment utiliser Python requêtes pour simuler une visite du navigateur?

Je veux obtenir le contenu du site Web ci-dessous. Si j'utilise un navigateur tel que Firefox ou Chrome, je pourrais obtenir la page Web réelle que je veux, mais si j'utilise le package Python request (ou la commande wget), cela renvoie une page HTML totalement différente. Je pensais que le développeur du site Web avait créé des blocs pour cela, donc la question est:

Comment simuler une visite du navigateur à l'aide de python requêtes ou de la commande wget?

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

90
user1726366

Fournissez un User-Agent en-tête :

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)

Pour votre information, voici une liste de chaînes User-Agent pour différents navigateurs:


En guise de remarque, il existe un package tiers très utile appelé fake-useragent , qui fournit une couche d'abstraction de Nice sur les agents utilisateurs:

faux utilisateur

Faker utilisateur simple à jour avec base de données du monde réel

Démo:

>>> 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'
212
alecxe

si cette question est toujours valable

J'ai utilisé faux UserAgent

Comment utiliser:

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)

sortie:

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]>
24
Umesh Kaushik

Essayez de faire cela en utilisant firefox comme faux ser agent (de plus, c'est un bon script de démarrage pour le scraping Web avec l'utilisation de 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)

USAGE:

python script.py "http://www.ichangtou.com/#company:data_000008.html"
7
Gilles Quenot

La racine de la réponse est que la personne qui pose la question doit avoir un interprète JavaScript pour obtenir ce qu’elle cherche. Ce que j’ai trouvé, c’est que je suis en mesure d’obtenir toutes les informations que je voulais sur un site Web en json avant qu’elles ne soient interprétées par JavaScript. Cela m'a permis de gagner beaucoup de temps en analysant html en espérant que chaque page Web est dans le même format.

Ainsi, lorsque vous recevez une réponse d'un site Web utilisant des requêtes, examinez le code HTML/texte, car vous pourriez trouver le code javascripts JSON dans le pied de page, prêt à être analysé.

2
Daniel Butler