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类的专用方法实例分析
Jan 09 Python
python动态参数用法实例分析
May 25 Python
python中print的不换行即时输出的快速解决方法
Jul 20 Python
Python连接Mssql基础教程之Python库pymssql
Sep 16 Python
详解Python发送email的三种方式
Oct 18 Python
Python 利用高德地图api实现经纬度与地址的批量转换
Aug 14 Python
Python如何省略括号方法详解
Mar 21 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
Apr 24 Python
pandas参数设置的实用小技巧
Aug 23 Python
python 用struct模块解决黏包问题
Nov 07 Python
python opencv旋转图片的使用方法
Jun 04 Python
python如何为list实现find方法
May 30 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 IF ELSE简化/三元一次式的使用
2011/08/22 PHP
php 团购折扣计算公式
2011/11/24 PHP
smarty简单分页的实现方法
2014/10/27 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
JavaScript 继承详解(一)
2009/07/13 Javascript
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
javascript常用方法汇总
2014/12/02 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
JavaScript继承模式粗探
2016/01/12 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
pymssql ntext字段调用问题解决方法
2008/12/17 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
2015/12/31 Python
python读取文本绘制动态速度曲线
2018/06/21 Python
Numpy中的mask的使用
2018/07/21 Python
Python requests模块实例用法
2019/02/11 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
scrapy头部修改的方法详解
2020/12/06 Python
英国综合网上购物商城:The Hut
2018/07/03 全球购物
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
妇科医生自荐信
2013/11/05 职场文书
无犯罪记录证明范本
2014/09/15 职场文书
个人投资合作协议书
2014/10/12 职场文书
部队2014年终工作总结
2014/11/27 职场文书
三好学生个人总结
2015/02/15 职场文书
业务员岗位职责范本
2015/04/03 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python