Maison  >  Article  >  développement back-end  >  Exemple de code Python pour créer un outil de trafic de pages Web

Exemple de code Python pour créer un outil de trafic de pages Web

Y2J
Y2Joriginal
2017-05-02 15:47:552603parcourir

Cet article partagera avec vous un petit outil réalisé à l'aide de Python qui permet de gérer le trafic des pages Web. Le code détaillé est également joint. Les amis dans le besoin peuvent s'y référer

Préparer

<.>Environnement requis :

Python3


Démarrer

Implanter d'abord une version simple, directement Le code ci-dessus :

import urllib.request
import urllib.error
#创建get方法
def get(url):
 code=urllib.request.urlopen(url).code
 return code
if __name__ == &#39;__main__&#39;:
#设置一些基本属性
 url = "http://shua.jb51.net"
 user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36"
 headers = {&#39;User-Agent&#39;:user_agent}
 req = urllib.request.Request(url, headers=headers)
 #记录次数
 i = 1
 while 1: 
   code = get(url)
   print(&#39;访问:&#39;+str(code))
   i = i+1
est simple et grossier. Il ne fait qu'effleurer le PV et l'IP reste inchangé. Il est facile d'être découvert par les moteurs de recherche


. Ajouter une fonction proxy

Ajoutez le code suivant à la méthode get :

random_proxy = random.choice(proxies)
proxy_support = urllib.request.ProxyHandler({"http":random_proxy})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)
Modifiez la méthode principale :

if __name__ == &#39;__main__&#39;:
 url = "http://shua.jb51.net"
 #添加代理列表,可以自行去百度获取
 proxies = ["124.88.67.22:80","124.88.67.82:80","124.88.67.81:80","124.88.67.31:80","124.88.67.19:80","58.23.16.240:80"]
 user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36"
 headers = {&#39;User-Agent&#39;:user_agent}
 req = urllib.request.Request(url, headers=headers)
 i = 1
 while 1:
   #添加参数
   code = get(url,proxies)
   print(&#39;第&#39;+str(i)+&#39;次代理访问:&#39;+str(code))
   i = i+1
C'est presque pareil, mais il y a un bug. Si la page ne peut pas être ouverte ou si l'agent échoue, le programme se terminera automatiquement. Ensuite, nous ajoutons la fonction de gestion des exceptions


Gestion des exceptions .

Définissez la méthode mail avec Envoyer un email de rappel

def mail(txt):
 _user = "你的账号"
 _pwd = "你的密码"
 _to = "收件账号"
 msg = MIMEText(txt, &#39;plain&#39;, &#39;utf-8&#39;)
 #标题
 msg["Subject"] = "代理失效!"
 msg["From"] = _user
 msg["To"] = _to

 try:
   #这里我用的qq邮箱
   s = smtplib.SMTP_SSL("smtp.qq.com", 465)
   s.login(_user, _pwd)
   s.sendmail(_user, _to, msg.as_string())
   s.quit()
   print("Success!")

 except smtplib.SMTPException as e:
   print("Falied,%s" % e)
Ensuite on modifie la méthode principale :

if __name__ == &#39;__main__&#39;:
 url = "http://shua.jb51.net"
 proxies = ["124.88.67.22:80","124.88.67.82:80","124.88.67.81:80","124.88.67.31:80","124.88.67.19:80","58.23.16.240:80"]
 user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36"
 headers = {&#39;User-Agent&#39;:user_agent}
 req = urllib.request.Request(url, headers=headers)
 i = 1
 while 1:
   try:
     code = get(url,proxies)
     print(&#39;第&#39;+str(i)+&#39;次代理访问:&#39;+str(code))
     i = i+1
   except urllib.error.HTTPError as e:
     print(e.code)
      #添加mail方法
     mail(e.code)
   except urllib.error.URLError as err:
     print(err.reason)
      #添加mail方法
     mail(err.reason)
Terminé !


Conclusion

Le code ne fait que 50 lignes, et le programme peut être amélioré :


Par exemple : obtenir automatiquement la liste des agents, ajouter un interface, et développez-la Multi-threading, etc.

Enfin, je partagerai avec vous le travail d'un autre ami

import urllib2
import timeit
import thread 
import time
i = 0
mylock = thread.allocate_lock()
def test(no,r):
  global i
  url = &#39;http://blog.csdn.net&#39;
  for j in range(1,r):
    req=urllib2.Request(url) 
    req.add_header("User-Agent","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)") 
    file = urllib2.urlopen(req)
    print file.getcode();
    mylock.acquire()
    i+=1
    mylock.release()  
    print i;
  thread.exit_thread()

def fast():
    thread.start_new_thread(test,(1,50))
    thread.start_new_thread(test,(2,50)) 

fast()
time.sleep(15)
Après test, s'il y a plus de deux threads, un Une erreur 503 se produira sur le serveur, donc 2 threads Parfait

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn