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