python - requests get不到完整页面源码
巴扎黑
巴扎黑 2017-04-17 17:53:46
0
5
3353

使用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进行访问,访问成功就会返回
但是我获取到的页面源码不完整

巴扎黑
巴扎黑

répondre à tous(5)
巴扎黑

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.

  1. Ce contenu est-il disponible uniquement après connexion ?

Ty80

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 :

import requests

headers = {
        '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'
}
html = requests.get('http://www.xicidaili.com/nn/', headers=headers).text
print html
Ty80

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal