Python Selenium爬虫学习

目录

 前言

1 爬取准备工作 

1.1 浏览器驱动下载

1.2 Python 运行所需库

2 爬取工作

2.1 加载网页      

​编辑​2.2 登录网站

2.3 进入指定千川视频搜索

3 数据处理


 前言

        本次复盘针对Selenium抓爬巨量创意账户内巨量千川素材的(1)视频类型(2)音乐类型(3)营销卖点(4)视频情节的点击指数、视频数量指数、具体类型数据并写入excel文档中。

        本次复盘发现存在一些不足点:(1)未实操解决滑块验证问题【解决方案:采用CV2库进行滑块距离检测】;(2)对爬取的数据没有进行自动化处理,需要人工处理。

1 爬取准备工作 

1.1 浏览器驱动下载

        爬取浏览器之前需要先将浏览器驱动下载并导入python文件夹,下面以浏览器驱动获取(以Edge浏览器为例),首先通过设置检查浏览器当前版本

Edge浏览器驱动下载网址:Microsoft Edge WebDriver - Microsoft Edge Developer
 Tips:其他浏览器驱动可以直接搜索http://t.csdn.cn/XbDTB获取网址

​        点击完整目录,找到于自身浏览器版本一致或接近的驱动

        进入网址选取与当前Edge版本最接近的驱动点击 ,下载并解压,将解压后的驱动放入python文件夹内,即可通过selenium库操作Edge浏览器

1.2 Python 运行所需库

from selenium import webdriver 
from selenium.webdriver.common.by import By #元素定位
from selenium.webdriver import EdgeOptions,Keys #ChromeOptions用于浏览器操作,Keys用于传输键盘内容 
import time #运行暂停(selenium进行点击等操作时候需要缓冲时间)为网页留够停留时间
from lxml import etree #解析HTML文档,将selenium获取的网页源码进行解析以便快速定位元素
import pandas as pd #处理爬取数据写入excel文档
#import re #用于数据的筛选
#from selenium.webdriver.common.action_chains import ActionChains #点击滑块移动(selenium鼠标操作库)
#import cv2 #图像处理进行识别滑块图片位置

        首先导入所需要使用到的库,其中注释的库为未使用到但可以优化的内容所需要使用的库。

        本文使用的是jupyter notebook软件进行Python编写,其中所需要的库可以进入Anaconda Powershell Prompt进行下载,使用pycharm的可直接win+r输入cmd后使用pip install *语句安装库

Tips:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium,国内下载可以使用清华镜像源进行下载速度更快(针对一些库,个人感觉平时用的库下载速度都还可以)

2 爬取工作

2.1 加载网页      

       在使用selenium前尝试使用requests库进行网页爬取,但发现获取的网页源码不完整导致无法获取数据内容,因此改用selenium进行从登录->查询->搜集的步骤

options=EdgeOptions() #用于设置浏览器启动参数,可以实现无窗口打开爬取
browser=webdriver.Edge(options=options)
'''
url='https://cc.oceanengine.com/login'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.188',
'cookie':'x-jupiter-uuid=16915924718287320; s_v_web_id=f1d83ec2c3c4f96446698364201140107fcd2aac4d29dd85e1; _tea_utm_cache_4031=undefined; passport_csrf_token=1de0dfb1df4d6f9060b167b70fb354b6; passport_csrf_token_default=1de0dfb1df4d6f9060b167b70fb354b6; ttwid=1%7CMGJ2jfE8XyO5MUeuomVNPcDFk2gjNDpZ34E-GSgd4Ik%7C1691592478%7C581f76bf9ed054d323d1a1649e49a19ac3c105da98177acf2662d712f9de885d; ttcid=557955ae766143c6b0606c31ec79525129; tt_scid=d2J0LHktfCLq9hhl.oYd-OigE4tt7weQAkPsHjLWHD7SQTIgGZSHEAmfsYh6ZQ4Ldaa4; d_ticket=4e1af4167323346af41358716b5a1e60b2264; odin_tt=d2fbf9a3e6aa9da3e1543a2bcfbf20f88b39bd8519741587eee430a53d80c558d6d7e25b7fc1e6665a0b90bbd1b5083aec272f5ce48db7e41a8119652036fb1e; n_mh=kGDl51rtcD00QSbun1NPGxBFbpIuVI-zn25ePV67spI; sid_guard=1dfbedae37477b87ec9a464c32b57527%7C1691592621%7C5184000%7CSun%2C+08-Oct-2023+14%3A50%3A21+GMT; uid_tt=e29903b0d5266b87b5edd2a7a71caedd; uid_tt_ss=e29903b0d5266b87b5edd2a7a71caedd; sid_tt=1dfbedae37477b87ec9a464c32b57527; sessionid=1dfbedae37477b87ec9a464c32b57527; sessionid_ss=1dfbedae37477b87ec9a464c32b57527; sid_ucp_v1=1.0.0-KGE3NTNhZjMzNThhOWYzM2QwYjNmNzVkNDg1Yzk2MWIzOWQ4YzZmZjgKHwiH6-Ce9cywAhCtz86mBhiyDCAMMPj61KMGOAFA6gcaAmxmIiAxZGZiZWRhZTM3NDc3Yjg3ZWM5YTQ2NGMzMmI1NzUyNw; ssid_ucp_v1=1.0.0-KGE3NTNhZjMzNThhOWYzM2QwYjNmNzVkNDg1Yzk2MWIzOWQ4YzZmZjgKHwiH6-Ce9cywAhCtz86mBhiyDCAMMPj61KMGOAFA6gcaAmxmIiAxZGZiZWRhZTM3NDc3Yjg3ZWM5YTQ2NGMzMmI1NzUyNw; store-region=cn-cq; store-region-src=uid; csrftoken=3Kd_rnDc6jHmSpYOnVrkvwSv; MONITOR_WEB_ID=9b9ec4c0-19e0-46e0-aa0b-a5d59ec4d87a; MONITOR_DEVICE_ID=ef65df58-7ccd-4d9c-9e40-8dcb4e1999f0; msToken=hKfTafSdXlaKGQ7_uhC-GT1haWz28yCNoMAcf6b0-ReAPuUIkT9MkUVPaapRo16PXkYGNEa57GCoRWC7lZ1abQ4EI9q-lFgVblfBm0H8FZ70upWb0b9nx2oShpwmKsM='}
response=requests.get(url2,headers=headers)
str_html=response.content.decode()
print(str_html)
'''
url2='https://cc.oceanengine.com/inspiration/creative-hot/qianchuan/detail/7235138180152721419?appCode=999&period=3&listType=2&materialType=3'
browser.get(url2)
print(browser.title)

        其中url与cookie参数可以通过在巨量创意界面按F12进入开发窗口->网络->点击名称->请求url、cookie获取

 

        运行该段代码后将会打开Edge浏览器进入巨量创意网址的预登录界面

​2.2 登录网站

        通过find_element函数可以通过不同属性进行元素定位(Tips:满大大写的详细易懂,推荐http://t.csdn.cn/x2PH2),click函数模拟鼠标点击(Tips:selenium常用函数->http://t.csdn.cn/7KFtj)

time.sleep(3)
button1=browser.find_element(By.XPATH,value='//*[@id="cc-app"]/section/header/div/div/div[3]/div[3]').click()
#账号密码登录,手动滑块
time.sleep(3)
email_input=browser.find_element(By.XPATH,value='.//*[@id="cc-login"]/section/div[4]/div[1]/div/div/span/input')
passport=browser.find_element(By.XPATH,value='.//*[@id="cc-login"]/section/div[4]/div[2]/div/div/span/input')
right=browser.find_element(By.XPATH,value='.//*[@id="cc-login"]/section/div[6]/div/div/div')
email_input.send_keys('账号')
passport.send_keys('密码')
right.click()
button2=browser.find_element(By.XPATH,value='.//*[@id="cc-login"]/section/div[7]/button').click()

        time.sleep操作是为了给程序缓冲时间,既selenium的运行速度与网络有关,如果在同一页面的操作则不需要休眠操作,否则就必须进行休眠不然会报错,因为网页未跳转或显示是无法定位元素,运行结果如下

        该部分需要手动滑块,因此设置了较长的休眠时间以便手动操作;可先获取验证原图与滑块图片url,通过cv2库进行移动距离判断(借鉴博主:钢铁の洪流,文章:http://t.csdn.cn/yqhSg

def findpic(target='fadebg.png', template='slider.png'):  # 缺口背景图路径, 滑块图片路径
    target_rgb = cv2.imread(target)     # 读取缺口背景图
    target_gray = cv2.cvtColor(target_rgb, cv2.COLOR_BGR2GRAY)  # 将缺口背景图 BGR格式转换成灰度图片
    template_rgb = cv2.imread(template, 0)  # 读取滑块图,第二个参数0表示灰度模式
    res = cv2.matchTemplate(target_gray, template_rgb, cv2.TM_CCOEFF_NORMED)  # 模板匹配,在大图中找小图
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    return max_loc[0] 

2.3 进入指定千川视频搜索

time.sleep(5)
#关闭无用窗口
xx=browser.find_element(By.XPATH,value='.//*[@id="cc-app"]/section/div/div[2]/div/div/div[2]').click()
juliangchuangyi=browser.find_element(By.XPATH,value='.//*[@id="cc-app"]/section/header/div/div/div[2]/div[2]/div[1]/a/div').click()
time.sleep(3)
wozhidaole=browser.find_element(By.XPATH,value='./html/body/div[5]/div/div/div[3]/div/button').click()
juliangqianchuan=browser.find_element(By.XPATH,value='.//*[@id="app"]/section/main/div/div/div[1]/div/div[3]/div[2]/div[2]/a/div/span').click()
time.sleep(3)
search_inf=browser.find_element(By.XPATH,value='//*[@id="app"]/section/main/div/div/div[2]/div/div/div[1]/div[1]/div[2]/div[2]/div[2]/div[1]/input')
search_inf.send_keys('耳机')
#模拟键盘回车键
search_inf.send_keys(Keys.ENTER)
time.sleep(3)
browser.find_element(By.XPATH,value='//*[@id="app"]/section/main/div/div/div[2]/div/div/div[2]/div/div/div[3]/div/div[1]/div/img').click()
time.sleep(2)
browser.find_element(By.XPATH,value='//*[@id="app"]/section/main/div/div/div[2]/div/div/div[2]/div/div/div[3]/div/div[4]/div[2]/div[2]/button').click()

        运行代码后会搜索有关“耳机”内容素材并且打开新网页

         此时注意获取网页句柄,切换至新开网页否则会再旧网页进行操作;这边网页句柄的存储顺序个人认为为打开网页的先后顺序

#获取网页句柄
time.sleep(3)
handles = browser.window_handles
browser.switch_to.window(handles[1])#切换到第2个界面,解决网页跳转问题

        目标数据为网页中表格内的数据 

        通过开发者控制台能发现存储规律

        通过遍历与元素定位操作模拟点击分别收集(1)视频类型(2)音乐类型(3)营销卖点(4)视频情节的点击指数、视频数量指数、具体类型数据并存入excel

time.sleep(3)
current_page=browser.page_source
tree=etree.HTML(current_page)
result=etree.tostring(tree).decode('utf-8')
#视频内获取数据
type_name=['视频类型','视频音乐','营销卖点','视频情节']
click_paths=['//*[@id="j-section-feature"]/div[2]/div[1]/span[1]','//*[@id="j-section-feature"]/div[2]/div[1]/span[2]','//*[@id="j-section-feature"]/div[2]/div[1]/span[3]','//*[@id="j-section-feature"]/div[2]/div[1]/span[3]']
for click_node in click_paths:
    browser.find_element(By.XPATH,value=click_node).click()#点击跳转
    lists=tree.xpath('.//*[@id="j-section-feature"]/div[2]/div[2]/div[1]/div[2]/div[1]/div[3]/div')
    for typ in type_name:
        for alist in lists:
            vedio_name=alist.xpath('.//div[@class=\'bui-popover-body\']/h3/text()')
            click_per=alist.xpath('.//div[@class=\'bui-popover-body\']/ul/li[1]/text()')
            num_per=alist.xpath('.//div[@class=\'bui-popover-body\']/ul/li[2]/text()')
            data_list.append({typ:vedio_name,'点击指数':click_per,'数量指数':num_per})
df=pd.DataFrame(data_list)
df.to_csv('手机类别视频汇总.xlsx',encoding='utf-8',index=False)

         此时如果要继续查找“影音数码”视频的相关数据则需要先通过句柄控制返回搜索界面,同搜索“耳机”内容一致进行操作

time.sleep(3)
handles = browser.window_handles
browser.switch_to.window(handles[0])#切换到第2个界面,解决网页跳转问题
time.sleep(3)
search_inf=browser.find_element(By.XPATH,value='//*[@id="app"]/section/main/div/div/div[2]/div/div/div[1]/div[1]/div[2]/div[2]/div[2]/div[1]/input')
search_inf.send_keys(Keys.CONTROL,'a')
search_inf.send_keys('影音娱乐')
search_inf.send_keys(Keys.ENTER)
time.sleep(3)
browser.find_element(By.XPATH,value='.//*[@id="app"]/section/main/div/div/div[2]/div/div/div[2]/div/div/div[3]/div/div[1]/div/img').click()
time.sleep(2)
browser.find_element(By.XPATH,value='//*[@id="app"]/section/main/div/div/div[2]/div/div/div[2]/div/div/div[3]/div/div[4]/div[2]/div[2]/button').click()

        值得注意的是,搜索网页中搜索框有“耳机”内容需要进行清楚,这里曾使用clear函数进行清除但无响应,因此选择模拟ctrl+a全选内容框修改内容,获取方式同“耳机”视频获取方式相同便不再赘述。

3 数据处理

        通过to_csv函数保存数据,此次学习没有使用正则语言已经pandas库进行数据处理,学习路程还很长 

认清平庸好好学习,早日摆脱**公司!-rc

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
学习selenium爬虫Python入门,你可以参考以下步骤和资源: 1. 首先,你需要掌握Python基础知识,包括语法、数据类型、变量、条件语句、循环和函数等。你可以参考[1]中提到的Python基础部分进行学习和练习。 2. 掌握Python的库和工具对于爬虫技术也非常重要。在学习selenium爬虫之前,你需要了解Urllib、requests等库的使用。你可以参考中提到的这些内容进行学习。 3. 学习解析技术也是爬虫中的关键一环。你可以学习XPath、JSONPath和beautiful等解析技术,以便从网页中提取所需的数据。同样,你可以参考中提到的相关部分进行学习。 4. 掌握selenium库的使用是进行Web自动化爬虫的关键。你可以通过学习selenium的API文档和示例代码来了解其基本用法。另外,你也可以参考中提到的selenium部分进行学习。 5. 最后,了解Scrapy框架是爬虫进阶的一步。Scrapy是一个强大的Python爬虫框架,可以帮助你更高效地编写和管理爬虫。你可以参考中提到的Scrapy部分进行学习。 总结起来,学习selenium爬虫Python入门可以通过以下步骤进行:掌握Python基础知识 -> 学习Urllib和requests库 -> 学习解析技术(如XPath、JSONPath和beautiful) -> 掌握selenium库的使用 -> 了解Scrapy框架。希望这些信息能对你有所帮助! 引用: : 本套视频教程适合想掌握爬虫技术的学习者,以企业主流版本Python 3.7来讲解,内容包括:Python基础、Urllib、解析(xpath、jsonpath、beautiful)、requests、selenium、Scrapy框架等。针对零基础的同学可以从头学起。<span class="em">1</span> #### 引用[.reference_title] - *1* [零基础Python爬虫从入门到精通-视频教程网盘链接提取码下载 .txt](https://download.csdn.net/download/m0_66047725/81741433)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值