python博客访问量_史诗级干货-python爬虫之增加CSDN访问量
AI
人工智能
史詩(shī)級(jí)干貨-python爬蟲之增加CSDN訪問(wèn)量
史詩(shī)級(jí)干貨-python爬蟲之增加CSDN訪問(wèn)量
搜索微信公眾號(hào):‘AI-ming3526’或者’計(jì)算機(jī)視覺(jué)這件小事’ 獲取更多算法、機(jī)器學(xué)習(xí)干貨
csdn:https://blog.csdn.net/baidu_31657889/
github:https://github.com/aimi-cn/AILearners
文章初衷:
最近CSDN官方出了一個(gè)流量扶持計(jì)劃,針對(duì)原創(chuàng)文章進(jìn)行百度推廣,我嘗試推了幾篇,效果也不是很好,或者是自己文章水平不夠,太水~就想著增加一下自己CSDN的訪問(wèn)量
想寫出更優(yōu)質(zhì)的博客技術(shù)文章,不再為了訪問(wèn)量去寫文章。
本文參照CSDN一個(gè)大佬的文章:https://blog.csdn.net/Giser_D/article/details/97472274
加上了使用代理訪問(wèn),可以盡量防止被官方封號(hào),更安全一些。
步驟:
在國(guó)內(nèi)髙匿代理IP網(wǎng)站:http://www.xicidaili.com/nn/ 取到ip。
通過(guò)解析csdn博客首頁(yè)html 獲得相應(yīng)文章的a標(biāo)簽鏈接,使用代理對(duì)其進(jìn)行訪問(wèn)。
Python代碼實(shí)現(xiàn):
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@File : csdn.py
@Time : 2019/08/26 09:54:47
@Author : xiao ming
@Version : 1.0
@Contact : xiaoming3526@gmail.com
@Desc : None
@github : https://github.com/aimi-cn/AILearners
'''
# 導(dǎo)入相關(guān)爬蟲庫(kù)和解析xml庫(kù)即可
import time
from pyquery import PyQuery as pq
import requests
from bs4 import BeautifulSoup
import random
from fake_useragent import UserAgent
from lxml import etree
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
# 爬取csdn類
class ScrapyMyCSDN:
''' class for csdn'''
def __init__(self,blogname):
'''init 類似于構(gòu)造函數(shù) param[in]:blogname:博客名'''
csdn_url = 'https://blog.csdn.net/' #常規(guī)csdnurl
self.blogurl = csdn_url+blogname #拼接字符串成需要爬取的主頁(yè)url
''' Func:獲取寫了多少篇原創(chuàng)文章 '''
''' return:寫了多少篇原創(chuàng)文章'''
def getOriginalArticalNums(self,proxies):
main_response = requests.get(self.blogurl,proxies=proxies)
# 判斷是否成功獲取 (根據(jù)狀態(tài)碼來(lái)判斷)
if main_response.status_code == 200:
print('獲取成功')
self.main_html = main_response.text
main_doc = pq(self.main_html)
mainpage_str = main_doc.text() #頁(yè)面信息去除標(biāo)簽信息
origin_position = mainpage_str.index('原創(chuàng)') #找到原創(chuàng)的位置
end_position = mainpage_str.index('原創(chuàng)',origin_position+1) #最終的位置,即原創(chuàng)底下是數(shù)字多少篇博文
self.blog_nums = ''
# 獲取寫的博客數(shù)目
for num in range(3,10):
#判斷為空格 則跳出循環(huán)
if mainpage_str[end_position + num].isspace() == True:
break
self.blog_nums += mainpage_str[end_position + num]
print(type(str(self.blog_nums)))
cur_blog_nums = (int((self.blog_nums))) #獲得當(dāng)前博客文章數(shù)量
return cur_blog_nums #返回博文數(shù)量
else:
print('爬取失敗')
return 0 #返回0 說(shuō)明博文數(shù)為0或者爬取失敗
''' Func:分頁(yè)'''
''' param[in]:nums:博文數(shù) '''
''' return: 需要爬取的頁(yè)數(shù)'''
def getScrapyPageNums(self,nums):
self.blog_original_nums = nums
if nums == 0:
print('它沒(méi)寫文章,0頁(yè)啊!')
return 0
else:
print('現(xiàn)在開始計(jì)算')
cur_blog = nums/20 # 獲得精確的頁(yè)碼
cur_read_page = int(nums/20) #保留整數(shù)
# 進(jìn)行比對(duì)
if cur_blog > cur_read_page:
self.blog_original_nums = cur_read_page + 1
print('你需要爬取 %d'%self.blog_original_nums + '頁(yè)')
return self.blog_original_nums #返回的數(shù)字
else:
self.blog_original_nums = cur_read_page
print('你需要爬取 %d'%self.blog_original_nums + '頁(yè)')
return self.blog_original_nums
'''Func:開始爬取,實(shí)際就是刷瀏覽量hhh'''
'''param[in]:page_num:需要爬取的頁(yè)數(shù)'''
'''return:0:瀏覽量刷失敗'''
def beginToScrapy(self,page_num,proxies):
if page_num == 0:
print('連原創(chuàng)博客都不寫 爬個(gè)鬼!')
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,proxies=proxies) #訪問(wèn)該網(wǎng)站
# 先判斷是否成功訪問(wèn)
if article_doc.status_code == 200:
print('成功訪問(wèn)網(wǎng)站%s'%self.cur_article_url)
#進(jìn)行解析
cur_page_html = article_doc.text
#print(cur_page_html)
soup = BeautifulSoup(cur_page_html,'html.parser')
for link in soup.find_all('p',class_="content"):
#print(link.find('a')['href'])
requests.get(link.find('a')['href'],proxies=proxies) #進(jìn)行訪問(wèn)
else:
print('訪問(wèn)失敗')
print('訪問(wèn)結(jié)束')
# IP地址取自國(guó)內(nèi)髙匿代理IP網(wǎng)站:http://www.xicidaili.com/nn/
#功能:爬取IP存入ip_list列表
def get_ip_list(url, headers):
web_data = requests.get(url, headers=headers)
soup = BeautifulSoup(web_data.text, 'lxml')
ips = soup.find_all('tr')
ip_list = []
for i in range(1, len(ips)):
ip_info = ips[i]
tds = ip_info.find_all('td') #tr標(biāo)簽中獲取td標(biāo)簽數(shù)據(jù)
if not tds[8].text.find('天')==-1:
ip_list.append(tds[1].text + ':' + tds[2].text)
return ip_list
#功能:1,將ip_list中的IP寫入IP.txt文件中
# 2,獲取隨機(jī)IP,并將隨機(jī)IP返回
def get_random_ip(ip_list):
proxy_list = []
for ip in ip_list:
proxy_list.append(ip)
f=open('IP.txt','a+',encoding='utf-8')
f.write('http://' + ip)
f.write('n')
f.close()
proxy_ip = random.choice(proxy_list)
proxies = {'http':proxy_ip}
return proxies
if __name__ == '__main__':
for i in range(1,3):
url = 'http://www.xicidaili.com/wt/{}'.format(i)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'
}
ip_list = get_ip_list(url, headers=headers)
proxies = get_random_ip(ip_list)
print(proxies)
#如何調(diào)用該類 參數(shù)換成你的csdn名字就行
mycsdn = ScrapyMyCSDN('baidu_31657889') #初始化類 參數(shù)為博客名
cur_write_nums = mycsdn.getOriginalArticalNums(proxies) #得到寫了多少篇文章
cur_blog_page = mycsdn.getScrapyPageNums(cur_write_nums) #cur_blog_page:返回需要爬取的頁(yè)數(shù)
mycsdn.beginToScrapy(cur_blog_page,proxies)
time.sleep(20) # 給它休息時(shí)間 還是怕被封號(hào)的
需要用到的pip包
我的python環(huán)境為3.6.5版本及以上需要安裝相關(guān)庫(kù)
pip install pyquery
pip install requests
pip install bs4
pip install fake_useragent
pip install lxml
pip install ssl
使用方法
修改主函數(shù)第一行中range(1,3),這代表只取兩個(gè)隨機(jī)代理,然后讓我們的csdn所有原創(chuàng)文章瀏覽量加一遍,循環(huán)兩次,修改range后面的值就可以增加循環(huán)次數(shù)了。
mycsdn = ScrapyMyCSDN('baidu_31657889') #參數(shù)為博客名,參數(shù)換成你的csdn名字就行
后記
個(gè)人感覺(jué)提高博客質(zhì)量才是重點(diǎn),但是我們可以找到比較好的機(jī)會(huì)來(lái)蹭個(gè)熱度,爬一下自己感覺(jué)非常不錯(cuò)的文章。
當(dāng)然我們要記得適可而止,網(wǎng)上不乏有很多人的號(hào)被封的。別忘記我們寫博客的初衷是什么,對(duì)訪問(wèn)量這個(gè)東西不用太在意了。
代碼下載地址:https://github.com/aimi-cn/AILearners/tree/master/src/py3.x/others/fm/19.08.26/csdn.py
內(nèi)容來(lái)源于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系客服刪除
總結(jié)
以上是生活随笔為你收集整理的python博客访问量_史诗级干货-python爬虫之增加CSDN访问量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用lodash防抖_什么,lodash
- 下一篇: 路由销毁上一页_路由器原理(数据通信)