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更新列表的方法
Jul 28 Python
Python探索之Metaclass初步了解
Oct 28 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
Python网络编程之TCP套接字简单用法示例
Apr 09 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
Jun 28 Python
Python json模块dumps、loads操作示例
Sep 06 Python
利用python循环创建多个文件的方法
Oct 25 Python
Python多线程threading模块用法实例分析
May 22 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
Jun 03 Python
简单了解python数组的基本操作
Nov 26 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
Dec 28 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页面运行时间的函数介绍
2013/07/01 PHP
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
PHP+jQuery 注册模块开发详解
2014/10/14 PHP
分享php分页的功能模块
2015/06/16 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
JavaScript EasyPager 分页函数
2011/05/25 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
JavaScript操作DOM元素的childNodes和children区别
2015/04/01 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
2016/04/26 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
layui--select使用以及下拉框实现键盘选择的例子
2019/09/24 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
python的id()函数解密过程
2012/12/25 Python
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
Python字符串的常见操作实例小结
2019/04/08 Python
Python turtle画图库&&画姓名实例
2020/01/19 Python
python3安装OCR识别库tesserocr过程图解
2020/04/02 Python
Python中and和or如何使用
2020/05/28 Python
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
酒店执行总经理岗位职责
2013/12/15 职场文书
开学典礼决心书
2014/03/11 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书
Golang中interface{}转为数组的操作
2021/04/30 Golang
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL
CSS3 Tab动画实例之背景切换动态效果
2021/08/23 HTML / CSS
python pygame 开发五子棋双人对弈
2022/05/02 Python