一、整体思路
??如题,通过这个项目实现的目标是增加博客访问量的功能。那我们如何实现这个目标呢? ??访问量就是我们通过浏览器或者手机APP将对应的文章点开,这样的一个步骤。那我们是不是可以通过python模拟我们的行为,达到增加访问量的效果呢?说干就干!我们冲! ??想要模拟我们的行为,那我们需要准备什么呢?首先对应的文章URL总是需要的吧?然后为了模仿浏览器的行为,也是为了告诉服务器我们是正常用户我们是不是需要对请求包的header进行封装呢?最后为了表现出不是同一个人在访问,我们是不是应该封装一个代理IP呢? ??到这里,我们整理一下我们的需求!1、目标URL;2、伪装header;3、代理IP;4、模仿行为访问。既然需求明确了,那我们就准备开始吧。 ??123我们都得做,那我们先完成3吧。
二、获取伪装的header,
??通过网上浏览信息,我们找到了这样一个网址https://www.cnblogs.com/0bug/p/8952656.html#_label1,如下图: ??不需要爬取,咱直接复制粘贴即可! ??在代码的目录下创建"User-Agent.txt.txt"文件,然后将下列内容粘贴进去即可:
Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19
Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Mozilla/5.0 (Linux; U; Android 2.2; en-gb; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
Mozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19
Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3
Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3
三、爬取代理IP
??通过网上浏览信息,我们找到了这样一个网址https://www.kuaidaili.com/free/inha/,如下图: ??直接爬取他的IP不就可以了吗?说干就干!! ??源码如下:
import requests
from bs4 import BeautifulSoup
import codecs
from tqdm import tqdm
import random
import re
def main(url):
header = head()
ip = ipProxies()
html = getURL(url,header,ip)
result = getResult(html)
saveResult(result)
def ipProxies():
f = codecs.open("IP.txt", "r+", encoding="utf-8")
ip = f.readlines()
f.close()
IP = {'http':random.choice(ip)[-2::-1][::-1]}
print("本次使用IP(proxies)为:",IP['http'])
return IP
def head():
f = codecs.open("User-Agent.txt","r+",encoding="utf-8")
head = f.readlines()
f.close()
header = {"User-Agent":random.choice(head)[-3::-1][::-1]}
print("本次使用header(User-Agent)为:", header["User-Agent"])
return header
def getURL(url,header,ip):
html = ""
try:
response = requests.get(url=url,headers=header,proxies=ip)
html = response.text
except:
print("url出错啦!")
return html
def getResult(html):
bs = BeautifulSoup(html,"html.parser")
pantter = '(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])'
result = bs.find_all(text= re.compile(pantter))
return result
def saveResult(result):
f = codecs.open("IP.txt",'w+',encoding="utf-8")
for ip in tqdm(result,desc="内容爬取中",ncols=70):
f.write(ip)
f.write("\n")
f.close()
if __name__ == '__main__':
url = "https://www.kuaidaili.com/free/inha/"
print("-------------------开始爬取------------------------")
main(url)
print("-------------------爬取完成------------------------")
print("^-^结果存在于同本代码目录下的'IP.txt'文件中^-^")
??代码我就不过多解释,若此代码第一次不能运行,应该是你的没有“IP.txt”文件。 ??解决办法:在和本代码的目录下创建"IP.txt"文件,然后将你本机的IP写在这个txt文件中即可。
四、获取目标URL
??这个可以参考这篇文章:prthon-爬虫实现爬取某用户csdn博客所有文章链接 ??在这里当然我们也会给出我们在这的代码,源码如下:干!
import requests
import random
from bs4 import BeautifulSoup
import codecs
from tqdm import tqdm
import sys
def main(url):
header = head()
ip = ipProxies()
html = getURL(url,header,ip)
result = getResult(html)
saveResult(result)
def ipProxies():
f = codecs.open("IP.txt", "r+", encoding="utf-8")
ip = f.readlines()
f.close()
IP = {'http':random.choice(ip)[-2::-1][::-1]}
print("本次使用IP(proxies)为:",IP['http'])
return IP
def head():
f = codecs.open("User-Agent.txt","r+",encoding="utf-8")
head = f.readlines()
f.close()
header = {"User-Agent":random.choice(head)[-3::-1][::-1]}
print("本次使用header(User-Agent)为:", header["User-Agent"])
return header
def getURL(url,header,ip):
html = ""
try:
response = requests.get(url=url,headers=header,proxies=ip)
html = response.text
except:
print("目标URL有误")
return html
def getResult(html):
result = []
bs = BeautifulSoup(html,"html.parser")
for link in bs.find_all('a'):
getlink = link.get('href')
try:
if ("comments" not in getlink) and("/article/details/" in getlink) and ("blogdevteam" not in getlink):
if (getlink not in result):
result.append(getlink)
except TypeError as e:
print("这是警告,只是小异常,罩得住!还在爬取,别担心!冲!!!!")
continue
return result
def saveResult(result):
f = codecs.open('url.txt','w+',encoding='utf-8')
for link in tqdm(result,desc="本页面爬取中",ncols=70):
f.write(link)
f.write("\n")
f.close()
if __name__ == '__main__':
url = str(input("请输入需要爬取的URL:"))
if "blog.csdn.net" not in url:
print("请输入合法的CSDN博客主页链接")
sys.exit()
print("-------------------开始爬取------------------------")
main(url)
print("-------------------爬取完成------------------------")
print("^-^结果存在于同本代码目录下的'url.txt'文件中^-^")
??到这里,我们的准备工作已经齐活啦!运行完本代码以后,你的目前路径有如下图的5个文件: ??如果没有,那前边肯定有问题,不用接着做了。
五、模拟访问,增加访问量!
??准备已经做好啦,成败在此一举! ??别担心,既然文章已经出现在这里了,那肯定是成功了。 ??废话不多说,上码:
import requests
import codecs
from tqdm import tqdm
import random
import time
def main():
header = head()
ip = ipProxies()
url = getURL()
return askURL(url,header,ip)
def ipProxies():
f = codecs.open("IP.txt", "r+", encoding="utf-8")
ip = f.readlines()
f.close()
IP = {'http':random.choice(ip)[-2::-1][::-1]}
print("本次使用IP(proxies)为:",IP['http'])
return IP
def head():
f = codecs.open("User-Agent.txt","r+",encoding="utf-8")
head = f.readlines()
f.close()
header = {"User-Agent":random.choice(head)[-3::-1][::-1]}
print("本次使用header(User-Agent)为:", header["User-Agent"])
return header
def getURL():
f = codecs.open("url.txt","r+",encoding="utf-8")
URL = f.readlines()
f.close()
url = random.choice(URL)[-2::-1][::-1]
print("本次使用访问的链接为:", url)
return url
def askURL(url,header,ip):
try:
request = requests.get(url=url,headers=header,proxies=ip)
print(request)
time.sleep(5)
except:
print("本次访问失败!")
if __name__ == '__main__':
num = int(input("请输入模拟访问次数:"))
for num in tqdm(range(num),desc="正在访问",ncols=70):
print("这是第"+str(num+1)+"次访问")
main()
??到这里本项目的目标我们已经实现了!接下里就是紧张刺激的验证环节。
六、验证环节
??最终运行结果如下: ??由此,本项目功成!结束!
七、使用方法以及结语
??使用方法很简单,把他们全部放在一个文件夹里面就行。 ??欢迎关注,点赞。与我交流一同学习python、Django、爬虫、docker、路由交换、web安全等一切东西。
|