Python 實現刷網頁流量工具,並添加代理,報錯處理功能

我的博客:凌霄的博客dom

準備

  • 必須環境:

    • Python3ui

開始

  • 先實現一個簡單的版本,直接上代碼:搜索引擎

import urllib.request
import urllib.error
#建立get方法
def get(url):
    code=urllib.request.urlopen(url).code
    return code
if __name__ == '__main__':
  #設置一些基本屬性
    url = "http://lx.nextdev.cn"
    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

簡單粗暴,刷的只是 pv,ip 沒變,容易被搜索引擎發現,下面咱們來改進一下url

增長代理功能

  • 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)
  • 修改一下主方法:code

if __name__ == '__main__':
    url = "http://lx.nextdev.cn"
    #添加代理列表,能夠自行去百度獲取
    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

這樣差很少了,不過有個 bug ,若是頁面打不開了或者代理失效了,程序就自動結束了,接下來咱們添加異常處理功能索引

異常處理

  • 定義 mail 方法 ,用來發郵件提醒ip

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)
  • 而後咱們修改一下主方法:utf-8

if __name__ == '__main__':
    url = "http://lx.nextdev.cn"
    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 行,程序還能夠改進:
例如:代理列表自動獲取,添加界面get

歡迎評論

相關文章
相關標籤/搜索