>  기사  >  백엔드 개발  >  웹페이지 트래픽 도구를 만들기 위한 Python 코드 예제

웹페이지 트래픽 도구를 만들기 위한 Python 코드 예제

Y2J
Y2J원래의
2017-05-02 15:47:552603검색

이 글에서는 웹 페이지 트래픽을 처리할 수 있는 Python을 사용하여 만든 작은 도구를 공유합니다. 자세한 코드도 첨부되어 있습니다. 도움이 필요한 친구들은 참고할 수 있습니다

준비하세요

필요 환경:

Python3

시작

먼저 간단한 버전을 직접 구현 위 코드:

import urllib.request
import urllib.error
#创建get方法
def get(url):
 code=urllib.request.urlopen(url).code
 return code
if __name__ == '__main__':
#设置一些基本属性
 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 = {'User-Agent':user_agent}
 req = urllib.request.Request(url, headers=headers)
 #记录次数
 i = 1
 while 1: 
   code = get(url)
   print('访问:'+str(code))
   i = i+1

는 단순하고 투박하며 IP는 그대로 유지됩니다. 아래에서 프록시를 추가해 보겠습니다. function

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)
메인 메소드 수정:

if __name__ == '__main__':
 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 = {'User-Agent':user_agent}
 req = urllib.request.Request(url, headers=headers)
 i = 1
 while 1:
   #添加参数
   code = get(url,proxies)
   print('第'+str(i)+'次代理访问:'+str(code))
   i = i+1

거의 동일하지만 버그가 있습니다. 페이지를 열 수 없거나 프록시가 실패하면 프로그램이 자동으로 종료됩니다. 다음으로 예외 처리 기능을 추가합니다

예외 처리

이메일 알림을 보내는 메일 메소드를 정의하세요

def mail(txt):
 _user = "你的账号"
 _pwd = "你的密码"
 _to = "收件账号"
 msg = MIMEText(txt, 'plain', 'utf-8')
 #标题
 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)
그런 다음 기본 메소드를 수정해 보겠습니다.

if __name__ == '__main__':
 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 = {'User-Agent':user_agent}
 req = urllib.request.Request(url, headers=headers)
 i = 1
 while 1:
   try:
     code = get(url,proxies)
     print('第'+str(i)+'次代理访问:'+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)

완료!

결론


코드 길이는 50줄에 불과하며 프로그램을 개선할 수 있습니다.

예: 에이전트 목록을 자동으로 가져오고, 추가 인터페이스를 확장하고 멀티스레딩 등을 확장합니다.


마지막으로 다른 친구의 작업을 공유하겠습니다.

import urllib2
import timeit
import thread 
import time
i = 0
mylock = thread.allocate_lock()
def test(no,r):
  global i
  url = 'http://blog.csdn.net'
  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)

테스트 후 스레드가 2개 이상인 경우 503 서버에서 에러가 발생하므로 스레드 2개가 딱 맞습니다

위 내용은 웹페이지 트래픽 도구를 만들기 위한 Python 코드 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.