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 BeautifulSoup使用方法详解
Nov 21 Python
Python松散正则表达式用法分析
Apr 29 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
Jun 07 Python
Python3中的json模块使用详解
May 05 Python
解决pandas read_csv 读取中文列标题文件报错的问题
Jun 15 Python
Python中collections模块的基本使用教程
Dec 07 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
May 24 Python
Python2与Python3关于字符串编码处理的差别总结
Sep 07 Python
Python列表元素删除和remove()方法详解
Jan 04 Python
解决pytorch 数据类型报错的问题
Mar 03 Python
Python 语言实现六大查找算法
Jun 30 Python
pandas中pd.groupby()的用法详解
Jun 16 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&&mysql)一
2006/10/09 PHP
php循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
php 猴子摘桃的算法
2017/06/20 PHP
javascript css float属性的特殊写法
2008/11/13 Javascript
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
解析URI与URL之间的区别与联系
2013/11/22 Javascript
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
JS+CSS实现的经典tab选项卡效果代码
2015/09/16 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
python 实现堆排序算法代码
2012/06/05 Python
用Python输出一个杨辉三角的例子
2014/06/13 Python
深入浅析python 中的匿名函数
2018/05/21 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
Python内置数据类型list各方法的性能测试过程解析
2020/01/07 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
职业生涯规划怎么写
2013/12/29 职场文书
职工运动会邀请函
2014/01/19 职场文书
小学运动会表扬稿
2014/01/19 职场文书
保护环境倡议书
2014/04/14 职场文书
2014年加油站工作总结
2014/12/04 职场文书
六一活动主持词
2015/06/30 职场文书