1.增长本人csdn访问量 2.看成一个Python的练手项目 3.想写出更优质的博客技术文章,再也不为了访问量去写文章。html
经过解析csdn博客首页html 得到相应文章的a标签连接,对其进行访问python
# author:ytouch
# date:2019/07/27
# this py is used for brushing pageview for csdn
# 导入相关爬虫库和解析xml库便可
import time
from pyquery import PyQuery as pq
import requests
from bs4 import BeautifulSoup
# 爬取csdn类
class ScrapyMyCSDN:
''' class for csdn'''
def __init__(self,blogname):
'''init 相似于构造函数 param[in]:blogname:博客名'''
csdn_url = 'https://blog.csdn.net/' #常规csdnurl
self.blogurl = csdn_url+blogname #拼接字符串成须要爬取的主页url
''' Func:获取写了多少篇原创文章 '''
''' return:写了多少篇原创文章'''
def getOriginalArticalNums(self):
main_response = requests.get(self.blogurl)
# 判断是否成功获取 (根据状态码来判断)
if main_response.status_code == 200:
print('获取成功')
self.main_html = main_response.text
main_doc = pq(self.main_html)
mainpage_str = main_doc.text() #页面信息去除标签信息
origin_position = mainpage_str.index('原创') #找到原创的位置
end_position = mainpage_str.index('原创',origin_position+1) #最终的位置,即原创底下是数字多少篇博文
self.blog_nums = ''
# 获取写的博客数目
for num in range(3,10):
#判断为空格 则跳出循环
if mainpage_str[end_position + num].isspace() == True:
break
self.blog_nums += mainpage_str[end_position + num]
cur_blog_nums = int(self.blog_nums) #得到当前博客文章数量
return cur_blog_nums #返回博文数量
else:
print('爬取失败')
return 0 #返回0 说明博文数为0或者爬取失败
''' Func:分页'''
''' param[in]:nums:博文数 '''
''' return: 须要爬取的页数'''
def getScrapyPageNums(self,nums):
self.blog_original_nums = nums
if nums == 0:
print('它没写文章,0页啊!')
return 0
else:
print('如今开始计算')
cur_blog = nums/20 # 得到精确的页码
cur_read_page = int(nums/20) #保留整数
# 进行比对
if cur_blog > cur_read_page:
self.blog_original_nums = cur_read_page + 1
print('你须要爬取 %d'%self.blog_original_nums + '页')
return self.blog_original_nums #返回的数字
else:
self.blog_original_nums = cur_read_page
print('你须要爬取 %d'%self.blog_original_nums + '页')
return self.blog_original_nums
'''Func:开始爬取,实际就是刷浏览量hhh'''
'''param[in]:page_num:须要爬取的页数'''
'''return:0:浏览量刷失败'''
def beginToScrapy(self,page_num):
if page_num == 0:
print('连原创博客都不写 爬个鬼!')
return 0
else:
for nums in range(1,page_num+1):
self.cur_article_url = self.blogurl + '/article/list/%d'%nums+'?t=1&' #拼接字符串
article_doc = requests.get(self.cur_article_url) #访问该网站
# 先判断是否成功访问
if article_doc.status_code == 200:
print('成功访问网站%s'%self.cur_article_url)
#进行解析
cur_page_html = article_doc.text
soup = BeautifulSoup(cur_page_html,'html.parser')
for link in soup.find_all('p',class_="content"):
requests.get(link.find('a')['href']) #进行访问
else:
print('访问失败')
print('访问结束')
#如何调用该类
mycsdn = ScrapyMyCSDN('Giser_D') #初始化类 参数为博客名
cur_write_nums = mycsdn.getOriginalArticalNums() #获得写了多少篇文章
cur_blog_page = mycsdn.getScrapyPageNums(cur_write_nums) #cur_blog_page:返回须要爬取的页数
for i in range(1,60):
mycsdn.beginToScrapy(cur_blog_page)
time.sleep(10) # 给它休息时间 仍是怕被封号的
复制代码
使用方法比较简单: 首先是初始化类 类参数是本身的博客名函数
mycsdn = ScrapyMyCSDN('Giser_D') #初始化类 参数为博客名
其他参数不用改运行便可网站
python环境为3.0版本及以上须要安装相关库this
pip install pyquery
pip install requests
pip install bs4
复制代码
要是引用本人的代码 建议后面附上本人的连接,毕竟分享不易 感谢.url
write by ytouchspa