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之yield表达式学习
Sep 02 Python
python语言使用技巧分享
May 31 Python
Python中几种导入模块的方式总结
Apr 27 Python
python3中的md5加密实例
May 29 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
python调用百度语音识别api
Aug 30 Python
PyQt5根据控件Id获取控件对象的方法
Jun 25 Python
Python调用百度根据经纬度查询地址的示例代码
Jul 07 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
Aug 04 Python
PyTorch 普通卷积和空洞卷积实例
Jan 07 Python
python获取依赖包和安装依赖包教程
Feb 13 Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 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
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
php学习笔记(三)操作符与控制结构
2011/08/06 PHP
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
js中利用tagname和id获取元素的方法
2016/01/03 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
2016/09/04 Javascript
Vue 过渡(动画)transition组件案例详解
2017/01/22 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
[49:11]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.20
2020/12/23 DOTA
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
基于Python代码编辑器的选用(详解)
2017/09/13 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
python_opencv用线段画封闭矩形的实例
2018/12/05 Python
Python上下文管理器全实例详解
2019/11/12 Python
python的Jenkins接口调用方式
2020/05/12 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
.NET面试问题集
2015/12/08 面试题
旅游安全协议书
2014/04/21 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
政风行风评议工作总结
2014/10/21 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
中秋节寄语2015
2015/03/24 职场文书
校园广播站开场白
2015/06/01 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
JavaScript实现简单计时器
2021/06/22 Javascript
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis