某狗发包刷参原理利用就是请求参数,进行接口请求,从而实现用户访问目标网站。此次刷参较某度简单一些,直接请求访问到目标网站即可,不做停留和页面浏览访问。但是目前一直在测试阶段,可以在百度统计里看到某狗引擎访问的流量记录,效果方面还在测试。下面进行简单步骤和思路的讲解。

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