极客教程 scrapy和selenium

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)? ySuccessfully uninstalled selenium-4.11.2
(venv) > pip install selenium==3.8.0  
Collecting selenium==3.8.0Downloading 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.rhkb.cn/news/79109.html

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

相关文章

八、Spring 整合 MyBatis

文章目录 一、Spring 整合 MyBatis 的关键点二、Spring 整合 MyBatis 的步骤2.1 创建 Maven 项目&#xff0c;并导入相关依赖2.2 配置 Mybatis 部分2.3 配置 Spring 部分2.3 配置测试类 一、Spring 整合 MyBatis 的关键点 1、 将 Mybatis 的 DataSource (数据来源)的创建和管理…

Oracle-ORA-00600:[ktspffbmb:objdchk_kcbnew_3]

问题背景: 应用执行存储过程报错ORA-00600: 内部错误代码, 参数: [ktspffbmb:objdchk_kcbnew_3], [0], [3303775], [4], [], [], [], [], [], [], [], []&#xff0c;导致过程无法正常执行 ORA-00600: 内部错误代码, 参数: [ktspffbmb:objdchk_kcbnew_3], [0], [3303775], [4]…

电力系统监控太单调了!这个技能更高级!

随着科技的飞速发展&#xff0c;电力行业正迎来着全新的智能化变革。其中&#xff0c;配电柜监控作为电力系统的关键组成部分&#xff0c;扮演着不可忽视的角色。 配电柜监控能够确保电力系统的安全运行、提高供电可靠性&#xff0c;并迅速响应潜在问题&#xff0c;以减少停电时…

iPhone苹果手机地震预警功能怎么开启?

iPhone苹果手机地震预警功能怎么开启&#xff1f; 1、打开iPhone苹果手机设置&#xff1b; 2、在iPhone苹果手机设置内找到辅助功能&#xff1b; 3、在辅助功能内找到触控&#xff1b; 4、在iPhone苹果手机辅助功能触控内找到振动&#xff0c;如果是关闭状态请启&#xff1b; …

QGraphicsView实现简易地图3『局部加载-地图缩放』

前文链接&#xff1a;QGraphicsView实现简易地图2『瓦片经纬度』 第一篇文章提到过&#xff0c;当地图层级较大时&#xff0c;暴力全加载地图会造成程序卡顿&#xff0c;因此需要实现地图的局部加载。 实现思路&#xff1a;以地图窗口&#xff08;以下称为视口&#xff09;为地…

Redis键值设计

1.1、优雅的key结构 Redis的Key虽然可以自定义&#xff0c;但最好遵循下面的几个最佳实践约定&#xff1a; 遵循基本格式&#xff1a;[业务名称]:[数据名]:[id]长度不超过44字节不包含特殊字符 例如&#xff1a;我们的登录业务&#xff0c;保存用户信息&#xff0c;其key可以…

Deep Walk 和 Node2Vec:图嵌入

特杰帕尔库马瓦特 一、说明 DeepWalk 是一种基于图的机器学习算法&#xff0c;可为给定图生成节点嵌入。它由纽约大学的 Bryan Perozzi、Rami Al-Rfou 和 Steven Skiena 于 2014 年开发。 该算法的目标是通过分析图中每个节点的局部邻域来学习图中每个节点的表示。 DeepWalk应…

香港人力资源服务商迦里仕人才,申请纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于香港的人力资源服务商迦里仕人才&#xff08;Galaxy Payroll Group&#xff09;近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&am…

Scrum敏捷开发流程图怎么画?

1. 什么是Scrum敏捷开发流程图&#xff1f; Scrum敏捷开发流程图是一种可视化工具&#xff0c;用于形象地描述Scrum敏捷开发方法中的工作流程和活动。Scrum敏捷开发流程图展示了项目从需求收集到产品交付的整个开发过程&#xff0c;帮助团队理解和跟踪项目进展&#xff0c;促…

解决VScode远程服务器时opencv和matplotlib无法直接显示图像的问题

解决VScode远程服务器时opencv和matplotlib无法直接显示图像的问题 1、本方案默认本地已经安装了VScode与MobaXterm2、在服务器端3、在本地端安装MobaXterm4、测试5、opencv显示测试&#xff08;测试过程中需保持MobaXterm开启的状态&#xff09;6、 matplotlib显示测试&#x…

原型链污染

文章目录 1. javascript 原型链2. 原型链变量的搜索3. prototype 原型链污染4. 原型链污染例题4.1 题1&#xff1a;4.2.题2&#xff1a; 1. javascript 原型链 js在ECS6之前没有类的概念&#xff0c;之前的类都是用funtion来声明的。如下 可以看到b在实例化为test对象以后&…

ElasticSearch:全文检索及倒排索引原理

1.从全文检索说起 首先介绍一下结构化与非结构化数据&#xff1a; 结构化数据将数据具有的特征事先以结构化的形式定义好&#xff0c;数据有固定的格式或有限的长度。典型的结构化数据就是传统关系型数据库的表结构&#xff0c;数据特征直接体现在表结构的字段上&#xff0c;…

电商数据获取:网络爬虫还是付费数据接口?

随着电商行业的迅速发展&#xff0c;对电商数据的需求也越来越大。在获取电商数据时&#xff0c;常常面临一个选择&#xff1a;是自己编写网络爬虫进行数据爬取&#xff0c;还是使用现有的付费数据接口呢&#xff1f;本文将从成本、可靠性、数据质量等多个角度进行分析&#xf…

深入学习 Redis - 事务、实现原理、指令使用及场景

目录 一、Redis 事务 vs MySQL事务 二、Redis 事务的执行原理 2.1、执行原理 2.2、Redis 事务设计这么简单&#xff0c;为什么不涉及成 MySQL 那样强大呢&#xff1f; 三、Redis 事务的使用 3.1、使用场景 3.2、具体演示 开启/执行/放弃事务 watch 监控 watch 实现原理…

Dockerfile部署golang

使用go镜像打包&#xff0c;运行在容器内 redis和mysql用外部的 项目目录结构 w1go项目&#xff1a; Dockerfile # 这种方式是docker项目加上 本地的mysql和redis环境 # go打包的容器 FROM golang:alpine AS builder# 为我们镜像设置一些必要的环境变量 ENV GO111MODULEon …

Nginx可视化NginxWebUI

Nginx可视化Web Github:https://github.com/cym1102/nginxWebUI 支持window、linux 安装方式支持docker、window直接运行 jar包cmd运行&#xff1a;port可自行替换 java -jar -Dfile.encodingUTF-8 D:/软件/Nginx-Ui/nginxWebUI-3.6.3.jar --server.port8380 --project.hom…

centos7 yum源安装出错及更新问题

如下 首先&#xff0c;在搜索jdk时报错如下&#xff1a; 解决办法 1、进入 yum的repo目录 cd /etc/yum.repos.d/2、修改所有的CentOS文件内容 sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-*sed -i s|#baseurlhttp://mirror.centos.org|baseurlhttp://vau…

HDFS集群滚动升级以及回滚相关

HDFS集群滚动升级以及回滚相关 介绍不停机滚动升级非联邦HA集群联邦HA集群 停机升级--非HA集群HDFS集群降级和回滚异同点共同点不同点 HA集群降级&#xff08;downgrade&#xff09;注意事项 集群回滚操作 介绍 在hadoop v2中&#xff0c;HDFS支持namenode高可用&#xff08;H…

Benchmarking Augmentation Methods for Learning Robust Navigation Agents 论文阅读

论文信息 题目&#xff1a;Benchmarking Augmentation Methods for Learning Robust Navigation Agents: the Winning Entry of the 2021 iGibson Challenge 作者&#xff1a;Naoki Yokoyama, Qian Luo 来源&#xff1a;arXiv 时间&#xff1a;2022 Abstract 深度强化学习和…

java.util.NoSuchElementException: No value present-报错(已解决)

阿丹&#xff1a; 今天在spring-boot整合MongoDB的过程中出现了下面的错误&#xff0c;是因为追求新技术、更优雅产生的。 记录一下。 错误截图如下&#xff1a; 错误位置代码如下&#xff1a; 主要问题&#xff08;问题原因&#xff09;&#xff1a; 因为之前升级了我的jdk的…