


[Python] Web Crawler (5)?: détails d'utilisation de urllib2 et des techniques d'exploration de sites Web
Jan 21, 2017 pm 02:04 PMJ'ai mentionné une introduction simple à urllib2 plus t?t, et voici quelques détails sur la fa?on d'utiliser urllib2.
1. Paramètres du proxy
urllib2 utilisera la variable d'environnement http_proxy pour définir le proxy HTTP par défaut.
Si vous souhaitez contr?ler explicitement le proxy dans votre programme sans être affecté par les variables d'environnement, vous pouvez utiliser un proxy.
Créez un nouveau test14 pour implémenter une démo de proxy simple?:
import urllib2 enable_proxy = True proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'}) null_proxy_handler = urllib2.ProxyHandler({}) if enable_proxy: opener = urllib2.build_opener(proxy_handler) else: opener = urllib2.build_opener(null_proxy_handler) urllib2.install_opener(opener)
Un détail à noter ici est que l'utilisation de urllib2.install_opener() définira l'ouvreur global de urllib2.
Ceci sera très pratique pour une utilisation ultérieure, mais il ne peut pas fournir un contr?le plus détaillé, comme vouloir utiliser deux paramètres proxy différents dans le programme.
Une meilleure approche consiste à ne pas utiliser install_opener pour modifier les paramètres globaux, mais à appeler directement la méthode open de l'ouvreur au lieu de la méthode globale urlopen.
2. Paramètre de délai d'attente
Dans les anciennes versions de Python (avant Python 2.6), l'API de urllib2 n'expose pas le paramètre de délai d'attente. Pour définir la valeur du délai d'attente, vous ne pouvez modifier que la valeur globale. Délai d'expiration de la valeur Socket.
import urllib2 import socket socket.setdefaulttimeout(10) # 10 秒鐘后超時 urllib2.socket.setdefaulttimeout(10) # 另一種方式
Après Python 2.6, le délai d'attente peut être défini directement via le paramètre timeout de urllib2.urlopen().
import urllib2 response = urllib2.urlopen('http://www.google.com', timeout=10)
3. Ajouter un en-tête spécifique à la requête HTTP
Pour ajouter un en-tête, vous devez utiliser l'objet Request :
import urllib2 request = urllib2.Request('http://www.baidu.com/') request.add_header('User-Agent', 'fake-client') response = urllib2.urlopen(request) print response.read()
Pour certains en-têtes Portez une attention particulière au fait que le serveur vérifiera ces en-têtes
User-Agent : Certains serveurs ou Proxy utiliseront cette valeur pour déterminer si la requête est faite par le navigateur
Content-Type : Lors de l'utilisation l'interface REST, le serveur vérifiera. Cette valeur est utilisée pour déterminer comment le contenu du corps HTTP doit être analysé. Les valeurs courantes sont?:
application/xml?: utilisez
application/json lors de l'appel de XML RPC, tel que RESTful/SOAP?: utilisez
application/x-www-form-urlencoded lors de l'appel de JSON RPC?: utilisez
lorsque le navigateur soumet un formulaire Web. Lors de l'utilisation du service RESTful ou SOAP fourni par le serveur, un paramètre Content-Type incorrect entra?nera le refus du service par le serveur
?. >
urllib2 redirigera automatiquement les codes de retour HTTP 3XX par défaut, sans configuration manuelle. Pour détecter si une action de redirection a eu lieu, il suffit de vérifier si l'URL de la Réponse et l'URL de la Requête sont cohérentes.
import urllib2 my_url = 'http://www.google.cn' response = urllib2.urlopen(my_url) redirected = response.geturl() == my_url print redirected my_url = 'http://rrurl.cn/b1UZuP' response = urllib2.urlopen(my_url) redirected = response.geturl() == my_url print redirectedSi vous ne souhaitez pas rediriger automatiquement, en plus d'utiliser la bibliothèque httplib de niveau inférieur, vous pouvez également personnaliser la classe HTTPRedirectHandler.
import urllib2 class RedirectHandler(urllib2.HTTPRedirectHandler): def http_error_301(self, req, fp, code, msg, headers): print "301" pass def http_error_302(self, req, fp, code, msg, headers): print "303" pass opener = urllib2.build_opener(RedirectHandler) opener.open('http://rrurl.cn/b1UZuP')5. Cookieurllib2 gère également les cookies automatiquement. Si vous avez besoin d'obtenir la valeur d'un élément de cookie, vous pouvez le faire?:
import urllib2 import cookielib cookie = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) response = opener.open('http://www.baidu.com') for item in cookie: print 'Name = '+item.name print 'Value = '+item.valueAprès l'exécution, la valeur du cookie pour visiter Baidu sera affichée?:
import urllib2 request = urllib2.Request(uri, data=data) request.get_method = lambda: 'PUT' # or 'DELETE' response = urllib2.urlopen(request)7 Obtenez le code de retour HTTP Pour 200 OK, tant que vous le pouvez. récupérez le code de retour HTTP en utilisant la méthode getcode() de l'objet de réponse renvoyé par urlopen. Mais pour les autres codes retour, urlopen lèvera une exception. à ce stade, il est nécessaire de vérifier l'attribut de code de l'objet d'exception?:
import urllib2 try: response = urllib2.urlopen('http://bbs.csdn.net/why') except urllib2.HTTPError, e: print e.code8. Journal de débogageLorsque vous utilisez urllib2, vous pouvez ouvrir le journal de débogage via la méthode suivante. , afin que vous puissiez envoyer et recevoir des paquets. Le contenu sera imprimé sur l'écran, ce qui est pratique pour le débogage. Parfois, vous pouvez enregistrer le travail de capture de paquets
import urllib2 httpHandler = urllib2.HTTPHandler(debuglevel=1) httpsHandler = urllib2.HTTPSHandler(debuglevel=1) opener = urllib2.build_opener(httpHandler, httpsHandler) urllib2.install_opener(opener) response = urllib2.urlopen('http://www.google.com')De cette fa?on, vous pouvez voir le. contenu du paquet de données transmis :
Par exemple, j'utilise généralement le plug-in Firefox httpfox pour voir quels paquets j'ai envoyés.
En prenant verycd comme exemple, recherchez d'abord la requête POST que vous avez envoyée et les éléments du formulaire POST.
Vous pouvez voir que pour verycd, vous devez renseigner le nom d'utilisateur, le mot de passe, continueURI, fk, login_submit Parmi eux, fk est généré de manière aléatoire (en fait, pas trop aléatoire, il semble qu'il soit généré en encodant simplement l'heure. ). Il doit être obtenu à partir de la page Web, ce qui signifie que vous devez d'abord visiter la page Web et utiliser des outils tels que des expressions régulières pour intercepter l'élément fk dans les données renvoyées. Comme son nom l'indique, continueURI peut être écrit de manière informelle, tandis que login_submit est fixe, comme le montre le code source. Il y a aussi un nom d'utilisateur et un mot de passe, qui sont évidents?:
# -*- coding: utf-8 -*- import urllib import urllib2 postdata=urllib.urlencode({ 'username':'汪小光', 'password':'why888', 'continueURI':'http://www.verycd.com/', 'fk':'', 'login_submit':'登錄' }) req = urllib2.Request( url = 'http://secure.verycd.com/signin', data = postdata ) result = urllib2.urlopen(req) print result.read()10. Se déguiser en navigateur pour accéder
Certains sites Web sont dégo?tés par la visite des robots, ils rejettent donc les demandes des robots
à l'heure actuelle, nous devons nous déguiser en navigateur, ce qui peut être réalisé en modifiant l'en-tête dans le package http
#… headers = { 'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6' } req = urllib2.Request( url = 'http://secure.verycd.com/signin/*/http://www.verycd.com/', data = postdata, headers = headers ) #...11 Gérer "l'anti-hotlinking"
Certains sites l'ont fait-. appelé paramètres anti-hotlinking. En fait, pour parler franchement, c'est très simple
#... headers = { 'Referer':'http://www.cnbeta.com/articles' } #...
Par exemple, certains sites Web aiment lire le X-Forwarded-For dans l'en-tête pour voir leur véritable adresse IP. Vous pouvez directement modifier le X-Forwarde-For.
Ce qui précède est [Python] Web Crawler (5)?: détails d'utilisation de urllib2 et des techniques d'exploration de sites Web. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.miracleart.cn)?!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Utilisez le plot conjoint de Seaborn pour visualiser rapidement la relation et la distribution entre deux variables; 2. Le tracé de diffusion de base est implémenté par sn.jointplot (data = pointes, x = "total_bill", y = "Tip", kind = "dispers"), le centre est un tracé de dispersion et l'histogramme est affiché sur les c?tés supérieur et inférieur et droit; 3. Ajouter des lignes de régression et des informations de densité à un kind = "reg" et combiner marginal_kws pour définir le style de tracé de bord; 4. Lorsque le volume de données est important, il est recommandé d'utiliser "Hex"

Les listes de cha?nes peuvent être fusionnées avec la méthode join (), telles que '' .join (mots) pour obtenir "HelloworldFrompython"; 2. Les listes de nombres doivent être converties en cha?nes avec MAP (STR, nombres) ou [STR (x) Forxinnumbers] avant de rejoindre; 3. Toute liste de types peut être directement convertie en cha?nes avec des supports et des devis, adaptées au débogage; 4. Les formats personnalisés peuvent être implémentés par des expressions de générateur combinées avec join (), telles que '|' .join (f "[{item}]" ForIteminitems)

Installez PYODBC: utilisez la commande PiPInstallpyodbc pour installer la bibliothèque; 2. Connectez SQLServer: utilisez la cha?ne de connexion contenant le pilote, le serveur, la base de données, l'UID / PWD ou TrustEd_Connection via la méthode pyoDBC.Connect () et prendre en charge l'authentification SQL ou l'authentification Windows respectivement; 3. Vérifiez le pilote installé: exécutez pyodbc.Drivers () et filtrez le nom du pilote contenant ?SQLServer? pour vous assurer que le nom du pilote correct est utilisé tel que ?ODBCDriver17 pour SQLServer?; 4. Paramètres clés de la cha?ne de connexion

pandas.melt () est utilisé pour convertir les données de format larges en format long. La réponse consiste à définir de nouveaux noms de colonne en spécifiant id_vars conserver la colonne d'identification, Value_Vars Sélectionnez la colonne à fondre, var_name et valeur_name, 1.id_vars = 'name' signifie que la colonne de nom reste inchangée, 2.Value_vars = [Math ',' English ',' Science '. du nom de colonne d'origine, 4.value_name = 'score' définit le nouveau nom de colonne de la valeur d'origine et génère enfin trois colonnes, notamment le nom, le sujet et le score.

Définissez d'abord un formulaire ContactForm contenant le nom, la bo?te aux lettres et les champs de message; 2. De l'avis, la soumission du formulaire est traitée en jugeant la demande de poste, et après la vérification, nettoyée_data est obtenue et la réponse est retournée, sinon le formulaire vide sera rendu; 3. Dans le modèle, utilisez {{form.as_p}} pour rendre le champ et ajouter {% csrf_token%} pour empêcher les attaques CSRF; 4. Configurer le routage d'URL vers Point / Contact / vers la vue Contact_View; Utilisez Modelform pour associer directement le modèle pour obtenir un stockage de données. Djangoforms implémente le traitement intégré de la vérification des données, le rendu HTML et les invites d'erreur, qui convient au développement rapide des fonctions de forme s?re.

PythonCanBeoptimizedFormemory-Boundoperations AdreductoverHeadHroughGenerators, EfficientDatastructures et ManagingObjectliFetimes.first, useGeneratorsInSteadofListStoproceSlargedataseSeItematatime, EvitingLoadingEnteryToMeToMeMory.

L'introduction à l'arbitrage statistique L'arbitrage statistique est une méthode commerciale qui capture l'inadéquation des prix sur le marché financier basé sur des modèles mathématiques. Sa philosophie principale découle de la régression moyenne, c'est-à-dire que les prix des actifs peuvent s'écarter des tendances à long terme à court terme, mais reviendront éventuellement à leur moyenne historique. Les traders utilisent des méthodes statistiques pour analyser la corrélation entre les actifs et rechercher des portefeuilles qui changent généralement de manière synchrone. Lorsque la relation de prix de ces actifs est anormalement déviée, des opportunités d'arbitrage se présentent. Sur le marché des crypto-monnaies, l'arbitrage statistique est particulièrement répandu, principalement en raison de l'inefficacité et des fluctuations drastiques du marché lui-même. Contrairement aux marchés financiers traditionnels, les crypto-monnaies fonctionnent 24h / 24 et leurs prix sont très susceptibles de briser les nouvelles, les sentiments des médias sociaux et les améliorations technologiques. Cette fluctuation des prix constante crée fréquemment un biais de prix et fournit aux arbitrageurs un

Iter () est utilisé pour obtenir l'objet Iterator, et Next () est utilisé pour obtenir l'élément suivant; 1. Utilisez Iterator () pour convertir des objets itérables tels que les listes en itérateurs; 2. Appelez Next () pour obtenir des éléments un par un et déclenchez l'exception de l'arrêt lorsque les éléments sont épuisés; 3. Utilisez Suivant (iterator, par défaut) pour éviter les exceptions; 4. Les itérateurs personnalisés doivent implémenter les méthodes __iter __ () et __Next __ () pour contr?ler la logique d'itération; L'utilisation de valeurs par défaut est un moyen courant de parcourir la traversée et l'ensemble du mécanisme est concis et pratique.
