python获取飞瓜粉丝截图

随着短视频的兴起,公司需要找很多up主谈合作,有些是自己公司签约的up主。签约的up主我们需要每个月统计他的粉丝增长量去报账,以前都是获取粉丝量即可,后面公司规定需要图片来佐证。于是从飞瓜获取截图(飞瓜查询免费用户只能查询10次,如果是免费账户,多注册几个即可)。我使用的是selenium来获取的截图
流程就是 解析本地excel中需要爬的用户信息->用户登录->用户查询->点击详情->定位截图->截图保存
1:解析excel中的用户信息,本地excel将不同平台的数据保存在了不同的sheet中,调用的时候传入对应的sheet名字即可

# 获取主播的名字、url
def get_ks_name(sheet):
    cases = []
    workbook = xlrd.open_workbook('粉丝分类数据.xlsx')
    tale = workbook.sheet_by_name(sheet)
    # 获取总行
    nrows = tale.nrows
    # 从第二行开始
    for j in range(0, nrows):
        row = tale.row_values(j)
        cases.append(
            {
                    'name': row[0],
                    'type': row[1],
                    "pingtai": row[2],
                    'url': row[3]
                }
            )
    return cases

2:初始化浏览器

def driver_init():
    driver = webdriver.Chrome()
    return driver

3:用户登录,刚开始使用的xpath,一直定位不到登录,后来发现直接使用css定位即可,点击详情页进行截图的时候会打开一个新的页面,所以需要切换页面,然后进行截图,截图调用screenshot即可,截图完成关闭当前页面,返回到原来的页面即可

# 获取快手的信息
def get_ks_info():
    driver = driver_init()
    driver.get('https://ks.feigua.cn/')
    time.sleep(1)
    # 点击登陆按钮
    driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[2]/a').click()
    time.sleep(2)
    # 点击手机账号登陆
    driver.find_element_by_css_selector('#div_qrcode > div.login-code > ul > li:nth-child(2) > a').click()
    # 输入账号密码

    driver.find_element_by_xpath('//*[@id="div_qrcode"]/div[2]/form/div[1]/input').send_keys('xxxxxx')

    driver.find_element_by_xpath('//*[@id="div_qrcode"]/div[2]/form/div[2]/input').send_keys('xxxxx')
    # 点击登陆
    driver.find_element_by_css_selector('#div_qrcode > div.phone-login > a').click()
    time.sleep(3)
    # 去掉更新弹窗
    driver.find_element_by_css_selector('#js-btn-close').click()
    # 点击弹窗确定
    # driver.find_element_by_css_selector('#notice-pop > div > div.notice-pop-footer > a').click()
    # 去掉续费按钮
    # driver.find_element_by_css_selector('#js-btn-close-DashBoard').click()
    # 输入主播的名字
    case_info= get_ks_name('快手')
    firstwin = driver.current_window_handle  # 当前的窗体  即第一个页面窗口
    for i in range(len(case_info)):
        name = case_info[i]['name']
        driver.find_element_by_xpath('//*[@id="txtOverallKeyword"]').send_keys(name)
        time.sleep(8)
        try:
            pic = driver.find_element_by_css_selector('#js-overall-container > div:nth-child(2)')
            item_info = driver.find_element_by_xpath('//*[@id="js-overall-container"]/div[2]/div[1]/div[1]/em').text
            if '搜索到0个结果' == item_info:
                name = name + '-没找到-快手'
                with open('log.txt', 'a+') as fp:
                    fp.write(name + '\n')
            else:
                title = driver.find_element_by_xpath('//*[@id="js-overall-container"]/div[2]/div[1]/div[2]/div[1]/div/div/div[1]').text
                if name in title:
                    # 点击详情
                    driver.find_element_by_xpath('//*[@id="js-overall-container"]/div[2]/div[1]/div[2]/div[1]/a').click()
                    time.sleep(6)
                    allwindows = driver.window_handles
                    print(len(allwindows))
                    # 选择注册窗口
                    for win in allwindows:
                        if win != firstwin:
                            driver.switch_to_window(win)
                            print("切换成功")
                    time.sleep(1)
                    pic_info = driver.find_element_by_xpath('//*[@id="content"]/div[4]/div/div[1]')
                    pic_info.screenshot(name + '快手' + '.png')
                    time.sleep(1)
                    driver.close()
                    for win in allwindows:
                        if win == firstwin:
                            driver.switch_to_window(win)
                            print("回到原来界面")

        except Exception as e:
            pass
        # pic.screenshot(name + '快手' + '.png')
        driver.find_element_by_xpath('//*[@id="txtOverallKeyword"]').clear()

4:截图完成将图片分类到不同的文件夹即可

    file_path = os.listdir('.')
    for i in file_path:
         if '快手.png' in i:
             shutil.copy(i, '快手'+ '/' + i)

备注:我很多地方调用了time.sleep()函数,其实换一个等待更好,就是常说的显式等待和隐式等待,具体下次写一篇文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值