百度快排-python3脚本 网站快速排名脚本,适用SEO

程序说明:

程序使用两个线程来运行,线程1在无忧代理上获取免费的ip地址,线程2执行排名函数,这么做是确保数据库中的ip不会被消耗完。

1、由于免费的代理多数是无效的,线程1在获取到ip后还会筛选出真正有效可用的ip地址,并将其存入数据库。

2、排名函数主要是从数据库中随机选择ip地址,然后通过该ip进入到需要访问的网站,使用random模块的作用是防止搜索引擎判断是机器操作 所以使用随机点击与滑动,虽然这么做不能确定是否真实有用,通过同一个网站反复使用该程序,对于排名兴许会有效果。

问题:

可能还存在用户体验等方面的问题,也可能包含搜索引擎算法等相关问题,网站快速排名程序会不断优化……

代码如下:

import requests,time,random,pymysql,threading
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.chrome.options import Options

def ip():
    url = 'http://www.h3blog.com/'
    chrome_options = Options()
    # 设置chrome浏览器无界面模式
    chrome_options.add_argument('--headless')
    driver = webdriver.Chrome(chrome_options=chrome_options)
    driver.get(url)
    ips = driver.find_elements_by_xpath('//ul[@class=\'l2\']/span[1]/li')  # 找到ip模块
    dks = driver.find_elements_by_xpath('//ul[@class=\'l2\']/span[2]/li')  # 端口
    lxs = driver.find_elements_by_xpath('//ul[@class=\'l2\']/span[4]/li')  # 类型数据
    try:
        for i in range(len(ips)):
            proxies = {
                lxs[i].text:ips[i].text+':'+dks[i].text
            }

            r = requests.get('http://icanhazip.com', proxies=proxies, timeout=5)#判断ip是否有效
            if r.status_code == 200:
                #将有效的ip写入ip_data数据库
                sql_insert = "INSERT IGNORE INTO ip_data(ip,port,types) VALUES ('%s','%s','%s')"%(ips[i].text,dks[i].text,lxs[i].text)
                cursor.execute(sql_insert)
                conn.commit()
        conn.close()
        driver.close()
    except:
        pass
        driver.close()


def xx():
    url = 'http://so.m.sm.cn/s?q=' + keyword
    #查询数据库
    sql = "select * from ip_data"
    cursor.execute(sql)
    ips = []
    for i in cursor.fetchall():
        ips.append(i[0])
    ip_data = random.choice(ips)#随机取出一个ip
    #从数据库中删除该数据
    delete = "DELETE FROM ip_data WHERE ip=%s"
    cursor.execute(delete,ip_data)
    conn.close()

    PROXY = ip_data  # IP:PORT or HOST:PORT
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--proxy-server=%s' % PROXY)

    driver = webdriver.Chrome(chrome_options=chrome_options)
    driver.get(url)
    driver.set_page_load_timeout(10)


    #随机上下滑动函数
    def rand():
        time.sleep(random.randint(2,5))#随机停留1-5秒
        for i in range(random.randint(2,6)):
            driver.execute_script("window.scrollTo(%s,%s)"%(random.randint(1,300),random.randint(1,300)))
            time.sleep(random.randint(1,3))
            driver.execute_script("window.scrollTo(%s,%s)"%(random.randint(1,300),random.randint(1,300)))


    #随机点击函数
    def click():
        for i in range(3):
            time.sleep(1)
            for i in range(1,3):
                driver.execute_script("window.scrollTo(%s,%s)" % (random.randint(1, 800), random.randint(1, 500)))
                time.sleep(random.randint(1, 3))
                driver.execute_script("window.scrollTo(%s,%s)" % (random.randint(1, 800), random.randint(1, 500)))
            for j in range(30):
                time.sleep(0.5)
                x = random.randint(1,960)
                y = random.randint(1,1040)
                action = ActionChains(driver)
                action.move_by_offset(x, y).click()
                action.perform()


    num = 0
    while True:
        try:
            num += 1
            if num == 10:
                print("已查找到第十页没有数据,程序结束!")
                driver.close()
                break
            print("正在查找第",num,"页")
            divs = driver.find_elements_by_xpath('//h2/a')
            for i in divs:
                #如果指定元素在获取的元素里则点击
                if link in i.get_attribute('href'):
                    i.click()
                    click()
            rand()
            #如果不在则点击下一页
            driver.find_element_by_xpath('//div[@class="pager"]/a').click()
        except:
            driver.close()
            break


if __name__ == '__main__':
    # 创建数据表
    conn = pymysql.connect('localhost', user='root', passwd='123456', db='ip')
    cursor = conn.cursor()

    # cursor.execute('DROP TABLE IF EXISTS ip_data')
    # sql = """CREATE TABLE ip_data(
    #         ip VARCHAR(255) NOT NULL,
    #         port VARCHAR(255) NOT NULL,
    #         types VARCHAR(255) NOT NULL,
    #         PRIMARY KEY(ip)#ip主键
    # )
    # """
    # cursor.execute(sql)

    keyword = input("请输入搜索关键词:")
    link = input("请输入需要刷的域名:")
    thread = threading.Thread(target=ip)
    thread1 = threading.Thread(target=xx)
    thread.start()
    thread1.start()
    thread.join()
    thread1.join()