python+selenium爬取腾讯视频描述数据

python+selenium爬取腾讯视频数据

这两天学习了python的selenium爬取,简单来讲就是通过前端元素,获取内容值,这里用腾讯视频账户数据练习一下

爬取目标:

1> 第一步:搜索到账户“横店一哥
在这里插入图片描述
2

selenium环境配置

1> selenium环境配置,这个的话,就是下载个selenium包就可以
2> 浏览器配置:我用的是谷歌浏览器,所以这里介绍谷歌的配置
谷歌浏览器需要下载对应版本的驱动,比如我的浏览器版本是83的,那么就下载83版本的驱动
在这里插入图片描述
驱动:(附上下载地址:chromedriver.storage.googleapis.com/index.html)
在这里插入图片描述
到这里开始测试是否可以正常将百度打开:

1、创建Chrome实例 。

driver = webdriver.Chrome()
# 浏览器最大化
driver.maximize_window()
# 2、driver.get方法将定位在给定的URL的网页 。
driver.get(“www.baidu.com”)  # 网址

业务代码实现

实现的过程中涉及到几方面的知识:
1> 文件读取和写入:
文件读取(循环每一行读取)

 with open("account.txt", "r", encoding='gbk', errors='ignore') as f:
        for line in f.readlines():
        #这里写自己的处理逻辑

文件写入(追加):

with open("results.txt", "a+") as f:
    f.write(result)

2> 业务逻辑上需要考虑的点:
打开另一个窗口时,driver的获取:

#  获取所有窗口的句柄
handles = driver.window_handles
driver.switch_to.window(handles[1])  # 假设此时只有两个窗口,那么就切换到了第二个窗口

元素是否存在的判断:
可能有的用户不存在,可以用元素是否存在的方法来判断(没有相关用户的元素)
在这里插入图片描述

判断元素是否存在的代码:

# 判断元素是否存在
def isElementExist(driver,xpathstr):
    '''
    :param driver: 
    :param xpathstr: xpath路径
    :return: True or False
    '''
    flag=True
    try:
        driver.find_element_by_xpath(xpathstr)
        return flag
    except:
        flag=False
        return flag

还有一个是用户发的视频数据可能为0:
在这里插入图片描述
3> 完整代码如下:

import time
from selenium import webdriver


# 判断元素是否存在
def isElementExist(driver,xpathstr):
    '''
    :param driver: 
    :param xpathstr: xpath路径
    :return: True or False
    '''
    flag=True
    try:
        driver.find_element_by_xpath(xpathstr)
        return flag
    except:
        flag=False
        return flag

if __name__ == "__main__":

    url = "https://v.qq.com/x/search/?q=dagdth&stag=0&smartbox_ab="

    # 1、创建Chrome实例 。
    driver = webdriver.Chrome()
    # 浏览器最大化
    driver.maximize_window()
    # 2、driver.get方法将定位在给定的URL的网页 。
    driver.get(url)  # 网址腾讯视频

    time.sleep(1)

    with open("account.txt", "r", encoding='gbk', errors='ignore') as f:
        for line in f.readlines():
            # print(line[:-1])
            # user = line[:-1]
            user = line.replace('\n','')

            # 获取搜索框
            search_ele = driver.find_element_by_id("keywords")
            # 清空
            search_ele.clear()
            search_ele.send_keys(user)
            # search_ele.send_keys("afsgs")

            # 查询按钮
            select_ele = driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[1]/div[2]/form/button")
            # 点击查询
            select_ele.click()

            xpathstr = "/html/body/div[2]/div[2]/div[3]/div[1]/div[2]/div/div/div/a[1]"

            # 相关用户(筛选掉相关游戏)
            xpathstr2 = "/html/body/div[2]/div[2]/div[3]/div[1]/div[1]/div/h3"

            # driver.find_element_by_xpath(xpathstr)
            flag = isElementExist(driver,xpathstr)

            flag2 = isElementExist(driver, xpathstr2)

            print(flag)

            if flag == True and flag2 == True:
                xgtxt_ele = driver.find_element_by_xpath(xpathstr2)
                xgtxt = xgtxt_ele.text
                print(xgtxt)
                if xgtxt == "相关用户":
                    user_ele = driver.find_element_by_xpath(xpathstr)
                    user_ele.click()

                    #  获取所有窗口的句柄
                    handles = driver.window_handles
                    driver.switch_to.window(handles[1])  # 假设此时只有两个窗口,那么就切换到了第二个窗口

                    # 过滤掉视频为0的
                    count_str_ele = driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[2]/div[1]/span")
                    count_str = count_str_ele.text
                    print(count_str)
                    if count_str == "0":
                        driver.close()
                        time.sleep(1)
                        driver.switch_to.window(handles[0])  # 切回原窗口
                    else:
                        first_title_ele = driver.find_element_by_xpath("/html/body/div[4]/div/div[2]/div[1]/div/div[2]/div[1]/div[2]/a")
                        date_ele = driver.find_element_by_xpath("/html/body/div[4]/div/div[2]/div[1]/div/div[2]/div[3]/div[3]/span[2]")


                        title = first_title_ele.text
                        date = date_ele.text

                        print(title)
                        print(date)

                        result = '\n' + user + "        " + title + "        " + date
                        with open("results.txt", "a+") as f:
                            f.write(result)
                        time.sleep(1)
                        driver.close()
                        time.sleep(1)

                        driver.switch_to.window(handles[0])  # 切回原窗口
                        # driver.close()


这个算是个比较简单的selenium爬虫操作

数据:
account.txt(账户数据)
在这里插入图片描述
result.txt(测试了几个,这里贴一下格式):
在这里插入图片描述

写在最后

如果觉得代码可以进一步优化,或者交流的,Q:3459067873

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

anmu4200

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值