Selenium-[实例]猫眼电影爬取
import random
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
DIRVER_PATH = r'C:\Users\Administrator\Desktop\chromedriver.exe'
# 跳过selenium检测
STEALTH_JS = r'C:\Users\Administrator\Desktop\stealth.min.js'
def main():
service = ChromeService(executable_path=DIRVER_PATH)
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
# 不退出浏览器
# options.add_experimental_option('detach', True)
# 防止检测到selenium
options.add_argument("--disable-blink-features")
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(service=service, options=options)
with open(STEALTH_JS) as f:
js = f.read()
driver.execute_cdp_cmd(
cmd="Page.addScriptToEvaluateOnNewDocument",
cmd_args={
"source": js
}
)
# 打开一个标签页
# driver.get("https://bot.sannysoft.com/")
driver.get("https://www.maoyan.com/films?showType=3")
# 最大化
driver.maximize_window()
# 隐式等待最长时间:5秒
driver.implicitly_wait(5)
while next_page_ele := driver.find_element(By.LINK_TEXT, "下一页"):
elements = driver.find_elements(By.XPATH,'//div[@class="movies-list"]/dl/dd/div[@class="movie-item film-channel"]')
for index, element in enumerate(elements, 1):
print("点击电影item元素")
ActionChains(driver).move_to_element(element).click().perform()
print("切换到最后的标签页")
driver.switch_to.window(driver.window_handles[-1])
print("查找评分的元素")
try:
# 评分是字体加密的,这时候就可以利用针对元素进行截图,然后丢给OCR识别
rate_ele = driver.find_element(By.XPATH, "//span[@class='index-left info-num ']/span")
# 丢给OCR识别
except:
print("暂无评分")
else:
print("可以获取到评分元素")
# 关闭标签页
driver.close()
# 回到原来的页面
driver.switch_to.window(driver.window_handles[0])
# 休息一下
time.sleep(random.randint(1, 3))
print("点击下一页")
#ActionChains(driver,).move_to_element(next_page_ele).click().perform()
next_page_ele.click()
time.sleep(10)
driver.quit()
if __name__ == '__main__':
main()
Selenium-[实例]猫眼电影爬取的更多相关文章
- 猫眼电影爬取(三):requests+pyquery,并将数据存储到mysql数据库
还是以猫眼电影为例,这次用pyquery库进行爬取 1.简单demo,看看如何使用pyquery提取信息,并将提取到的数据进行组合 # coding: utf-8 # author: hmk impo ...
- 猫眼电影爬取(二):requests+beautifulsoup,并将数据存储到mysql数据库
上一篇通过requests+正则爬取了猫眼电影榜单,这次通过requests+beautifulsoup再爬取一次(其实这个网站更适合使用beautifulsoup库爬取) 1.先分析网页源码 可以看 ...
- 猫眼电影爬取(一):requests+正则,并将数据存储到mysql数据库
前面讲了如何通过pymysql操作数据库,这次写一个爬虫来提取信息,并将数据存储到mysql数据库 1.爬取目标 爬取猫眼电影TOP100榜单 要提取的信息包括:电影排名.电影名称.上映时间.分数 2 ...
- 使用Selenium&PhantomJS的方式爬取代理
前面已经爬取了代理,今天我们使用Selenium&PhantomJS的方式爬取快代理 :快代理 - 高速http代理ip每天更新. 首先分析一下快代理,如下 使用谷歌浏览器,检查,发现每个代理 ...
- 单线程多任务协程vip电影爬取
单线程多任务协程vip电影爬取 --仅供学习使用勿作商用如有违规后果自负!!! 这几天一直在使用python爬取电影,主要目的也是为了巩固前段时间强化学习的网络爬虫,也算是一个不错的检验吧,面对众 ...
- Python实训day07pm【Selenium操作网页、爬取数据-下载歌曲】
练习1-爬取歌曲列表 任务:通过两个案例,练习使用Selenium操作网页.爬取数据.使用无头模式,爬取网易云的内容. ''' 任务:通过两个案例,练习使用Selenium操作网页.爬取数据. 使用无 ...
- 使用selenium+phantomJS实现网页爬取
有些网站反爬虫技术设计的非常好,很难采用WebClient等技术进行网页信息爬取,这时可以考虑采用selenium+phantomJS模拟浏览器(其实是真实的浏览器)的方式进行信息爬取.之前一直使用的 ...
- 爬虫新手学习2-爬虫进阶(urllib和urllib2 的区别、url转码、爬虫GET提交实例、批量爬取贴吧数据、fidder软件安装、有道翻译POST实例、豆瓣ajax数据获取)
1.urllib和urllib2区别实例 urllib和urllib2都是接受URL请求相关模块,但是提供了不同的功能,两个最显著的不同如下: urllib可以接受URL,不能创建设置headers的 ...
- selenium+谷歌无头浏览器爬取网易新闻国内板块
网页分析 首先来看下要爬取的网站的页面 查看网页源代码:你会发现它是由js动态加载显示的 所以采用selenium+谷歌无头浏览器来爬取它 1 加载网站,并拖动到底,发现其还有个加载更多 2 模拟点击 ...
- 前端反爬虫策略--font-face 猫眼数据爬取
1 .font-face定义了字符集,通过unicode去印射展示. 2 .font-face加载网络字体,我么可以自己创建一套字体,然后自定义一套字符映射关系表例如设置0xefab是映射字符1, ...
随机推荐
- js监控微信浏览器的自带的返回事件(延迟解决微信返回立即执行popstate事件)
/** * 浏览器回退事件监听 */ var listenerBackHandler = { param: { isRun: false, //防止微信返回立即执行popstate事件 }, list ...
- 利用别名简化进入docker容器数据库的操作
之前研究docker和数据库的交互,越发对docker这个东西喜爱了.因为平常偶尔会用到各类数据库测试环境验证一些想法,需要进一步简化进入到这些环境的步骤. 比如我现在有三套docker容器数据库测试 ...
- 使用 OpenTelemetry 构建 .NET 应用可观测性(3):.NET SDK 概览
目录 前言 概览 opentelemetry-dotnet opentelemetry-dotnet-contrib opentelemetry-dotnet-instrumentation SDK ...
- Redis系列之——Redis-Sentinel
文章目录 一 主从复制高可用 二 架构说明 三 安装配置 四 客户端连接 一 主从复制高可用 #主从复制存在的问题: #1 主从复制,主节点发生故障,需要做故障转移,可以手动转移:让其中一个slave ...
- 关于C++拷贝控制
通常来说,对于类内动态分配资源的类需要进行拷贝控制:要在拷贝构造函数.拷贝赋值运算符.析构函数中实现安全高效的操作来管理内存.但是资源管理并不是一个类需要定义自己的拷贝控制成员的唯一原因.C++ Pr ...
- 【最佳实践】高可用mongodb集群(1分片+3副本):规划及部署
结合我们的生产需求,本次详细整理了最新版本 MonogoDB 7.0 集群的规划及部署过程,具有较大的参考价值,基本可照搬使用. 适应数据规模为T级的场景,由于设计了分片支撑,后续如有大数据量需求,可 ...
- [NSSCTF 2022 Spring Recruit]babyphp
打开靶机,先看了一遍代码,发现要拿到flag,就必须先满足三个条件,即分别为a,b,c 第一层:需要a满足条件 isset($_POST['a'])&&!preg_match('/[0 ...
- 每天5分钟复习OpenStack(三)
每天5分钟复习OpenStack(三) 为什么要拉起kvm 虚拟机要熟悉这些操作? 作为一个运维工程师,将来有大量的时间是在制作镜像,镜像的制作就是在kvm虚拟化环境拉起kvm 管理的虚拟机的过程,安 ...
- 2023 版 Java和python开发线性代数探索
目录 前景提示 需求 分析 1.初始化不需要指定矩阵的尺寸,并且可以直接传入数据. 2.可以计算2x2矩阵的逆 3.可以做2x2的矩阵乘法 Java版本开发 一. 开发详情 1.开发一个子类,如图所示 ...
- 我整理了一份Flink流计算入门教程清单(转)
好久不见! 作为技术出身的我,不太会写软文广告,今天就直接来个硬广.之前与人民邮电出版社合作的<Flink原理与实践>经过一年多时间的打磨和润色,这两天终于与大家见面了,恳请各位朋友多多支 ...