基于selenium的简单爬虫示例
文章目录
一、前言
现在进入了大数据时代,很多的需求都需要数据支撑。不从市场需求的角度来说,单单就技术这一方面举例,ai模型的训练就需要数据。所以说,爬虫是一个关键的技术,博主就在此分享一个爬虫示例,如果有用的话就点个赞吧,爱学习的你真棒!
二、声明
首先本项目仅供学习交流,只是一个小demo还有待完善,不得用于其他商业用途哦。
三、为什么用selenium?
博主刚开始接触爬虫时用的是requests库,但是现在很多网站有反爬机制,request库get到的东西不全。selenium库模拟的是网站的打开、关闭等操作,会获得网站的所有的信息,不会因为反爬而丢失信息。
四、代码和示例结果
点击下方链接获取代码和示例结果
https://github.com/huazhan2003/douyin_spider
五、项目需求和思路流程
1、需求
我们现在要爬取某音上某一个关键字的视频信息以及该视频发送者(达人)的信息,所需要的信息有以下几个维度:达人视频标题、达人视频链接、达人昵称、达人粉丝量、达人抖音号、简介、达人主页链接。
2、思路流程
以下是博主的思路,仅供参考:
- 打开输入关键词后的网页
- 滑动网页,保证加载更多的视频
- 获取所有的视频链接
- 进入每一个视频链接,获取视频标题和达人主页链接
- 最后进入每一个达人主页链接,获取达人的具体信息
六、代码讲解
博主只对部分重要代码进行讲解,可以对着我的github链接来看。首先博主说一下,每一个html文件的元素都有其对应的selector和xpath,用于定位该元素的位置,你可以把他们想为文件的路径。
1、滑动网页的实现
# driver = webdriver.Chrome()# driver.get(f'https://www.douyin.com/search/{key_word}?type=video')# 滑动操作defdrop_down(down_step):
time.sleep(10)# 执行页面滚动操作for x inrange(1,100,4):
j = x /9# document.documentElement.scrollTop 指定滚动条的位置# document.documentElement.scrollHeight 获取浏览器页面的最大高度
js ='document.documentElement.scrollTop = document.documentElement.scrollHeight * %f'% j
driver.execute_script(js)
time.sleep(2)
driver自带方法execute_script接受两个参数,分别为document.documentElement.scrollTop(指定滚动条的位置),document.documentElement.scrollHeight(获取浏览器页面的最大高度)。通过这两个参数,我们可以把driver.get到的网页进行滑动。
2、视频链接的获取
# 获得所有要爬取的视频链接
lis = driver.find_elements(By.CSS_SELECTOR,'#search-content-area > div > div.HHwqaG_P > div:nth-child(2) > ul li')for li in lis:
li_url = li.find_element(By.CSS_SELECTOR,'a').get_attribute('href')print(li_url)
li_urls.append(li_url)
在这里,我们使用find_elements(注意s结尾)获取当前网页CSS_SELECTOR为‘#search-content-area > div > div.HHwqaG_P > div:nth-child(2) > ul li’的所有元素。接下来,我们在每一个li元素中,通过find_element方法找到视频的链接,相当于我们使用两次的定位来获得每一个视频的链接。
3、其余信息的获取,以达人主页信息为例
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
defget_home_page(url, wait_time):
home_info =[]# 达人主页信息# 设置 Chrome 为无头模式
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')# 启动 Chrome 浏览器
driver = webdriver.Chrome(options=chrome_options)try:# 打开网页
driver.get(url)# 等待页面加载(你可能需要根据页面实际情况调整等待时间)
driver.implicitly_wait(wait_time)# 获取粉丝数量
fans_element = driver.find_element(By.XPATH,'//*[@id="douyin-right-container"]/div[2]/div/div/div[2]/div[2]/div[2]/div[2]/div[2]')
fans_text = fans_element.text
home_info.append(fans_text)# 获取抖音号
id_element = driver.find_element(By.XPATH,'//*[@id="douyin-right-container"]/div[2]/div/div/div[2]/div[2]/p/span[1]')id= id_element.text
home_info.append(id)# 获取主页简介
summary_element = driver.find_element(By.XPATH,'//*[@id="douyin-right-container"]/div[2]/div/div/div[2]/div[2]/div[3]/div/span/span/span/span/span/span')
summary = summary_element.get_attribute('innerText')
home_info.append(summary)
driver.close()finally:# 关闭浏览器
driver.quit()return home_info
原理同视频链接一样,只是我们在这里是通过xpath来提取信息,而不是selector来提取信息。注意每次打开网页要加上driver.close(),防止网页积存过多。
版权归原作者 赫兹先生 所有, 如有侵权,请联系我们删除。