极客教程 scrapy和selenium

news2024/11/25 2:11:15

selenium

极客教程

使用python 调用scrapy的 爬虫Spider并且相互之间可以正常传参实现全局

常规情况创建,使用命令

scrapy genspider baidu "baidu.com"

Python中Scrapy框架详解

浏览器调试模式下(F12 或 右键检查)Command + shift + p

Disable javascript 禁用js

Enable javascript 恢复js

三、如何获取js渲染的节点?

1.使用Selenium模拟浏览器操作

Selenium是一个自动化测试工具,可以模拟人类操作浏览器。我们可以使用Selenium来打开网页并执行js代码,然后再通过BeautifulSoup或正则表达式提取数据。但是这种方法比较慢,并且需要下载浏览器驱动。
备注:dryscrape selenium

2.使用PhantomJS(Selenium放弃了PhantomJS方法)

PhantomJS是一个无界面的Webkit浏览器,可以用来执行js代码并获取渲染后的HTML代码。相比于Selenium,它更加轻便快速,并且不需要下载额外的浏览器驱动。

3.使用Pyppeteer

Pyppeteer是一个Python版的Headless Chrome工具,也可以用来执行js代码并获取渲染后的HTML代码。与PhantomJS相比,它更加稳定和可靠,但是需要安装Chromium浏览器。

实现方案:
http://phantomjs.org/
https://blog.51cto.com/u_16099306/6600178

Pyppeteer入门及中文教程

Scrpay-动态页面爬取

Scrapy 和 Pyppeteer 更优雅的对接方案
Pyppeteer 动态加载没有成功

回来修复bug

from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get("http://hotel.qunar.com/")
data = driver.title
print (data)

Traceback (most recent call last):
  File "D:\workplace\ScrapyDemo\main.py", line 53, in <module>
    driver = webdriver.PhantomJS()
AttributeError: module 'selenium.webdriver' has no attribute 'PhantomJS'

Process finished with exit code 1

原因:
新版的 selenium已经放弃PhantomJS,所以才会出现module ‘selenium.webdriver’ has no attribute ‘PhantomJS’。PhantomJS安装都是最新版本,pip install selenium安装的也是最新版本。

(venv) > pip uninstall selenium       
Found existing installation: selenium 4.11.2
Uninstalling selenium-4.11.2:
  Would remove:
    d:\workplace\scrapydemo\venv\lib\site-packages\selenium-4.11.2.dist-info\*
    d:\workplace\scrapydemo\venv\lib\site-packages\selenium\*
Proceed (Y/n)? y
  Successfully uninstalled selenium-4.11.2
(venv) > pip install selenium==3.8.0  
Collecting selenium==3.8.0
  Downloading selenium-3.8.0.tar.gz (805 kB)

PhantomJS介绍
PhantomJS是一个基于webkit的JavaScript API。它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何你可以在基于webkit浏览器做的事情,它都能做到。它不仅是个隐形的浏览器,提供了诸如CSS选择器、支持Web标准、DOM操作、JSON、HTML5、Canvas、SVG等,同时也提供了处理文件I/O的操作,从而使你可以向操作系统读写文件等。PhantomJS的用处可谓非常广泛,诸如前端无界面自动化测试(需要结合Jasmin)、网络监测、网页截屏等。

PhantomJS官方地址:http://phantomjs.org/。

PhantomJS官方API:http://phantomjs.org/api/。

PhantomJS官方示例:http://phantomjs.org/examples/。

PhantomJS GitHub:https://github.com/ariya/phantomjs/。

Windows系统下Chromedriver.exe安装及配置
在利用selenium工具进行Web自动化测试时,必须先要安装浏览器驱动,通常比较常用的是谷歌浏览器和火狐浏览器。

一、浏览器驱动下载地址
1.浏览器驱动官网:http://chromedriver.storage.googleapis.com/index.html
https://googlechromelabs.github.io/chrome-for-testing/
2.淘宝镜像网站(推荐):http://npm.taobao.org/mirrors/chromedriver/

二、配置过程
首先需要在打开网站之前查看谷歌浏览器的版本,驱动必须与浏览器版本一致,否则不起作用。

在这里插入图片描述
在这里插入图片描述

其次,打开驱动网站,找到与版本号一致的驱动下载

在这里插入图片描述

selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep())—基于python

使用python自带模块time的sleep方式
缺点:即使网络条件较好时,依旧按照预定固定时间等待,一般不建议使用,脚本调试可使用。

示例脚本:

from selenium import  webdriver
from time import sleep
class TestWait(object):
 driver = webdriver.Chrome()
 driver.get(http://www.baidu.com) 
 def test_sleep(self):
  self.driver.find_element_by_id("kw").send_keys("sleep test")
  # sleep(2) #等待固定时间
  self.driver.implicitly_wait(2)  # 隐式等待
  self.driver.find_element_by_id("su").click()
  self.driver.quit()
if __name__ == '__main__':
 wait=TestWait()
 wait.test_sleep()

2 隐式等待(implicitly_wait)
隐式等待设置的时间是最长的时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步。

注意:隐式等待对driver整个周期都起作用,一般在最开始设置一次就可以了。不要当做固定等待,哪里都设置隐式等待。

driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.implicitly_wait(seconds)
示例脚本:

from selenium import  webdriver
from time import sleep 
class TestWait(object):
 driver = webdriver.Chrome()
 driver.get(http://www.baidu.com) 
 def test_sleep(self):
  self.driver.find_element_by_id("kw").send_keys("sleep test")
  self.driver.implicitly_wait(2)  # 隐式等待
  self.driver.find_element_by_id("su").click()
  self.driver.quit()
if __name__ == '__main__':
 wait=TestWait()
 wait.test_sleep()

3 显示等待(WebDriverWait)
显式等待允许等待条件的发生,所以非常适合在浏览器及其DOM和WebDriver脚本之间同步状态。
示例脚本:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
class TestWait(object):
 def setup(self):
  self.driver = webdriver.Chrome()
  self.driver.get(http://www.baidu.com) 
 def test_webdreiverwait(self):
  webdreiverwaits =WebDriverWait(self.driver,2)
  webdreiverwaits.until(ec.title_is("百度一下,你就知道"))
  self.driver.find_element_by_id("kw").send_keys("test_webdreiverwait test")
  self.driver.find_element_by_id("su").click() 
 def teardown(self):
  self.driver.quit() 
if __name__ == '__main__':
 wait=TestWait()
 wait.test_webdreiverwait()

Python3+Selenium 配置Chrome选项
携带cookie
https://www.cnblogs.com/clement-jiao/p/10889234.html

读取大型文件
在这里插入图片描述

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

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

相关文章

ospf 案例

OSPF 基础案例 配置 S1 交换机 [S1]int LoopBack 0 [S1-LoopBack0]ip addr 1.1.1.1 32[S1]vlan batch 20 30 Info: This operation may take a few seconds. Please wait for a moment...done.[S1]int vlanif 20 [S1-Vlanif20]ip addr 192.168.20.1 24 [S1-Vlanif20]int vlani…

新版Android Studio模拟器浮动

&#xff08;水一篇&#xff0c;但其实很多入门同学不知道&#xff09; 安装新版Andorid Studio后会发现模拟器是内嵌在AS中的&#xff0c;如何让她浮动

创建型模式-单例模式

文章目录 一、创建型模式1. 单例设计模式1.1 单例模式的结构1.2 单例模式的实现&#xff08;1&#xff09;饿汉式-方式1&#xff08;静态变量方式&#xff09;&#xff08;2&#xff09;饿汉式-方式2&#xff08;静态代码块方式&#xff09;&#xff08;3&#xff09;懒汉式-方…

lammps拉伸初始应力不为零原因及解决办法

拉伸模拟是研究材料拉伸性能的常用方法。通常情况下&#xff0c;初始应力为零&#xff0c;以获得准确的应力-应变曲线。 然而&#xff0c;在某些情况下&#xff0c;模拟得到的初始应力大于零或者小于零。 &#xff08;1&#xff09;初始应力不为零的原因 根本原因是在拉伸前…

SpringBoot + Docker 实现一次构建到处运行~

一、容器化部署的好处 图片 Docker 作为一种新兴的虚拟化方式&#xff0c;它可以更高效的利用系统资源&#xff0c;不需要进行硬件虚拟以及运行完整操作系统等额外开销。 传统的虚拟机技术启动应用服务往往需要数分钟&#xff0c;而 Docker 容器应用&#xff0c;由于直接运行…

【Linux 网络】网络层协议之IP协议

IP协议 IP协议所处的位置网络层要解决的问题IP协议格式分片与组装网段划分特殊的IP地址IP地址的数量限制私网IP地址和公网IP地址路由 IP协议所处的位置 IP指网际互连协议&#xff0c;Internet Protocol的缩写&#xff0c;是TCP/IP体系中的网络层协议。 网络层要解决的问题 网络…

C++11 新特性 ---- 类成员的快速初始化

一、类成员的快速初始化 1.C98 标准的类成员初始化 ① 初始化类中的静态成员常量("就地声明")&#xff1a; 类声明 : 等号 加初始值 ② 初始化类中的非静态成员变量&#xff1a; 初始化 : 必须在构造函数中进行 #include <iostream> using namespace…

无涯教程-Perl - 格式化

Perl使用称为“formats”的模板来输出内容。要使用Perl的格式函数&#xff0c;必须先定义一种格式&#xff0c;然后才能使用该格式写入格式化的数据。 定义格式 以下是定义Perl格式的语法- format FormatName fieldline value_one, value_two, value_three fieldline value…

vue3中CompositionApi理解与使用

CompositionApi&#xff0c;组合式API&#xff0c;相当于react中hooks&#xff0c;函数式。 优势&#xff1a;1&#xff0c;增加了代码的复用性&#xff08;类似mixin&#xff0c;slot&#xff0c;高阶组件功能&#xff09; 2&#xff0c;代码可读性更好。可以将处理逻辑和视图…

75. 颜色分类

题目链接&#xff1a;力扣 解题思路&#xff1a;因为整个nums数组中只有0&#xff0c;1&#xff0c;2三个数组成。对nums升序排序后&#xff0c;0一定都在数组的最左边&#xff0c;2一定都在数组的最右边&#xff0c;1在数组的中间。那么只需要将0移动到数组的左边&#xff0c;…

西电-印刷电路板(PCB)设计指南0903完整版

PCB设计是以电路原理图为根据,实现电路设计者所需要的功能。 最近我找到一份西安电子科技大学的PCB设计指南的课件,课件内容非常夯实详尽: 分为通用电路篇和高速电路篇,包含了: PCB基础知识 PCB设计步骤和规范 电流路径分析、常见类型PCB设计 传输线与阻抗匹配、信号…

【Linux】【预】配置虚拟机的桥接网卡+nfs

【Linux】【预】配置虚拟机的桥接网卡 1. 配置VM虚拟机的桥接网络2 配置Win10中的设置3.配置Linux中的IP4. 串口连接开发板&#xff0c;配置nfs5 修改网络文件6 验证nfs 是否成功总结 1. 配置VM虚拟机的桥接网络 右击设置&#xff0c;选择添加网络&#xff0c;按照如下顺序操作…

解决Vs Code工具开发时 保存React文件时出现乱码情况

Vs Code工具开发时 保存React文件时出现乱码情况 插件库搜索:JS-CSS-HTML Formatter 把这个插件禁用或者卸载就解决保存时出现乱码的问题了; 如果没有解决,再看下面方案! 出现乱码问题通常是因为文件的编码格式不正确。您可以尝试以下解决方法&#xff1a; 确认文件编码格式&a…

泛型和通配符

目录 1. 什么是泛型 2. 泛型是如何编译的&#xff1f; 3. 泛型的上界 小栗子1&#xff1a; 小栗子2&#xff1a; 4. 泛型方法 5. 通配符 小栗子&#xff1a; 错误的做法和原因&#xff1a; 6. 通配符的上界&#xff08;多用来取数据&#xff09; 7. 通配符的下界&am…

【C#学习笔记】类型转换

文章目录 类型转换字符转数字GetNumericValueConvert.ToInt32隐式转换计算 字符串转数字Parse 或 TryParse 方法 字节数组转整数 as&#xff0c;is强制类型转换isas 用户定义的转换 类型转换 我们简单地将值类型分为5种&#xff1a;整数型&#xff0c;浮点型&#xff0c;布尔型…

Docker环境下MySQL备份恢复工具XtraBackup使用详解 | Spring Cloud 62

一、XtraBackup 简介 Percona XtraBackup是一个开源的MySQL和MariaDB数据库备份工具&#xff0c;它能够创建高性能、一致性的备份&#xff0c;并且对生产环境的影响很小。Percona XtraBackup通过在不停止MySQL服务器的情况下&#xff0c;复制InnoDB存储引擎的数据文件和事务日…

react18之08自定义hook (简单的axios-get、修改浏览器title、localStorage、获取滚动条位置、img转换为base64)

目录 react18之自定义hook ()01&#xff1a;自定义一个 简单的axios hook 发起get请求useHttp.jsx使用useHttp hook效果 02&#xff1a;自定义一个 修改浏览器title hook03&#xff1a;自定义一个 localStorage(获取、存储、移除) hookuseLocalStorage.jsx使用hook效果 04&…

【JVM】 垃圾回收篇——自问自答(1)

Q什么是垃圾&#xff1a; 运行程序中&#xff0c;没用任何指针指向的对象。 Q为什么需要垃圾回收&#xff1f; 内存只分配&#xff0c;不整理回收&#xff0c;迟早会被消耗完。 内存碎片的整理&#xff0c;为新对象腾出空间 没有GC程序无法正常进行。 Q 哪些区域有GC&#…

【C++学习】STL容器——list

目录 一、list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list 迭代器失效 二、list的模拟实现 2.1 模拟实现list 三、list和vector的对比…

On Evaluation of Embodied Navigation Agents 论文阅读

论文信息 题目&#xff1a;On Evaluation of Embodied Navigation Agents 作者&#xff1a;Peter Anderson&#xff0c;Angel Chang 来源&#xff1a;arXiv 时间&#xff1a;2018 Abstract 过去两年&#xff0c;导航方面的创造性工作激增。这种创造性的输出产生了大量有时不…