前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 刷网页访问量

Python 刷网页访问量

作者头像
bear_fish
发布2018-09-20 16:02:36
3.3K0
发布2018-09-20 16:02:36
举报

额……有这种想法,感觉自己坏坏哒……其实,自己刚开始写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 plaincopyprint?

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

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

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

简单列一下思路:

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

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

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

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

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

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

[python] view plaincopyprint?

  1. __author__ = 'MrChen'
  2. import urllib.request  
  3. import re  
  4. import time  
  5. from bs4 import BeautifulSoup  
  6. p = re.compile('/calling_wisdom/article/details/........')  
  7. #自己的博客主页
  8. url = "http://blog.csdn.net/calling_wisdom"
  9. #使用build_opener()是为了让python程序模仿浏览器进行访问
  10. opener = urllib.request.build_opener()  
  11. opener.addheaders = [('User-agent', 'Mozilla/5.0')]  
  12. html = opener.open(url).read().decode('utf-8')  
  13. allfinds = p.findall(html)  
  14. #print(allfinds)
  15. urlBase = "http://blog.csdn.net"#需要将网址合并的部分
  16. #页面中的网址有重复的,需要使用set进行去重复
  17. mypages = list(set(allfinds))  
  18. for i in range(len(mypages)):  
  19.     mypages[i] = urlBase+mypages[i]  
  20. print('要刷的网页有:')  
  21. for index , page in enumerate(mypages) :  
  22. print(str(index), page)  
  23. #设置每个网页要刷的次数
  24. brushNum = 200
  25. #所有的页面都刷
  26. print('下面开始刷了哦:')  
  27. for index , page in enumerate(mypages) :  
  28. for j in range(brushNum):  
  29. try :  
  30.             pageContent = opener.open(page).read().decode('utf-8')  
  31. #使用BeautifulSoup解析每篇博客的标题
  32.             soup = BeautifulSoup(pageContent)  
  33.             blogTitle = str(soup.title.string)  
  34.             blogTitle = blogTitle[0:blogTitle.find('-')]  
  35. print(str(j) , blogTitle)   
  36. except urllib.error.HTTPError:  
  37. print('urllib.error.HTTPError')  
  38.             time.sleep(3)#出现错误,停几秒先
  39. except urllib.error.URLError:  
  40. print('urllib.error.URLError')  
  41.             time.sleep(3)#出现错误,停几秒先
  42.         time.sleep(0.5)#正常停顿,以免服务器拒绝访问
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年01月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档