python 增加csdn访问量升级

news/2024/11/28 20:53:31/

主程序

#!/usr/bin/python
# -*- coding:utf-8 -*-
import urllib.request, http.cookiejar, re
import time
import threading, sys
# tools是我的自定义工具类
import tools
import socket'''
模拟访问博客增加访问量
'''
socket.setdefaulttimeout(1.0)
visitnum = 2
if len(sys.argv) > 1:visitnum = sys.argv[1]
visitnum = int(visitnum)class Csdn(threading.Thread):'csdn增加访问量'contents = {}headers = [('host', 'blog.csdn.net'),('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'),]domain = 'http://blog.csdn.net'url = 'http://blog.csdn.net/%s/article/list/%s'def __init__(self, username, page, times):threading.Thread.__init__(self)self.username = usernameself.createOpener()self.page = pageself.times = times@staticmethoddef getListPages(username,page=1,count=1):'获取总页数'key = 'page_' + str(page)if page==1:Csdn.headers.append(('Referer', 'http://blog.csdn.net/' + username))cookie = http.cookiejar.CookieJar()cookieProc = urllib.request.HTTPCookieProcessor(cookie)opener = urllib.request.build_opener(cookieProc)opener.addheaders = Csdn.headersurl = Csdn.url % (username, page)try:response = opener.open(url)except Exception as e:if count>page:Csdn.getListPages(username, page + 1, count)else:raise Exception('出错了')Csdn.contents[key] = contents = response.read().decode('utf-8', 'ignore')pattern = r'<div id="papelist" class="pagelist">([\s\S]*?)共(\d+)页'match = re.search(pattern, contents)pages = int(match.group(2))if pages>page:Csdn.getListPages(username,page+1,pages)return pagesdef createOpener(self):cookie = http.cookiejar.CookieJar()cookieProc = urllib.request.HTTPCookieProcessor(cookie)opener = urllib.request.build_opener(cookieProc)opener.addheaders = Csdn.headersself.opener = openerdef visitUrl(self):'访问列表页获取内容'key = 'page_' + str(self.page)if key in Csdn.contents:print('--------%s exists' % key)self.contents = Csdn.contents[key]else:opener = self.openerurl = Csdn.url % (self.username, self.page)try:response = opener.open(url)self.contents = contents = response.read().decode('utf-8', 'ignore')except Exception as e:print("访问 %s 出错 " % url)returnCsdn.contents[key] = contentsself.addVisitNum()def addVisitNum(self):opener = self.openercontents = self.contentsdivPattern = r'<div id="article_list" ([\s\S]*)<div id="papelist" class="pagelist">'ulMatch = re.search(divPattern, contents)divText = ulMatch.group(1)smallPattern = r'<div class="list_item article_item">([\s\S]*?)<span class="link_title"><a href="(.*?)">([\s\S]*?)</a></span>([\s\S]*?)阅读</a>\((\d+)\)'match = re.findall(smallPattern, divText)for i in match:list = {'url': Csdn.domain + i[1], 'name': i[2].strip(), 'num': i[4]}try:opener.open(list['url'])except Exception as e:print("当前第%s次访问,访问出错,url:%s" % (self.times, list['url']))continueprint("当前第%s次访问,第%s页,url:%s" % (self.times, self.page, list['url']))def run(self):'线程主方法'self.visitUrl()class MainCsdn(threading.Thread):def __init__(self, username, times, pages):threading.Thread.__init__(self)self.username = usernameself.times = timesself.pages = pagesdef run(self):pages = self.pagesusername = self.usernamethreads = []for page in range(1, pages + 1):thread = Csdn(username, page, times=self.times)thread.start()threads.append(thread)# 等待所有线程完成for t in threads:t.join()print(self.times, " 退出第%s次执行任务" % self.times)@tools.runTime
def main():'主方法'# csdn昵称username = 'csdn昵称'pages = Csdn.getListPages(username,1,1)threads = []# startThread = MainCsdn(username=username, times=0, pages=pages)# startThread.start()# startThread.join()for i in range(1, visitnum + 1):thread = MainCsdn(username=username, times=i, pages=pages)thread.start()threads.append(thread)# 等待所有线程完成for t in threads:t.join()print("退出主线程")if __name__ == '__main__':main()



tools.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
import time'''
自定义工具方法,tools.py
'''def runTime(func):'记录程序运行时间'def newFunc(*args, **kwargs):start = time.clock()res = func(*args, **kwargs)end = time.clock()print("read: %f s" % (end - start))return resreturn newFuncdef log(content, file='test.log', type=1):if type == 1:f = open(file, 'a+', encoding='utf-8')else:f = open(file, 'w+', encoding='utf-8')content=str(content)f.write(content)




http://www.ppmy.cn/news/215679.html

相关文章

phpstudy升级apache

目前windows下的phpstudy的最新版本是8.1.0.6&#xff0c;其自带的apache版本是2.4.39。 经过绿盟的安全扫描&#xff0c;爆出近10个漏洞。 怎么修复漏洞呢&#xff1f; 一种方法是下载源码重新编译&#xff0c;这个比较麻烦。 下载最新版的apache可执行文件替换是最好的了。…

简述Synchronized以及锁升级

目录 1、Synchronized锁2、锁升级 1、Synchronized锁 ​ 通过Synchronized实现同步机制&#xff0c;属于一种悲观锁&#xff0c;在操作数据时&#xff0c;判断该对象是否被锁定&#xff0c;如果被锁定则进入阻塞状态直到被占用的线程释放&#xff0c;如果没有被锁或者当前线程…

Gitlab升级(12.2.1到14.6.4)

背景介绍那些乱七八糟的就跳过吧&#xff0c;直接上干货 一、准备 1.1&#xff1a;确定安装方式 开始纠结于到底是rpm还是yum&#xff0c;后来知道yum相当于对rpm进行了一系列的加壳&#xff0c;目的是解决rpm的依赖问题。那么就果断选择yum方式即可。 当前操作系统环境为c…

将http网站升级为https网站的方法指南

将http网站升级为https网站的必要条件就是申请SSL证书&#xff0c;成功申请SSL证书就可以将http网站升级为https网站&#xff0c;具体操作教程如下&#xff1a; 一、获取证书 升级到HTTPS协议的第一步&#xff0c;就是要获得一张证书&#xff0c;证书是一个二进制文件&#x…

【MySQL】MySQL的常用升级方法

升级方式 1&#xff09; 小版本升级 使用mysql_upgrade升级不可跳级&#xff0c;从5.1升级到5.6&#xff0c;需要先升级到5.5&#xff1b;这种适合小版本升级。 MySQL升级本质上是对数据字典的升级&#xff0c;数据字典有&#xff1a;mysql、information_schema、performance_s…

Ubuntu 从16.04升级到18.04后,samba无法访问

Ubuntu 从16.04升级到18.04后&#xff0c;samba无法访问 问题1&#xff1a;在LinuX下面访问&#xff0c;在WINDOWS 7下面不能访问&#xff0c;提示用户名或密码错误 。 在[global] 下面&#xff0c;添加 ntlm auth yes 这一句语句&#xff0c;主要是因为&#xff0c;Ubuntu升…

IIS 部署.NET网站无法访问解决办法

1、应用程序池 - 基本设置 - 选择 .NET 版本、托管管道模式“经典” 2、高级设置 - 启用32位应用程序 True 、托管管道模式 “Classic” 3、MIME类型没有问题 也可以在config文件里添加&#xff0c;如&#xff1a; 在“<system.webServer>”下添加&#xff0c; <stati…

网站升级https访问,webscoket升级wss问题

前段时间&#xff0c;网站访问由http变更为https&#xff0c;但是由于webscoket功能受到影响&#xff0c;报错如下&#xff1a; 跟前端沟通解决方式问题&#xff0c;前端回复说很麻烦&#xff0c;暂时不要做了。 今天突发奇想&#xff0c;我是不是可以在nginx中修改配置&#…