前言:前一段时间看到有博友写了爬虫去刷新博客访问量一篇文章,当时还觉得蛮有意思的,就保存了一下,但是当我昨天准备复现的时候居然发现文章404了。
所以本篇文章仅供学习交流,严禁用于商业用途
当我在写文章的同时,代码依然在运行,亲测是有效滴。
你很容易会发现你写的那些水文章的url都有一个共同特点,前面都是固定的,就是后面一串数字不一样,这串数字是利用某种算法生成,因为我不会,这里我不展开讲了。我只需要把后面的数字拿过来就好了。
https://blog.csdn.net/SuperBetterMan/article/details/107508976 https://blog.csdn.net/SuperBetterMan/article/details/107368925 https://blog.csdn.net/SuperBetterMan/article/details/107144322
CSDN是基于ip地址去判别有效的访问量,同一个ip访问过多后,会被后台判定是机器,将不再增加访问量,IP甚至会被禁止访问一段时间。那我们找了一个免费的性价比还不错的ip代理,很好解决了这个小小的问题。
昨晚出去散步把代码放在跑,本来以为能刷个几k吧,但是当我回来却发现刷到2百多的时候,后台就给我停掉了,而且网站应该是设置了一个时间戳,在一定时间内,即使不同的ip访问了,也不会增加访问量。
最后当我写完这行的时候,代码也还在跑,真要是闲的没事可以放在云服务器上多搞几个线程跑个几天几夜,然后号就没了
最后附上代码,代码也上传到github,里面有一些其他较为有意思的代码,希望大家可以喜欢,然后给我一个小star
from lxml import html import time import random import requests import re import urllib.request import urllib.parse firefoxHead = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"} IPRegular = r"(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])" host = "https://blog.csdn.net" url = "https://blog.csdn.net/SuperBetterMan/article/details/{}" codes = ["106651719", "106533059", "107508976", "106658304", "106594490", "106242605"] def parseIPList(url="https://www.89ip.cn/tqdl.html?num=60&address=&kill_address=&port=9999&kill_port=&isp="): req = urllib.request.Request(url) # 创建请求对象 res = urllib.request.urlopen(req) # 对网页发起请求并获取响应 html = res.read().decode("utf-8") p = re.compile(r'(?<![\.\d])(?:\d{1,3}\.){3}\d{1,3}(?![\.\d])') IPS = re.findall(p, html) return IPS def PV(code): s = requests.Session() s.headers = firefoxHead count = 0 while True: count += 1 print("正在进行第{}次访问\t".format(count), end="\t") IPs = parseIPList() # print(random.choice(IPs)) # IPs = ["36.248.129.106","36.248.132.123"] newip = random.choice(IPs) print('ip地址是{}'.format(newip)) s.proxies = {"http: {}:9999".format(newip)} s.get(host) # r = s.get(url.format(random.choice(codes))) r = s.get(url.format(codes[random.randint(0, 5)])) en = html.etree.HTML(r.text) # 将网页源代码解析成xpath对象 result = en.xpath('//*[@id="articleContentId"]/text()') print(result) Views = en.xpath('//*[@id="mainBox"]/main/div[1]/div/div/div[2]/div[1]/div/span[2]/text()') print('访问量是{}'.format(Views)) time.sleep(random.randint(5,10)) def main(): PV(codes[0]) # parseIPList() if __name__ == "__main__": main()
很简单,有木有 源码获取加群:1136192749