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数组条件过滤filter函数使用示例
Jul 22 Python
Python实现Const详解
Jan 27 Python
在Python的循环体中使用else语句的方法
Mar 30 Python
Python类属性与实例属性用法分析
May 09 Python
python opencv3实现人脸识别(windows)
May 25 Python
python3 http提交json参数并获取返回值的方法
Dec 19 Python
Python设计模式之模板方法模式实例详解
Jan 17 Python
python 杀死自身进程的实现方法
Jul 01 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 Python
Python实现动态循环输出文字功能
May 07 Python
Python Django项目和应用的创建详解
Nov 27 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
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
ThinkPHP文件缓存类代码分享
2015/04/22 PHP
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
React实现todolist功能
2020/12/28 Javascript
[01:23:45]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第一场 1月22日
2021/03/11 DOTA
python的re模块应用实例
2014/09/26 Python
Python re模块介绍
2014/11/30 Python
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
Python 基于Twisted框架的文件夹网络传输源码
2016/08/28 Python
Python制作钉钉加密/解密工具
2016/12/07 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Python时间和字符串转换操作实例分析
2019/03/16 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
旷课检讨书1000字
2014/02/14 职场文书
安全生产汇报材料
2014/02/17 职场文书
优秀乡村医生事迹材料
2014/05/28 职场文书
贷款委托书怎么写
2014/08/02 职场文书
体育教师研修感悟
2015/11/18 职场文书
初一英语教学反思
2016/02/15 职场文书
《所见》教学反思
2016/02/23 职场文书