Python制作刷网页流量工具


Posted in Python onApril 23, 2017

准备

必须环境:

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.3water.com"
 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 没变,容易被搜索引擎发现,下面我们来改进一下

增加代理功能

给 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.3water.com"
 #添加代理列表,可以自行去百度获取
 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 方法 ,用来发邮件提醒

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.3water.com"
 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)

经测试,超过两个线程以上服务器就会出现503错误,所以2个线程刚好

Python 相关文章推荐
Python logging模块学习笔记
May 24 Python
使用Python简单的实现树莓派的WEB控制
Feb 18 Python
浅析Python中元祖、列表和字典的区别
Aug 17 Python
python中实现精确的浮点数运算详解
Nov 02 Python
用python处理图片之打开\显示\保存图像的方法
May 04 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
Jul 11 Python
django+echart数据动态显示的例子
Aug 12 Python
python 上下文管理器及自定义原理解析
Nov 19 Python
keras得到每层的系数方式
Jun 15 Python
django 将自带的数据库sqlite3改成mysql实例
Jul 09 Python
通过代码实例了解Python3编程技巧
Oct 13 Python
Python性能测试工具Locust安装及使用
Dec 01 Python
Python读取指定目录下指定后缀文件并保存为docx
Apr 23 #Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 #Python
python妙用之编码的转换详解
Apr 21 #Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
Apr 21 #Python
Python学习笔记之解析json的方法分析
Apr 21 #Python
Python正则抓取网易新闻的方法示例
Apr 21 #Python
Python中shape计算矩阵的方法示例
Apr 21 #Python
You might like
PHP完整的日历类(CLASS)
2006/11/27 PHP
很好用的PHP数据库类
2009/05/27 PHP
PHP高级对象构建 工厂模式的使用
2012/02/05 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
thinkphp自定义权限管理之名称判断方法
2017/04/01 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
jquery控制显示服务器生成的图片流
2015/08/04 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
python 生成不重复的随机数的代码
2011/05/15 Python
Python在Console下显示文本进度条的方法
2016/02/14 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
Python+threading模块对单个接口进行并发测试
2019/06/25 Python
Python3 读取Word文件方式
2020/02/13 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
HTML5中的autofocus(自动聚焦)属性介绍
2014/04/23 HTML / CSS
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
年会活动策划方案
2014/01/23 职场文书
干部现实表现材料
2014/02/13 职场文书
《颐和园》教学反思
2014/02/26 职场文书
羊脂球读书笔记
2015/06/30 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
MySQL 开窗函数
2022/02/15 MySQL