Python-实现搜狗收录网址批量自动推送脚本

因为有一些域名需要处理,手动去搜狗推送域名时间太慢而且太过于繁琐,所以写了一个脚本来自动推送域名,加快搜狗搜录。

1.可根据自己的情况选择打码平台,打码平台价钱什么都相差不大,自己选择就行,有的会赠送测试次数。

2.脚本是临时写的,有很多地方并不完善,根据自己需要修改。

3.运行时会提示你输入域名列表的文件名称,一定要把域名列表放在项目根目录

运行时会提示‘请输入要读取的文件名称,不用加.txt,输入1默认	为data.txt’
第86行别忘了改成自己邮箱,不然会推送失败

4.此脚本仅限个人测试学习使用

5.下面是代码,不懂的地方可以联系我

import requests
# 打码平台  我用的是斐斐打码
from pyfile.fateadm_api import FateadmApi
import random
import time
# 你准备的账号 一个账号最多可以推送200条域名
user_list = [{'user': 'xxxx', 'pws': 'xxxx'}, {'user': 'xxxx', 'pws': 'xxxx'},
             ]


# 打码方法
def TestFunc(path):
    # pd账号秘钥,请在用户中心页获取
    pd_id = "xx"
    pd_key = "xx"
    app_id = "xx"
    app_key = "xx"
    # 具体类型可以查看官方网站的价格页选择具体的类型,不清楚类型的,可以咨询客服
    pred_type = "30400"
    # 初始化api接口
    api = FateadmApi(app_id, app_key, pd_id, pd_key)
    res = api.PredictFromFileExtend(pred_type, path)
    return res


# 登录获取有登录状态的session
def login(user, pws):
    # 定义session
    session = requests.session()
    # 搜狗的验证码地址,必须使用session访问图片地址 登录时才有效
    img_url = f'http://zhanzhang.sogou.com/index.php/uc/vcode?tag={random.random()}'
    # 图片地址及下载图片
    filename = './vcode/' + 'verify.png'
    res = session.get(img_url)
    with open(filename, "wb") as f:
        print('开始下载')
        for chunk in res.iter_content(chunk_size=1024):
            f.write(chunk)
    # 通过打码平台获取验证码
    code = TestFunc(r'vcode/verify.png')
    # 登录地址
    url = 'http://zhanzhang.sogou.com/index.php/login'
    # 伪造请求头和post参数
    header = {
        'Host': 'zhanzhang.sogou.com',
        'X-Requested-With': 'XMLHttpRequest',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Origin': 'http://zhanzhang.sogou.com',
        'Referer': 'http://zhanzhang.sogou.com/',
    }
    data = {
        'loginForm[vcode]': code,
        'loginForm[username]': user,
        'loginForm[rememberMe]': 'on',
        'loginForm[password]': pws
    }
    # 请求地址
    req = session.post(url, headers=header, data=data)
    req.encoding = req.apparent_encoding
    print(req.text)
    # 登录成功返回session 失败返回0
    if '"success":true' in req.text:
        return session
    else:
        return 0


# 推送方法
def submit(urls, session):
    # 推送地址
    base_url = 'http://zhanzhang.sogou.com/index.php/urlSubmit/create'
    # 伪造请求头和post参数
    header = {
        'Host': 'zhanzhang.sogou.com',
        'Origin': 'http://zhanzhang.sogou.com',
        'Referer': 'http://zhanzhang.sogou.com/index.php/sitelink/index',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36',
        'X-Requested-With': 'XMLHttpRequest'
    }
    data = {
        # urls 要推送的域名  一次最多20条  一行一个
        'webAdr': urls,
        'site_type': '1',
        'reason': '',
        'email': '换成你的联系邮箱'
    }
    req = session.post(base_url, headers=header, data=data)
    req.encoding = req.apparent_encoding
    print(req.text)
    # 推送成功返回1 失败返回0
    if '"success":true' in req.text:
        return 1
    else:
        return 0

# 我是在本地获取的域名列表 根据需求可以更改
def start():
    path = input('请输入要读取的文件名称,不用加.txt,输入1默认为data.txt')
    if path == '1':
        path = 'data'
    f = open(path + '.txt', 'r')
    datas = f.readlines()
    f.close()
    print(datas)
    return datas


if __name__ == '__main__':
    t1 = int(time.time())
    datas = start()
    num = 0
    user_num = 0
    # 第一次登录  登录成功跳出
    while True:
        session = login(user_list[user_num]['user'], user_list[user_num]['pws'])
        if session != 0:
            user_num += 1
            break
    # 开始推送
    while True:
        # 判断当前账户下标是否在账户列表内
        if user_num <= len(user_list)-1:
            # 取域名列表的20个域名
            data = datas[num:num+20]
            str1 = ''
            # 拼接推送用urls
            for i in data:
                str1 = str1 + 'http://www.' + i
            ru = submit(str1, session)
            # 推送不成功则切换账号
            if ru != 1:
                print('切换账号')
                while True:
                    session = login(user_list[user_num]['user'], user_list[user_num]['pws'])
                    if session != 0:
                        user_num += 1
                        ru = submit(str1, session)
                        if ru == 1:
                            print(f'已推送{num + 20}条,已用时{int(time.time()) - t1}秒')
                            break
            print(f'已推送{num + 20}条,已用时{int(time.time()) - t1}秒')
            # 当在域名列表取得的域名小于20条时则跳出
            if len(data) < 20:
                print(f'已推送{num + 20}条,已用时{int(time.time()) - t1}秒,全部推送完成', )
                break
            num += 20
        else:
            print(f'已推送{num + 20}条,已用时{int(time.time()) - t1}秒,账户用尽')
            break
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值