0、:前言
- 该实战任务是对某视频平台中’标题’、 ‘点赞数量’、 ‘投币数量’、‘收藏数量’、‘播放次数’、以及前五条评论进行爬取。
- 要求1:可以控制爬取视频的主题(爬取主题搜索之后的内容)
- 要求2:可以控制爬取视频的数量
- 要求3:对于评论数不足5条的用0填充评论内容
- 爬虫实现流程概要:
1、检查谷歌浏览器版本,下载对应的页面驱动:
- 谷歌新版本页面驱动
- 下载驱动后,将驱动与代码放在同一文件内测试
# 方法1:老版本selenium
from selenium.webdriver import Chrome
# windows系统检查是否正确配置好可以使用selenium的chrome驱动:
driver = Chrome(executable_path='./chromedriver.exe')
driver.get(url='https://www.baidu.com/')
driver.close()
# 方法2:新版本selenium
# from selenium.webdriver import Chrome
# from selenium.webdriver.chrome.service import Service
#
# # 创建谷歌浏览器对象:
# driver = Chrome(service=Service(executable_path='./chromedriver.exe')) # mos系统换一下包名称
# driver.get(url='https://www.baidu.com/')
# driver.close()
如果百度页面一闪出现后,关闭,就说明谷歌驱动和谷歌浏览器匹配。
2、首次爬取获取你的cookies:
- cookie是字典,cookies是cookie的复数,是一个列表。cookie保存了用户的账号、密码信息,拥有cookie信息,就能不通过账号密码登录平台,因为本此爬取平台必须登录,所以需要首先获取cookies信息,方便每次测试直接通过cookies登录
- cookies是有有效期的,失效后需要重新获取
- 代码
# 1、首先模拟登录,获取B站cookies
# 导包
import time
import random
from selenium import webdriver # 谷歌浏览器插件
from selenium.webdriver.common.by import By # 定位策略
from selenium.webdriver.support.wait import WebDriverWait # 导入显式等待模块
from selenium.webdriver.support import expected_conditions as EC # 导入期望模块配合显式等待
# 网页打开时的配置代码
# 为谷歌浏览器对象修改配置(创建设置对象)
Options = webdriver.ChromeOptions()
# 不让浏览器关闭
Options.add_experimental_option("detach", True)
browser = webdriver.Chrome(executable_path='./chromedriver.exe', options=Options) # 创建谷歌浏览器对象
# 窗口最大化(因为B站每次加载显示的项目数量随页面改变)
browser.maximize_window()
URL = 'https://www.bilibili.com/'
browser.get(url=URL)
# 找到登录按钮
login_button = browser.find_element(By.CSS_SELECTOR,
'#i_cecream > div.bili-feed4 > div.bili-header.large-header > div.bili-header__bar > ul.right-entry > li:nth-child(1) > li > div > div > span')
# 点击登录按钮
login_button.click()
# 判断是否登录成功(显式等待60s直到用户名出现)
WebDriverWait(browser, 60).until(
# 等待用户名出现
EC.text_to_be_present_in_element(
(By.CSS_SELECTOR,'#i_cecream > div.bili-feed4 > div.bili-header.large-header > div.bili-header__bar > ul.right-entry > li.v-popover-wrap.header-avatar-wrap > div.v-popover.is-bottom > div > div > a.nickname-item'),
'疋瓞'
))
print('登录成功!')
# 登录成功以后获取cookie,将cookie保存到文件中
cookies = browser.get_cookies()
# cookie是字典,cookies是cookie的复数,是一个列表。
with open('Bili_cookies.txt', 'w', encoding='utf-8') as file:
file.write(str(cookies))
print('cookies写入完成!')
browser.quit() # 关闭所有标签页
3、通过cookies登录爬取信息:
- 代码
# 2、使用cookies登录【cookies隔一段时间会失效】
# 导包
import csv
import time
import random
from selenium import webdriver # 谷歌浏览器插件
from selenium