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?
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'
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]>
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)
python script.py "http://www.ichangtou.com/#company:data_000008.html"
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é.