使用requests进行get只获取到了一部分html源码,下面是我的代码
def get_url(self,url=None,proxies=None): header = { 'User-Agent' : 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0', 'Content-Type': 'application/x-www-form-urlencoded', 'Connection' : 'Keep-Alive', 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' } for prox in proxies: try: r=requests.get(url,proxies=prox,headers=header) if r.status_code!=200: continue else: print "使用{0}连接成功>>".format(prox) return r.content except Exception, e: return None
proxies参数是一个代理列表,这段代码会尝试使用proxies进行访问,访问成功就会返回
但是我获取到的页面源码不完整
Il y a plusieurs raisons
1. Peut-être que certains contenus sont chargés via ajax.
Par conséquent, le contenu complet du profil ne peut pas être obtenu via request.get
Il est recommandé d'utiliser des outils tels que Firebug pour déterminer si c'est la raison.
Ce contenu est-il disponible uniquement après connexion ?
Mon code peut récupérer tout le contenu de la page, mais il n'utilise pas le paramètre proxy des requêtes.
Essayez de voir si vous pouvez obtenir l'intégralité du contenu sans faire appel à un agent ?
Mon code :
J'ai attrapé un Ubuntuer... et j'ai même installé le thème... Je viens de passer par là...
La réponse au 1er étage est très claire. Il faudrait que la page web renvoyée soit chargée de manière asynchrone. Il est recommandé d'utiliser fiddler pour capturer le paquet pour voir s'il y a une requête asynchrone !
Laissez-moi vous expliquer comment résoudre les problèmes. [Les vieux conducteurs ne se plaignent pas]
1. Utilisez l'outil réseau de Chrome pour capturer les paquets (d'autres outils sont également acceptables) et comparez la réponse avec les résultats que vous avez capturés. S'ils sont identiques, cela signifie que cette page doit être rendue via js.
2. Si les résultats de l'étape 1 sont incohérents, considérez l'impact des autres champs dans l'en-tête. En général, les cookies affectent les droits d'accès, et l'agent utilisateur affecte la structure et le contenu du dom. Vérifiez principalement ces deux points en premier. (Il peut y avoir des en-têtes étranges qui nécessitent un traitement spécial)
3. Ouvrez une demande de test de proxy pour résoudre des problèmes tels que le blocage de l'accès à l'IP
4. S'il est déterminé qu'il s'agit d'une page rendue par js. Il existe deux solutions. L'une consiste à capturer l'interface API (nécessitant une grande capacité à découvrir les règles). Pour la méthode de capture de paquets, reportez-vous à 1. La seconde consiste à effectuer directement le rendu js (opérations associées) sur le serveur pour obtenir le résultat final du rendu de la page.