python爬虫之csdn刷博客访问量

时间:2022-05-09 23:44:23

首先声明:刷博客可耻!!!我们通过博客记录技术之路上的点滴,写博客的目的是分享自己的经验,从而让看博客的人少走弯路或找到解决问题的方法。如果我们仅仅是为了访问量来写博客,那就侮辱了博客本身存在的意义!!

写本文的目的是:
1.通过实战进一步了解python各模块的使用,只看官方文档实在是无聊透顶;
2.通过实战慢慢了解爬虫的原理及使用,加深对网站优化及安全防范的理解;

原理

刷博客访问量就是不断访问你博客的文章。首先访问你的博客首页,获取你当前的页码并访问本页中每篇文档,然后通过对获取到的页面进行递增,并访问每个页码中的文章即可实现博客访问量的增长。
当然我们这只是最简单的方法,不同网站安全策略不一样,例如访问频率限制、ip的访问量等等,针对这些我们需要对我们的代码进行改变,在此就不详谈了。

实现

本文基于python2.7 ,基础模块的安装请参看python爬虫之模拟登陆csdn安装部分。

代码实现:

vim csdn_flush.py
#!/usr/bin/env python2.7
#-*- coding: utf-8 -*-

import time
import urllib
import urllib2
import cookielib
from bs4 import BeautifulSoup

#访问页面
def accessUrl(url,headers):
req = urllib2.Request(url, headers=headers)
try:
response = urllib2.urlopen(req)
except urllib2.HTTPError, e:
print e.code
except urllib2.URLError, e:
print e.reason
else:
html = response.read()
return html

#访问当前页的所有博客文章并返回当前页码
def accessArticle(data):
content = BeautifulSoup(data, "lxml")
#获取文章超链标签及当面页码标签
page = content.find_all(["strong","h3"] )
#从标签中获取当前页页码
page_num = page[-1].string
#从标签中获取文章超链
for i in page[0:-1]:
articleTitle = i.a.string
articleTemp = i.a.get("href")
articleUrl = "http://blog.csdn.net" + i.a.get("href")
print "access page " + page_num + " title: " + articleTitle
#访问当前页博文
accessUrl(articleUrl,headers)
time.sleep(2)
return page_num

if __name == '__main__':
url = "http://blog.csdn.net/yanggd1987"
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}

page_num = 0
while page_num < 9:
data = accessUrl(url,headers)
page_num = int(accessArticle(data))
NextPageUrl = "http://blog.csdn.net/yanggd1987/article/list/" + str(int(page_num)+1)
url = NextPageUrl

运行:

[root@test spider]# python2.7 csdn_flush.py 
access page 1 title: python爬虫之模拟登陆csdn
access page 1 title: haproxy实现tcp代理
access page 1 title: Mongodb主从复制
access page 1 title: nagios通过python监控zookeeper+activemq
access page 1 title: 将clvm的状态改成no-clustered
access page 1 title: pgpool复制和负载均衡
access page 1 title: activemq调优
access page 1 title: LAMP环境搭建
...........
access page 1 title: Elasticsearch全文检索
access page 2 title: metrics和graphite监控
access page 2 title: CoreOS部署及应用
...........

总结

1.不同网站页面列表抓取的方式不同,我们需要根据实际情况更改代码
2.对有ip限制的网站,可以通过代理改变ip
3.本文只是简单的抓取,抓取的效率及资源的利用率没有考虑,我们可以将其做成分布式及多线程等更高级的使用方式。