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访问目标网站。进行了简单的刷参发包。