分享好友 资讯首页 资讯分类 切换频道
php 获取搜狗微信 sn,记搜狗微信号搜索反爬虫
2024-12-19 22:16  浏览:81

反爬虫

RSS Factory前段时间又出问题了,访问微信公众号RSS一直500,完全没法用了。

经调试,发现由于爬取数据太频繁,触发了搜狗微信公众号的反爬虫,探索了下反爬虫的规则:

没有带Cookie的情况下,频繁访问触发反爬虫

带Cookie的情况下,频繁访问偶尔触发反爬出,偶现500错误

不带Cookie情况下,隔几个小时范围一下不会触发反爬虫

Cookie有几个关键字段用于识别爬虫,SUID,SNUID,SUV。

不带Cookie请求任意搜狗微信公众号页面,应答set-cookie会带SUID,SNUID字段,SUV由JavaScript生成。

应对反爬虫

基于以上探索的反爬虫措施,制定应对反爬虫的策略。

维护一个Cookie池

爬取数据时随机取Cookie

定时更新Cookies池

实现

php 获取搜狗微信 sn,记搜狗微信号搜索反爬虫

@tornado.gen.coroutine

def get_cookies():

cookies = []

client = tornado.httpclient.AsyncHTTPClient()

for i in xrange(10):

url = 'http://weixin.sogou.com/weixin?query=%s' % random.choice('abcdefghijklmnopqrstuvwxyz')

# 获取SNUID

cookie_request = tornado.httpclient.HTTPRequest(url=url, method='HEAD')

cookie = yield client.fetch(cookie_request)

SUID = re.findall(r'(SUID=S+?);', cookie.headers['set-cookie'])[0]

m = re.findall(r'(SNUID=S+?);', cookie.headers['set-cookie'])

if m:

SNUID = m[0]

headers = {'Cookie:': '; '.join([SUID, getSUV(), SNUID])}

cookies.append(headers)

mc = memcache.Client(['%s:15211' % IP])

if cookies:

mc.set('cookie', cookies)

用到了tornado的协程,使用异步httpClient,发送请求时使用HEAD方法,只请求头部,通过解析set-cookie生成自己的Cookie头,连续不带Cookies访问1-次,生成Cookie池,并且保存在memcached中。

在调用tornado.ioloop.IOLoop.instance().start()之前,调用get_cookies(),任务就能正常运行了,但是我们需要定时更新Cookie池,所以还要添加定时任务。

tornado有两种方式可以定时运行可调用对象

# 延时运行,接受delta延时时间间隔为datetime.delta对象,func为可调用对象,但是只能调用一次,所以如果用add_timeout还需要在func中显式的再add_timeout才能实现定时调用

tornado.ioloop.IOLoop.instance().add_timeout(delta, func)

# 定时回调,以毫秒为单位,每6个小时调用一次

tornado.ioloop.PeriodicCallback(get_cookies, 6*60*60*1000).start()

效果

实现了定时任务后每6个小时会更新一次Cookie池,产生10个新的Cookie,爬取数据时使用随机Cookie明显降低了产生500的概率,效果良好。

    以上就是本篇文章【php 获取搜狗微信 sn,记搜狗微信号搜索反爬虫】的全部内容了,欢迎阅览 ! 文章地址:http://w.yusign.com/news/989.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 述古往 http://w.yusign.com/mobile/ , 查看更多   
最新新闻
小花分期统一客服电话-小花分期人工客服服务热线电话
小花分期全国人工24小时客服电话;00861-52707-22671,二线:00861-78796-93757—请注意,在拨打客服电话时,请保持耐心并详细描
悦分期全国客服电话是多少-悦分期强制下款怎么解决
悦分期全国人工24小时客服电话;00861-52707-22671,二线:00861-78796-93757—请注意,在拨打客服电话时,请保持耐心并详细描述
广源优品全国客服电话是多少-广源优品强制下款怎么解决
广源优品全国人工24小时客服电话;00861-52707-22671,二线:00861-78796-93757—请注意,在拨打客服电话时,请保持耐心并详细描
广源优品全国客服电话是多少-广源优品强制下款怎么解决
获取全网一手热点首页新闻无障碍金融街论坛丨持续提升巨灾保险保障水平2024金融街论坛年会观察v新华网2024年10月21日15:25北京新
众享贷全国客服电话是多少-众享贷强制下款怎么解决
获取全网一手热点首页新闻无障碍金融街论坛丨持续提升巨灾保险保障水平2024金融街论坛年会观察v新华网2024年10月21日15:25北京新
来趣花全国客服电话全新升级-来趣花24小时在线客服电话
来趣花全国人工24小时客服电话00861-52971-57932二线00861-56399-67714【来趣花:金融创新与普惠金融的双刃剑】在当今快速发展的
米来花全国客服电话全新升级-米来花24小时在线客服电话
米来花全国人工24小时客服电话00861-52971-57932二线00861-56399-67714【米来花:金融创新与普惠金融的双刃剑】在当今快速发展的
微米花贝全国客服电话全新升级-微米花贝24小时在线客服电话
微米花贝全国人工24小时客服电话00861-52971-57932二线00861-56399-67714【微米花贝:金融创新与普惠金融的双刃剑】在当今快速发
享趣花呗全国客服电话全新升级-享趣花呗24小时在线客服电话
享趣花呗全国人工24小时客服电话00861-52971-57932二线00861-56399-67714【享趣花呗:金融创新与普惠金融的双刃剑】在当今快速发
鱼享花全国客服电话全新升级-鱼享花24小时在线客服电话
鱼享花全国人工24小时客服电话00861-52971-57932二线00861-56399-67714【鱼享花:金融创新与普惠金融的双刃剑】在当今快速发展的