Python 刷网页访问量

时间:2022-04-05 23:51:15

额……有这种想法,感觉自己坏坏哒……其实,自己刚开始写CSDN博客,看到朋友们的博客访问量都达到几十万几百万了,而自己刚开始写,一星期过去了访问量才两位数,好拙计啊……说白了还是自己的虚荣心在作怪……尝试一下吧……

 

使用了python3的urllib模块,开始使用了简单的urllib.request.urlopen()函数,结果发现行不通,csdn设置了简单的检查选项,需要python模拟浏览器进行访问才行,简单的很,那就模仿一个好啦,使用urllib.request.build_opener()就可以进行模拟啦,添加一个访问头就可以啦

 

但是呢,访问太频繁有可能会造成服务器拒绝访问,那么就稍微等等好啦,使用time模块中的sleep()函数即可。还有一个小问题,当服务器拒绝的时候,python会当成错误,从而终止了程序,这样就不好玩了,一点都不自动化,解决这个问题也蛮简单,刚才看书才看到try…except…语法,这样把出现的错误都放到except语句里面不就OK了么,经过本人测试,一般会出现下面两个错误urllib.error.HTTPError和urllib.error.URLError,那这两个错误都弄到except里面就可以啦,哈哈

 

于是简单的刷一个页面的版本出现啦,代码如下:


[python]  view plain copy print ?
  1. __author__ = 'MrChen'  
  2.   
  3. import urllib.request  
  4. import time  
  5.   
  6. #使用build_opener()是为了让python程序模仿浏览器进行访问  
  7. opener = urllib.request.build_opener()  
  8. opener.addheaders = [('User-agent''Mozilla/5.0')]  
  9.   
  10. #专刷某个页面  
  11. print('开始刷了哦:')  
  12. tempUrl = 'http://blog.csdn.net/calling_wisdom/article/details/40900815'  
  13. for j in range(200):  
  14.     try :  
  15.         opener.open(tempUrl)  
  16.         print('%d %s' % (j , tempUrl))  
  17.     except urllib.error.HTTPError:  
  18.         print('urllib.error.HTTPError')  
  19.         time.sleep(1)  
  20.     except urllib.error.URLError:  
  21.         print('urllib.error.URLError')  
  22.         time.sleep(1)  
  23.     time.sleep(0.1)  

上面这个版本圆满完成了刷一个页面的任务,还蛮好用的,但是呢,如果我要把我所有的博客都刷个遍呢,一个一个地刷是不是太慢了呢,鄙人七八篇博客还勉强可以接受,但是如果以后七八十篇呢……想想就头疼,还是继续想办法吧

 

鉴于目前本人的所有博客都在博客主页目录的第一页中,所以直接查看博客目录,然后把每篇博客的网址都提取出来不久OK了么,嗯,说干就干

 

简单列一下思路:

1,  先抓取博客目录页的网址内容,然后使用re模块进行查找,找到每篇博客的地址(实际情况是这样的,里面的网址都是半截半截的,类似这样的/calling_wisdom/article/details/........,一会把前面的部分加上就可以了)

2,  把里面重复的网页过滤掉,这个也简单,使用set()就可以了

3,  把抓取到的网址合并成可以直接进行访问的网址

4,  使用一下刚学的BeautifulSoup解析网页的标题,这样就可以知道刷的是哪篇博客了(在这里继续夸一夸BeautifulSoup,超级好用,一下就把我想要的内容提取出来了)

5,  准备完毕,刷起来!每个页面给大爷刷200遍先!让爷装B让爷飞!

 

代码如下:(注释写的很到位了吧,不用再解释什么吧,最讨厌写代码没注释的)

[python]  view plain copy print ?
  1. __author__ = 'MrChen'  
  2.   
  3. import urllib.request  
  4. import re  
  5. import time  
  6. from bs4 import BeautifulSoup  
  7.   
  8. p = re.compile('/calling_wisdom/article/details/........')  
  9.   
  10. #自己的博客主页  
  11. url = "http://blog.csdn.net/calling_wisdom"   
  12.   
  13. #使用build_opener()是为了让python程序模仿浏览器进行访问  
  14. opener = urllib.request.build_opener()  
  15. opener.addheaders = [('User-agent''Mozilla/5.0')]  
  16.   
  17. html = opener.open(url).read().decode('utf-8')  
  18.   
  19. allfinds = p.findall(html)  
  20. #print(allfinds)  
  21.   
  22. urlBase = "http://blog.csdn.net"#需要将网址合并的部分  
  23. #页面中的网址有重复的,需要使用set进行去重复  
  24. mypages = list(set(allfinds))  
  25. for i in range(len(mypages)):  
  26.     mypages[i] = urlBase+mypages[i]  
  27.   
  28. print('要刷的网页有:')  
  29. for index , page in enumerate(mypages) :  
  30.     print(str(index), page)  
  31.   
  32. #设置每个网页要刷的次数  
  33. brushNum = 200  
  34.   
  35. #所有的页面都刷  
  36. print('下面开始刷了哦:')  
  37. for index , page in enumerate(mypages) :  
  38.     for j in range(brushNum):  
  39.         try :  
  40.             pageContent = opener.open(page).read().decode('utf-8')  
  41.             #使用BeautifulSoup解析每篇博客的标题  
  42.             soup = BeautifulSoup(pageContent)  
  43.             blogTitle = str(soup.title.string)  
  44.             blogTitle = blogTitle[0:blogTitle.find('-')]  
  45.             print(str(j) , blogTitle)   
  46.               
  47.         except urllib.error.HTTPError:  
  48.             print('urllib.error.HTTPError')  
  49.             time.sleep(3)#出现错误,停几秒先  
  50.               
  51.         except urllib.error.URLError:  
  52.             print('urllib.error.URLError')  
  53.             time.sleep(3)#出现错误,停几秒先  
  54.         time.sleep(0.5)#正常停顿,以免服务器拒绝访问