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程序的方法
Apr 21 Python
Python中还原JavaScript的escape函数编码后字符串的方法
Aug 22 Python
python用Pygal如何生成漂亮的SVG图像详解
Feb 10 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
Aug 02 Python
python 接收处理外带的参数方法
Dec 03 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
Jul 22 Python
使用python实现unix2dos和dos2unix命令的例子
Aug 13 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
详解django中Template语言
Feb 22 Python
Python实现井字棋小游戏
Mar 09 Python
在python中修改.properties文件的操作
Apr 08 Python
Python实战之用tkinter库做一个鼠标模拟点击器
Apr 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
BBS(php & mysql)完整版(四)
2006/10/09 PHP
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
微信扫描二维码登录网站代码示例
2013/12/30 PHP
php求今天、昨天、明天时间戳的简单实现方法
2016/07/28 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
2011/07/22 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
2018/03/05 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
[00:26]TI7不朽珍藏III——冥界亚龙不朽展示
2017/07/15 DOTA
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
在Python的Django框架下使用django-tagging的教程
2015/05/30 Python
Python写入数据到MP3文件中的方法
2015/07/10 Python
python3.5仿微软计算器程序
2020/03/30 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
Python的地形三维可视化Matplotlib和gdal使用实例
2017/12/09 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
详解Python中的动态属性和特性
2018/04/07 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
浅谈python之高阶函数和匿名函数
2019/03/21 Python
Numpy的简单用法小结
2019/08/28 Python
Python While循环语句实例演示及原理解析
2020/01/03 Python
python求解汉诺塔游戏
2020/07/09 Python
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
乡镇网格化管理实施方案
2014/03/23 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript
前端实现滑动按钮AJAX与后端交互的示例代码
2022/02/24 Javascript
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL