DrissionPage框架应用

DrissionPage框架应用

Scrapy框架可以自定义请求,我们经常使用的selenium,pypuppteer,playwight等模拟浏览器的环境执行网络的请求;但是以上都有被检测的风险,新晋浏览器防检测工具,不仅不需要繁琐的安装浏览器的内核,也不需要为浏览器升级后带来的版本不支持烦劳了。它可以自动调用我们本地的浏览器执行网络请求;他不仅支持浏览器的操作还支持类似requests的网络请求sessionpage,webpage,可以在模式之间相互切换,使用浏览器模式获取数据后,再使用requests的模式处理数据。在我们遇到一些不好处理的反爬虫的情况下,就可以使用这个工具帮助我们模拟人类的操作,达到获取数据的结果;下面我们介绍如何使用dp及如何与scrapy结合,最后我们部署远程浏览器,调用执行;

  • 安装DrissionPage
pip install DrissionPage
  • 使用dp运行接口案例
from DrissionPage import ChromiumPage,ChromiumOptions
co = ChromiumOptions()
co.headless(True)
# 1、设置无头模式:co.headless(True)
# 2、设置无痕模式:co.incognito(True)
# 3、设置访客模式:co.set_argument('--guest')
# 4、设置请求头user-agent:co.set_user_agent()
# 5、设置指定端口号:co.set_local_port(7890)
# 6、设置代理:co.set_proxy('http://localhost:2222')
page = ChromiumPage(co)
page.get(url)
# page.wait.ele_displayed("c:.price")  等待某一个css样式的出现
page.wait.load_start()  # 等待页面加载完成
print(page.html)

dp同样支持css、xpath的数据提取语法格式,但是使用上和parsel库还有写差别;想学习的可以去看 官方文档

  • 在scrapy中使用dp

scrapy的目录结构中有个middleware.py的文件,这个是scrapy的中间件,我们可以编写爬虫中间件、代理中间件、下载中间件等。本次我们使用下载中间件爬虫每次发起请求的结果都将被下载中间件拦截,并转发请求,将结果返回在转发回到爬虫。

from scrapy.http import HtmlResponse
from DrissionPage import ChromiumPage,ChromiumOptions
def process_request(self, request, spider):
    # Called for each request that goes through the downloader
    # middleware.
    url = request.url
    co = ChromiumOptions()
    co.headless(True)
    page = ChromiumPage(co)
    try:
        page.get(url)
        # page.wait.ele_displayed("c:.price")
        page.wait.load_start()
        # page.listen.start('https://xxxb/ajax/price/')  监听接口
        # res = page.listen.wait()  # 等待并获取一个数据包
        # print(res)
    except Exception as e:
        traceback.print_exc()
    else:
        return HtmlResponse(body=page.html,request=request,url=request.url,encoding="utf-8")
    finally:
        page.close()

这里编写好后就需要在settings.py的文件中启用中间件,格式为:

DOWNLOADER_MIDDLEWARES = {
    # '项目名称.middlewares.ProxyMiddleware': 544,
    '项目名称.middlewares.AladdinEDownloaderMiddleware': 543,
}

这样我们就配置好了scrapy中调用浏览器模拟请求了!但是我们在本地运行没有问题,线上就没办法运行,这是因为我们的dp会自动调用我们本地已有的浏览器执行网络请求,但是部署到线上服务器后,新的服务器没有安装浏览器,这个时候我就需要使用远程浏览器调用作为第三方的转发请求了。

  • 安装部署远程浏览器

这里我们使用docker 安装:

docker pull selenium/standalone-chrome

线上的docker.io会拉去失败,需要换国内的源,不换的话,就在本地把镜下先pull下来再上传服务器创建容器:

docker save -o standalone-chrome.tar selenium/standalone-chrome
# 使用工具上传这个tar包解析
docker load < standalone-chrome.tar
alt

完成之后运行

docker images
alt

开始创建容器并测试:

docker run -d -p 4444:4444 selenium/standalone-chrome

浏览器输入:ip:port/wd/hub

alt

这样就安装成功了远程浏览器

把上面的代码稍微修改一下:

from scrapy.http import HtmlResponse
from DrissionPage import ChromiumPage,ChromiumOptions
def process_request(self, request, spider):
    # Called for each request that goes through the downloader
    # middleware.
    url = request.url
    co = ChromiumOptions()
    co.headless(True)
    co.set_argument('--no-sandbox')
    co.set_argument('--incognito')
    co.set_argument("addr_or_opts='192.168.2.144:4444/wd/hub'")
    # page = ChromiumPage()
    page = ChromiumPage(co)
    try:
        page.get(url)
        # page.wait.ele_displayed("c:.price")
        page.wait.load_start()
        # page.listen.start('https://xxxb/ajax/price/')  监听接口
        # res = page.listen.wait()  # 等待并获取一个数据包
        # print(res)
    except Exception as e:
        traceback.print_exc()
    else:
        return HtmlResponse(body=page.html,request=request,url=request.url,encoding="utf-8")
    finally:
        page.close()

就可以链接远程浏览器了

  • 喜欢我的文章可以关注我并收藏:

博客站点
公众号搜索:爬虫与大模型开发

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/30852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『大模型笔记』斯坦福大学教授李飞飞在2024年数据与人工智能峰会上的人工智能历史与未来

MAC 文章目录 一. 斯坦福大学教授李飞飞在2024年数据与人工智能峰会上的人工智能历史与未来引言过去与现在现代 AI 的进步未来的发展空间智能近期进展与未来展望文字输入制作视频机器人学习AI 与人类互动医疗健康应用结语二. 参考文献一. 斯坦福大学教授李飞飞在2024年数据与人…

全球AI视频技术竞赛加速:Runway即将推出更优更快的第三代AI视频模型|TodayAI

Runway即将在未来几天推出其更优更快的第三代AI视频模型&#xff0c;这是新一代模型中最小的一个。据公司透露&#xff0c;这款名为Gen-3的模型将带来“在真实度、一致性和动态效果上的重大提升”&#xff0c;同时在速度上也有显著的加快。 去年六月&#xff0c;Runway首次推出…

Mathtype与word字号对照+Mathtype与word字号对照

字体大小对照表如下 初号44pt 小初36pt 一号26pt 小一24pt 二号22pt 小二18pt 三号16pt 小三15pt 四号14pt 小四12pt 五号10.5pt 小五9pt 六号7.5pt 小六6.5pt 七号5.5pt 八号5pt 1 保存12pt文件 首选选择第一个公式&#xff0c;将其大小改为12pt 然后依次选择 “预置”—…

ClipArt ETC - 典雅的剪贴画网站

文章目录 ClipArt ETCClippix佛罗里达教学技术中心课堂数字内容 ClipArt ETC 网站地址&#xff1a; https://etc.usf.edu/clipart/ ClipArt ETC为学生和教师提供了超过71,500件高质量的教育剪贴画。 每个插图都有图像大小的选择以及学校项目中正确引用的完整源信息。 所有图像…

【Java】已解决java.sql.SQLRecoverableException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.sql.SQLRecoverableException异常 在Java的数据库编程中&#xff0c;java.sql.SQLRecoverableException是一个重要的异常&#xff0c;它通常表示一个可以恢复的SQL异常。…

【扫雷游戏】C语言教程

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

低温环氧胶在指纹模组封装中的应用有哪些?

低温环氧胶在指纹模组封装中的应用有哪些&#xff1f; 低温环氧胶在指纹模组封装中的应用点主要包括以下几点&#xff1a; 金属环/框与FPC基板固定&#xff1a;低温固化环氧胶被推荐用于固定金属环或框到柔性印刷电路板(FPC)基板上&#xff0c;确保它们之间有稳固的连接。 传感…

国产数据库也开始堆砌功能了?试图在行业中炫技!

作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复&#xff0c; 安装迁移&#xff0c;性能优化、故障…

数位统计DP——AcWing 338. 计数问题

数位统计DP 定义 数位DP&#xff08;Digital DP&#xff09;是一种用于解决与数字的数位相关问题的动态规划算法。它将数字的每一位看作一个状态&#xff0c;通过转移状态来计算满足特定条件的数字个数或其他相关统计信息。 运用情况 统计满足特定条件的数字个数&#xff0…

成都欣丰洪泰文化传媒有限公司开网店怎么样?

在数字化浪潮汹涌的今天&#xff0c;电商行业蓬勃发展&#xff0c;成为推动经济增长的重要引擎。在这个竞争激烈的市场环境中&#xff0c;如何脱颖而出&#xff0c;成为电商领域的佼佼者&#xff1f;成都欣丰洪泰文化传媒有限公司以其专业的电商服务&#xff0c;为众多商家提供…

【Go】用 Go 原生以及 Gorm 读取 SQLCipher 加密数据库

本文档主要描述通过 https://github.com/mutecomm/go-sqlcipher 生成和读取 SQLCipher 加密数据库以及其中踩的一些坑 用 go 去生成读取 SQLCipher 数据库用 gorm 去读取 SQLCipher 数据库在生成后分别用 DBeaver、db browser 和 sqlcipher 读取 SQLCipher 数据库&#xff0c;…

1.搭建SpringBoot项目三种方式

目录 1.使用Spring Initializr 1.1访问Spring Initializr: 1.2填写项目基本信息 1.3配置项目元数据: 1.4添加依赖: 1.5生成项目: 1.6下载项目: 1.7解压项目: 1.8导入项目到IDE: 1.9运行项目: 1.10创建控制器: 1.11访问应用 2.使用IDE&#xff08;集成开发环境&…

34、shell数组+正则表达式

0、课前补充 jiafa () { result$(echo " $1 $2 " | bc ) print "%.2f\n" "$result" } ##保留小数点两位 薄弱加强点 a$(df -h | awk NR>1 {print $5} | tr -d %) echo "$a"一、数组 1.1、定义 数组的定义&am…

配电室数据中心巡检3d可视化搭建的详细步骤

要搭建配电室巡检的3D可视化系统&#xff0c;可以按照以下步骤进行&#xff1a; 收集配电室数据&#xff1a; 首先&#xff0c;需要收集配电室的相关数据&#xff0c;包括配电室的布局、设备信息、传感器数据等。可以通过实地调查、测量和设备手册等方式获取数据。 创建3D模型…

解决java.sql.SQLIntegrityConstraintViolationException: Duplicate entry ‘1‘ for key ‘book.PRIMARY‘

目录 问题 原因 解决方案 问题 场景&#xff1a;有张图书表&#xff0c;主键是自增的。现在我写了个添加图书功能。因为主键是自增的我插入时无需设置主键值。 关键代码如下&#xff1a; 然后就报这个异常了&#xff1a; 找了一圈并没有发现能解决我这个问题的。最终仔细分…

电脑桌面文件夹删除不了怎么办?6种方法快速解决,建议收藏!

桌面文件夹删不掉怎么办&#xff1f;有时会遇到桌面上的文件夹无法删除的问题&#xff0c;这是由于文件夹被系统进程或某些应用占用&#xff0c;或者是由于权限设置等原因造成的。以下是解决桌面文件夹无法删除问题的方法&#xff0c;帮助你有效地清理桌面环境。 桌面文件夹删不…

中欧科学家论坛暨第六届人工智能与先进制造国际会议(AIAM2024)

会议日期&#xff1a;2024年10月20-21日 会议地点&#xff1a;德国-法兰克福 会议官网&#xff1a;https://www.iaast.cn/meet/home/Bx130JiM 出版检索&#xff1a;EI、Scopus等数据库收录 【会议简介】 “中欧科学家论坛”由德国、法国、荷兰、瑞士、丹麦、意大利、西班牙…

欧几里得算法求解最大公约数(附代码实现,习题练习)

1.公约数、最大公约数的定义 公约数&#xff0c;亦称“公因数”。它是指能同时整除几个整数的数 。如果一个整数同时是几个整数的约数&#xff0c;称这个整数为它们的“公约数”。公约数中最大的称为最大公约数。对任意的若干个正整数&#xff0c;1总是它们的公因数。eg.30和4…

C++回溯算法(2)

棋盘问题 #include<bits/stdc.h> using namespace std; void func(int,int); bool tf(int,int); void c(); int n,k; char a[110][110]; int cnt20; int main() {cin>>n>>k;for(int i0;i<n;i){for(int j0;j<n;j){cin>>a[i][j];}}func(0,0);cout…