sou狗快排刷参配合redis代理ip池进行发包
某狗发包刷参原理利用就是请求参数,进行接口请求,从而实现用户访问目标网站。此次刷参较某度简单一些,直接请求访问到目标网站即可,不做停留和页面浏览访问。但是目前一直在测试阶段,可以在百度统计里看到某狗引擎访问的流量记录,效果方面还在测试。下面进行简单步骤和思路的讲解。
正常访问sou狗搜索都会进行请求,而请求包的记录都会被加载出来,这里我们可以通过fiddler抓包工具进行分析,查看搜索某个关键词产生的请求加载记录。这里可以看到已经有一条请求url是访问的记录。接下来就要对参数进行分析

通过参数分析,可以看到这些参数大概主要是以随机时间为主。

那么在python代码中我们对访问请求参数模拟,这样就可以造出大概差不多相似的请求url了。
def reqUrl(self,page):
params = {
'sut':random.choice(range(200,15000)),
'query':self.keyword,
'_asf':'www.sogou.com',
'w':'01019900',
'p':'40040100',
'ie':'utf8',
'from':'index-nologin',
's_from':'index',
'sst0':int(time.time()*1000),
'lkt':'0,0,0',
'sugsuv':str(int(datetime.datetime.today().replace(microsecond=0).timestamp())-1000)+'523480',
'sugtime':int(time.time()*1000),
'page':str(page)
}
url = urljoin(self.base_url,'web?'+urlencode(params))
return self.resHtml(url)紧接着就是页面排名网站进行解析
def resHtml(self,url):
self.session.get(url=self.vsogou_url)
try:
self.randHeaders = Headers(headers=True).generate()
headers = {
'User-Agent':self.randHeaders['User-Agent'],
}
resp = self.session.get(url=url,headers=headers,verify=False)
resp.encoding = resp.apparent_encoding
return resp.text
except Exception as e:
print(e)
def parseHtml(self,html):
e_obj = etree.HTML(html)
divs = e_obj.xpath("//div[@id='main']//div[@class='vrwrap']")
# print(divs)
for index,div in enumerate(divs):
i = div.xpath("./div[@class='citeurl']/i")
if i:
yu_name = div.xpath("./div[@class='citeurl']/span[2]/text() | .//div[contains(@class,'citeurl')]/span[1]/text()")
# print(yu_name)
else:
yu_name = div.xpath("./div[@class='citeurl']/span[1]/text() | .//div[contains(@class,'citeurl')]/span[1]/text()")
# print(yu_name)
if yu_name:
if self.web_name in yu_name[0]:
index = index + 1 if index == 0 else index
print()
href = div.xpath(".//h3[contains(@class,'vr-title')]/a/@href")[0]
clickUrl = urljoin(self.base_url,href)
print(index,clickUrl)
return index,clickUrl获取目标网站url为:https://video.sogou.com/link?url=DSOYnZeCC_pqdWOAmU_iycCnzIJwuQYD32GD08viWW4. 再对这个url进行请求访问。这样就可以对目标网站产生一次点击了。

第二部分就是配置代理ip了,代理ip我们可以做一个代理ip池,进行循环利用,保证每一个ip都是最大程度的利用。在某某代理ip平台获取到代理ip接口后,接下来就可以单独写一个py模块,进行代理ip池的设置,这里利用redis列表类型进行ip的压入压出,每次保存10个长度。如下代码
def get_ip():
url = 'http://http.tiqu.letecs.com/getip3?xxxxxxxxxxxns=&gm=4'
while True:
res = requests.get(url=url).json()
try:
# print(res)
ip = res['data'][0]['ip']
port = res['data'][0]['port']
dl_ip = '%s:%s'%(ip,port)
except:
# print(res)
continue
else:
r.lpush('IP', dl_ip)
# print('成功加入代理ip%s' % dl_ip)
break
def get_num():
while True:
num = r.llen('IP')
if num < 10:
get_ip()
else:
# print(num)
ip = pop_ip()
return ip
def pop_ip():
ip = r.rpop('IP').decode()
# print(ip)
return ip
def check_ip():
while True:
ip = get_num()
proxies = {
'http':f'http://{ip}',
'https':f'http://{ip}'
}
try:
url = 'http://httpbin.org/ip'
res = requests.get(url=url,proxies=proxies).json()
# print(res)
r.lpush('IP',ip)
# print(f'目标ip:{ip}')
return ip
except:
# print(f'删除ip{ip}')
get_ip()
if __name__ == '__main__':
# get_ip()
check_ip()
# pop_ip()
# t()在redis桌面工具,可以看到已经压入的10个待取代理ip

最后在代码中导入代理ip模块,从redis中获取ip后,用代理ip进行整个搜索访问过程的模拟。从而达到不同ip访问目标网站。进行了简单的刷参发包。

