前言:前一段时间看到有博友写了爬虫去刷新博客访问量一篇文章,当时还觉得蛮有意思的,就保存了一下,但是当我昨天准备复现的时候居然发现文章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'(?
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