Python笔记:Selenium库的使用以及结合Scrapy框架的操作案例
Selenium库的介绍
- Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击,下拉,等操作
- Selenium可以获取浏览器当前呈现的页面源代码,做到可见既可爬,对应JavaScript动态渲染的信息爬取非常有效
- 官方网址:http://www.seleniumhq.org
- 官方文档:http://selenium-python.readthedocs.io
- 中文文档:http://selenium-python-zh.readthedocs.io
- 安装:$
pip3 install selenium
(注:此处是默认mac下的python3环境执行的命令) - Selenium支持非常多的浏览器,如Chrome、Firefox、Edge等,还支持无界面浏览器PhantomJS
- ChromeDriver浏览器驱动的安装:(注意浏览器版本:)
- 首先查看当前谷歌Chrome浏览器的版本,再到下面网址下载, 注意查看对应的版本信息
- 网址:https://chromedriver.storage.googleapis.com/index.html
- Windows安装:将解压的文件:chromedriver.exe 放置到Python的Scripts目录下
- Mac/Linux安装:将解压的文件:chromedriver 放置到/usr/local/bin/目录下
- PhantomJS驱动的下载地址:http://phantomjs.org/download.html
动态渲染页面爬取
- 对于访问Web时直接响应的数据(就是response内容可见),我们使用urllib、requests或Scrapy框架爬取
- 对应一般的JavaScript动态渲染的页面信息(Ajax加载),我们可以通过分析Ajax请求来抓取信息
- 即使通过Ajax获取数据,但还有会部分加密参数,后期经过JavaScript计算生成内容,导致我们难以直接找到规律,如淘宝页面,58同城部分信息
- 为了解决这些问题,我们可以直接使用模拟浏览器运行的方式来实现信息获取
- 除了
Selenium
之外在Python中有许多模拟浏览器运行库,如:Splash、PyV8、Ghost等
Selenium的使用
1 ) 模拟谷歌浏览器访问百度首页,并输入python关键字搜索
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait#初始化一个浏览器(如:谷歌,使用Chrome需安装chromedriver)
driver = webdriver.Chrome()
#driver = webdriver.PhantomJS() #无界面浏览器
try:#请求网页driver.get("https://www.baidu.com")#查找id值为kw的节点对象(搜索输入框)input = driver.find_element_by_id("kw")#模拟键盘输入字串内容input.send_keys("python")#模拟键盘点击回车键input.send_keys(Keys.ENTER)#显式等待,最长10秒wait = WebDriverWait(driver,10)#等待条件:10秒内必须有个id属性值为content_left的节点加载出来,否则抛异常。wait.until(EC.presence_of_element_located((By.ID,'content_left')))# 输出响应信息print(driver.current_url)print(driver.get_cookies())print(driver.page_source)
finally:#关闭浏览器#driver.close()pass
2 ) 声明浏览器对象
from selenium import webdriverdriver = webdriver.Chrome() #谷歌 需:ChromeDriver驱动
driver = webdriver.FireFox() #火狐 需:GeckoDriver驱动
driver = webdriver.Edge()
driver = webdriver.Safari()
driver = webdriver.PhantomJS() #无界面浏览器
3 ) 访问页面
from selenium import webdriverdriver = webdriver.Chrome()
#driver = webdriver.PhantomJS()
driver.get("http://www.taobao.com")
print(driver.page_source)
#driver.close()
4 ) 查找节点
-
获取单个节点的方法:
find_element_by_id()
find_element_by_name()
find_element_by_xpath()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_tag_name()
find_element_by_class_name()
find_element_by_css_seletor()
- 使用案例:
from selenium import webdriver from selenium.webdriver.common.by import By#创建浏览器对象 driver = webdriver.Chrome() #driver = webdriver.PhantomJS() driver.get("http://www.taobao.com") #下面都是获取id属性值为q的节点对象 input = driver.find_element_by_id("q") print(input)input = driver.find_element_by_css_selector("#q") print(input)input = driver.find_element_by_xpath("//*[@id='q']") print(input)#效果同上 input = driver.find_element(By.ID,"q") print(input)#driver.close()
-
获取多个节点的方法:
find_elements_by_id()
find_elements_by_name()
find_elements_by_xpath()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_tag_name()
find_elements_by_class_name()
find_elements_by_css_seletor()
5 )节点交互
from selenium import webdriver
import time#创建浏览器对象
driver = webdriver.Chrome()
#driver = webdriver.PhantomJS()
driver.get("http://www.taobao.com")
#下面都是获取id属性值为q的节点对象
input = driver.find_element_by_id("q")
#模拟键盘输入iphone
input.send_keys('iphone')
time.sleep(3)
#清空输入框
input.clear()
#模拟键盘输入iPad
input.send_keys('iPad')
#获取搜索按钮节点
botton = driver.find_element_by_class_name("btn-search")
#触发点击动作
botton.click()#driver.close()
6 ) 动态链
- ActionChains是一种自动化低级别交互的方法,如鼠标移动,鼠标按钮操作,按键操作和上下文菜单交互。
- 这对于执行更复杂的操作(如悬停和拖放)很有用.
- move_to_element(to_element )-- 将鼠标移到元素的中间
- move_by_offset(xoffset,yoffset )-- 将鼠标移至当前鼠标位置的偏移量
- drag_and_drop(源,目标)-- 然后移动到目标元素并释放鼠标按钮。
- pause(秒)-- 以秒为单位暂停指定持续时间的所有输入
- perform()-- 执行所有存储的操作。
- release(on_element = None )释放元素上的一个持有鼠标按钮。
- reset_actions()-- 清除已存储在远程端的操作。
- send_keys(* keys_to_send )-- 将键发送到当前的焦点元素。
- send_keys_to_element(element,* keys_to_send )-- 将键发送到一个元素。
- 使用案例:
from selenium import webdriverfrom selenium.webdriver import ActionChainsimport time#创建浏览器对象driver = webdriver.Chrome()#加载指定url地址url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'driver.get(url)# 切换Frame窗口 driver.switch_to.frame('iframeResult')#获取两个div节点对象source = driver.find_element_by_css_selector("#draggable")target = driver.find_element_by_css_selector("#droppable")#创建一个动作链对象actions = ActionChains(driver)#将一个拖拽操作添加到动作链队列中actions.drag_and_drop(source,target)time.sleep(3)#执行所有存储的操作(顺序被触发)actions.perform()#driver.close()
7 ) 执行JavaScript
from selenium import webdriver#创建浏览器对象
driver = webdriver.Chrome()
#加载指定url地址
driver.get("https://www.zhihu.com/explore")
#执行javascript程序将页面滚动移至底部
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
#执行javascript实现一个弹框操作
driver.execute_script('window.alert("Hello Selenium!")')#driver.close()
8 ) 获取节点信息
from selenium import webdriver
# from selenium.webdriver import ActionChains#创建浏览器对象
driver = webdriver.Chrome()
#加载请求指定url地址
driver.get("https://www.zhihu.com/explore")
#获取id属性值为zh-top-link-logo的节点(logo)
logo = driver.find_element_by_id("zh-top-link-logo")
print(logo) #输出节点对象
print(logo.get_attribute('class')) #节点的class属性值
#获取id属性值为zu-top-add-question节点(提问按钮)
input = driver.find_element_by_id("zu-top-add-question")
print(input.text) #获取节点间内容
print(input.id) #获取id属性值
print(input.location) #节点在页面中的相对位置
print(input.tag_name) #节点标签名称
print(input.size) #获取节点的大小
#driver.close()
9 ) 切换Frame
- 网页中有一种节点叫做iframe,也就是子Frame,他可以将一个页面分成多个子父界面。
- 我们可以使用
switch_to.frame()
来切换Frame界面,实例详见上面动态链案例。
10 ) 延迟等待
-
浏览器加载网页是需要时间的,Selenium也不例外,若要获取完整网页内容,就要延时等待。
-
在Selenium中延迟等待方式有两种:一种是隐式等待,一种是显式等待(推荐)。
隐式:from selenium import webdriver#创建浏览器对象 driver = webdriver.Chrome() #使用隐式等待(固定时间) driver.implicitly_wait(2) #加载请求指定url地址 driver.get("https://www.zhihu.com/explore") #获取节点 input = driver.find_element_by_id("Popover1-toggle") print(input) # 获取节点间内容#driver.close()
显式:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait#创建浏览器对象 driver = webdriver.Chrome() #加载请求指定url地址 driver.get("https://www.zhihu.com/explore") #显式等待,最长10秒 wait = WebDriverWait(driver,10) #等待条件:10秒内必须有个id属性值为Popover1-toggle的节点加载出来,否则抛异常。 input = wait.until(EC.presence_of_element_located((By.ID,'Popover1-toggle'))) print(input) #获取节点间内容 #driver.close()
11 ) 前进和后退
from selenium import webdriver
import time#创建浏览器对象
driver = webdriver.Chrome()
#加载请求指定url地址
driver.get("https://www.baidu.com")
driver.get("https://www.taobao.com")
driver.get("https://www.jd.com")
time.sleep(2)
driver.back() #后退
time.sleep(2) #前进
driver.forward()
#driver.close()
12 ) Cookies
from selenium import webdriver
from selenium.webdriver import ActionChains#创建浏览器对象
driver = webdriver.Chrome()
#加载请求指定url地址
driver.get("https://www.zhihu.com/explore")
print(driver.get_cookies())
driver.add_cookie({'name':'Joh','domain':'www.zhihu.com','value':'zhangsan'})
print(driver.get_cookies())
driver.delete_all_cookies()
print(driver.get_cookies())
#driver.close()
13 ) 选项卡管理
from selenium import webdriver
import time#创建浏览器对象
driver = webdriver.Chrome()
#加载请求指定url地址
driver.get("https://www.baidu.com")
#使用JavaScript开启一个新的选型卡
driver.execute_script('window.open()')
print(driver.window_handles)
#切换到第二个选项卡,并打开url地址
driver.switch_to_window(driver.window_handles[1])
driver.get("https://www.taobao.com")
time.sleep(2)
#切换到第一个选项卡,并打开url地址
driver.switch_to_window(driver.window_handles[0])
driver.get("https://www.jd.com")
#driver.close()
14 ) 异常处理
from selenium import webdriver
from selenium.common.exceptions import TimeoutException,NoSuchElementException#创建浏览器对象
driver = webdriver.Chrome()
try:#加载请求指定url地址driver.get("https://www.baidu.com")
except TimeoutException:print('Time Out')try:#加载请求指定url地址driver.find_element_by_id("demo")
except NoSuchElementException:print('No Element')
finally:#driver.close()pass
Selenium库的案例
1)任务
- 使用Selenium爬取淘宝商品,指定关键字和指定页码信息来进行爬取
- url地址:https://s.taobao.com/search?q=mac
- 代码实现
注:下面的代码应该不能正确运行,因为淘宝已对Selenium做了相关封禁处理,可以自行在网络上寻找解决方案
'''通过关键字爬取淘宝网站的信息数据'''
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from pyquery import PyQuery as pq
from urllib.parse import quoteKEYWORD = "mac"
MAX_PAGE = 10# browser = webdriver.Chrome()
# browser = webdriver.PhantomJS()
#创建谷歌浏览器对象,启用Chrome的Headless无界面模式
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=chrome_options)
#显式等待:
wait = WebDriverWait(browser, 10)def index_page(page):'''抓取索引页 :param page: 页码'''print('正在爬取第', page, '页')try:url = 'https://s.taobao.com/search?q=' + quote(KEYWORD)browser.get(url)if page > 1:input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager div.form > input')))submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager div.form > span.btn.J_Submit')))input.clear()input.send_keys(page)submit.click()#等待条件:显示当前页号,显式商品wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager li.item.active > span'), str(page)))wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.m-itemlist .items .item')))get_products()except TimeoutException:index_page(page)def get_products():'''提取商品数据'''html = browser.page_sourcedoc = pq(html)items = doc('#mainsrp-itemlist .items .item').items()for item in items:product = {'image': item.find('.pic .img').attr('data-src'),'price': item.find('.price').text(),'deal': item.find('.deal-cnt').text(),'title': item.find('.title').text(),'shop': item.find('.shop').text(),'location': item.find('.location').text()}print(product)save_data(product)def save_data(result):'''保存数据'''passdef main():'''遍历每一页'''for i in range(1, MAX_PAGE + 1):index_page(i)browser.close()# 主程序入口
if __name__ == '__main__':main()
Scrapy框架中使用Selenium案例
1 ) 任务
- 通过Scrapy框架使用Selenium
- 以PhantomJS进行演示,爬取淘宝商品信息
- 将信息存入数据库MongoDB中
2 ) 创建项目
说明:需要特别注意解决淘宝对selenium的封禁处理,需要网上自行寻找解决方案(网上很多)),并将配置加入代码中
- 首先新建项目,名为scrapyselenium:$
scrapy startproject scrapyselenium
- 进入项目目录下,创建一个Spider(爬虫类):
cd srapytselenium scrapy genspider taobao www.baobao.com
- 进入settings.py的配置文件:将ROBOTSTXT_OBEY改为false, $
ROBOTSTXT_OBEY = False
3 ) 定义Item类
# 定义信息封装类(图片、价格、购买人数、标题、店铺、发货源)
from scrapy import Item, Fieldclass ProductItem(Item):collection = 'products'image = Field()price = Field()deal = Field()title = Field()shop = Field()location = Field()
4 ) 解析页面
-
在配置文件settings.py最后面定义搜索关键字和最大页码数信息
KEYWORDS = ['mac']MAX_PAGE = 100
-
进入spider/taobao.py文件中编写
# -*- coding: utf-8 -*- from scrapy import Request, Spider from urllib.parse import quote from scrapyseleniumtest.items import ProductItemclass TaobaoSpider(Spider):name = 'taobao'allowed_domains = ['www.taobao.com']base_url = 'https://s.taobao.com/search?q='def start_requests(self):for keyword in self.settings.get('KEYWORDS'):for page in range(1, self.settings.get('MAX_PAGE') + 1):url = self.base_url + quote(keyword)yield Request(url=url, callback=self.parse, meta={'page': page}, dont_filter=True)def parse(self, response):pass
5 ) 对接Selenium
-
通过定义DownloaderMiddleware中间件来实现对Selenium的使用。
# -*- coding: utf-8 -*-from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from scrapy.http import HtmlResponse from logging import getLoggerclass SeleniumMiddleware():def __init__(self, timeout=None, service_args=[]):self.logger = getLogger(__name__)self.timeout = timeoutself.browser = webdriver.PhantomJS(service_args=service_args)self.browser.set_window_size(1400, 700)self.browser.set_page_load_timeout(self.timeout)self.wait = WebDriverWait(self.browser, self.timeout)def __del__(self):self.browser.close()def process_request(self, request, spider):"""用PhantomJS抓取页面:param request: Request对象:param spider: Spider对象:return: HtmlResponse"""self.logger.debug('PhantomJS is Starting')page = request.meta.get('page', 1)try:self.browser.get(request.url)if page > 1:input = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager div.form > input')))submit = self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager div.form > span.btn.J_Submit')))input.clear()input.send_keys(page)submit.click()self.wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager li.item.active > span'), str(page)))self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.m-itemlist .items .item')))return HtmlResponse(url=request.url, body=self.browser.page_source, request=request, encoding='utf-8',status=200)except TimeoutException:return HtmlResponse(url=request.url, status=500, request=request)@classmethoddef from_crawler(cls, crawler):return cls(timeout=crawler.settings.get('SELENIUM_TIMEOUT'),service_args=crawler.settings.get('PHANTOMJS_SERVICE_ARGS'))
-
在settings.py配置文件中.设置我们自定义的中间件设置:
DOWNLOADER_MIDDLEWARES = {'scrapyselenium.middlewares.SeleniumMiddleware': 543, }
6 ) 解析页面信息
# -*- coding: utf-8 -*-
from scrapy import Request, Spider
from urllib.parse import quote
from scrapyselenium.items import ProductItemclass TaobaoSpider(Spider):name = 'taobao'allowed_domains = ['www.taobao.com']base_url = 'https://s.taobao.com/search?q='def start_requests(self):for keyword in self.settings.get('KEYWORDS'):for page in range(1, self.settings.get('MAX_PAGE') + 1):url = self.base_url + quote(keyword)yield Request(url=url, callback=self.parse, meta={'page': page}, dont_filter=True)def parse(self, response):products = response.xpath('//div[@id="mainsrp-itemlist"]//div[@class="items"][1]//div[contains(@class, "item")]')for product in products:item = ProductItem()item['price'] = ''.join(product.xpath('.//div[contains(@class, "price")]//text()').extract()).strip()item['title'] = ''.join(product.xpath('.//div[contains(@class, "title")]//text()').extract()).strip()item['shop'] = ''.join(product.xpath('.//div[contains(@class, "shop")]//text()').extract()).strip()item['image'] = ''.join(product.xpath('.//div[@class="pic"]//img[contains(@class, "img")]/@data-src').extract()).strip()item['deal'] = product.xpath('.//div[contains(@class, "deal-cnt")]//text()').extract_first()item['location'] = product.xpath('.//div[contains(@class, "location")]//text()').extract_first()yield item
7 ) 存储结果
配置文件信息
ITEM_PIPELINES = {'scrapyselenium.pipelines.MongoPipeline': 300,
}KEYWORDS = ['mac']
MAX_PAGE = 100
SELENIUM_TIMEOUT = 20
PHANTOMJS_SERVICE_ARGS = ['--load-images=false', '--disk-cache=true']
MONGO_URI = 'localhost'
MONGO_DB = 'taobao'
import pymongoclass MongoPipeline(object):def __init__(self, mongo_uri, mongo_db):self.mongo_uri = mongo_uriself.mongo_db = mongo_db@classmethoddef from_crawler(cls, crawler):return cls(mongo_uri=crawler.settings.get('MONGO_URI'), mongo_db=crawler.settings.get('MONGO_DB'))def open_spider(self, spider):self.client = pymongo.MongoClient(self.mongo_uri)self.db = self.client[self.mongo_db]def process_item(self, item, spider):self.db[item.collection].insert(dict(item))return itemdef close_spider(self, spider):self.client.close()
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 【leveldb】Log(五)
针对Log文件的作用及格式介绍系列文章中有介绍,可点此处查看Log文件介绍说明。 所有的写操作都是先成功的append到Log日志中,然后在更新内存memtable的。 这样做有如下优点:可以将随机的写IO变成append,极大的提高写磁盘速度; 防止在节点down机导致内存数据丢失,造成数据…...
2024/5/9 21:41:10 - PLSQL 自动替换快捷键参考
PLSQL 自动替换快捷键参考:c = COUNT(*) df = DELETE FROM WHERE g = GROUP BY o = ORDER BY ro = RANK()OVER(ORDER BY DESC) sc = SELECT COUNT(*) FROM sd = SELECT DISTINCT * FROM sf = SELECT * FROM 如何设置自动替换快捷键,请参照:https://www.360kuai.com/p…...
2024/5/9 14:44:09 - 【作业】第九章课后作业
选择题: 1-10:B B ABD A B A CD A BD C 11-12:C A 简答题: 1.Math.round(11.5) = 12,Math.round(-11.5) = -11。该方法为取整,四舍五入的原理是在参数上加0.5然后进行下取整。 2. int是基本类型,Integer是int的包装类。int不能为null,Integer可以为null,说明Integer是对…...
2024/5/7 4:02:18 - Docker安装及配置
windows 10安装 不同操作系统有对应的docker 安装包,对应自己的系统去下载。win7/win8: 下载 docker toolbox,可以从阿里云镜像下载,或者官方地址下载最新 win 10/MAC: 下载docker desktop, 从docker官方网站下载.(注意:需要登录才能下载,你要有docker账号)更多版本可参照:…...
2024/5/7 4:02:13 - PyQt5笔记(08) – 输入对话框
目录 PyQt5笔记(01) – 创建空白窗体 PyQt5笔记(02) – 按钮点击事件 PyQt5笔记(03) – 消息框 PyQt5笔记(04) – 文本框的使用 PyQt5笔记(05) – 绝对位置 为了便于后期更新,所有目录已汇总到一个链接,具体请移步到这里 正文 本节主要介绍如何使用PyQt输入对话框获…...
2024/5/7 4:02:09 - 如何利用Anaconda3在windows10上安装tensorflow?
目录1、安装Anaconda3下载Anaconda3软件安装2、安装tensorflow3、测试tensorflow是否安装成功4、错误提示解决系统环境:windows10 64位系统+Anaconda3-4.0.0-Windows-x86_64+python3.5,如果系统中安装其他版本的python,请先卸载,然后再执行安装过程。1、安装Anaconda3下载A…...
2024/5/7 4:02:05 - AR PL UMing CN
AR PL UMing CN...
2024/5/7 4:02:01 - C++ ProtoBuf Java 通信
简要 C++使用libcurl作为HttpClient Java作为WebServer ProtoBuf作为通信协议. 需求 简单讲下, 毕竟是项目中运用前的小demo. 客户端有很多的点, 要发送给web服务端, 服务端进行接收再进行回调(回调就属于其他项目了, 这里并未设计) protobuf 定义点类型, 在定义点云类型. 详情…...
2024/5/7 4:01:57 - 海量数据处理面试题
言一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名 :-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结…...
2024/5/7 4:01:54 - 删除字符
本题要求实现一个删除字符串中的指定字符的简单函数。 函数接口定义:void delchar( char *str, char c );其中char *str是传入的字符串,c是待删除的字符。函数delchar的功能是将字符串str中出现的所有c字符删除。 裁判测试程序样例: #include <stdio.h> #define MAXN …...
2024/5/7 4:01:51 - 字符串的方法及数组的去重和排序
1.创建一个字符串 传统的方式 通过new关键字 来创建的是 一个对象 String对象 来处理字符串 备注: 如果不加new, 单独的String(值),只是将值转换为字符串var str = new String("y");console.log(typeof str); //object字面量的方式var str_two = abcDg;console.…...
2024/5/7 4:01:45 - STL——简单的数据结构
STL——简单的数据结构 题目描述 栗酱有一天在网上冲浪的时候发现了一道很有意思的数据结构题。 该数据结构形如长条形。 一开始该容器为空,有以下七种操作。 1 a从前面插入元素a 2 从前面删除一个元素 3 a从后面插入一个元素 4 从后面删除一个元素 5 将整个容器头尾翻转 6 输…...
2024/5/7 4:01:41 - 2019年年度总结
这一年干了什么: 1.参加了蓝桥杯省赛的算法组(虽然是省三哈哈哈哈哈哈) 2.面试学校ThoughtCoding实验室嵌入式组并成功成为一员 3.对Arduino进行初步学习,了解了一些简单的模块,最终成果是完成基础小车一辆(过了几天就被我们卸了) 4.对stm32进行基础学习,一些基本驱动的…...
2024/5/6 8:09:33 - 基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署、持续集成、持续交付(无废话版)---------------(三)
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署 1. 使用Docker搭建Jenkins 1.1 拉取Jenkins镜像 1.2 创建目录 1.3 启动容器 1.4 打开Jenkins管理页面 1.5 查看日志获取初始密码 1.6 安装推荐的插件 1.7 成功安装Jenkins 2. 配置Jenkins 2.1 设置Jenkins时区为北京时间 …...
2024/5/7 4:01:37 - 网络安全基础
网络安全概述一、网络安全的基本概念及属性网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄漏,系统连续可靠正常地运行,网络服务不中断。网络安全通信所需要的基本属性有:机密性、消息完整性、可访问与可用性、…...
2024/5/8 6:41:27 - 【机器学习笔记51】deepfake
``【参考资料】 【1】https://github.com/joshua-wu/deepfakes_faceswap 备注: 本文主要是对【参考文献1】代码的走读理解1. deepfake的autoencoderdeepfake本质上是一个基于卷积神经网络的autoencoder 程序将原始图像做处理后分别作为编解码的源和目标 编解码模型的定义在mode…...
2024/5/7 4:01:29 - win7x64,apache24,DocumentRoot 设置为网络文件夹时 服务无法启动 不是端口问题 解决方案
当apache24 配置文件httpd.conf 中 DocumentRoot和Directory 设置成网络上另一台计算机的共享文件夹时, 启动httpd.exe,就可以正常访问localhost 但是使用 httpd.exe -k install 安装apache服务后,该服务无法启动。 这是因为该服务默认本地系统帐户登录,但是httpd.conf中的 …...
2024/5/7 4:01:25 - Java干货——datax的二次开发集成rabbitMQ
**1.开发背景**最近公司需求,经大量调研后,决定采用阿里的datax,实现多系统之间数据同步,满足平行入库和经复杂业务逻辑处理后入库。**2.开发需求**平行入库直接应用datax现有逻辑,即可实现sqlserver到mysql的数据同步;需要复杂处理入库,则考虑应用rabbitMQ和datax的二次…...
2024/5/7 4:01:21 - C++中String类的字符串分割实现
最近笔试,经常遇到需要对字符串进行快速分割的情景,主要是在处理输入的时候,而以前练习算法题或笔试,很多时候不用花啥时间考虑测试用例输入的问题。可是C++标准库里面没有像java的String类中提供的字符分割函数split ,着实不方便。那么怎么解决这个问题呢?整理了一些方法…...
2024/5/7 4:01:22 - ## POJ2367 enealogical tree
POJ2367 enealogical tree 本题是一道拓扑序列题。 有两种解法。 解法一(BFS): 预定义:一个栈–存放答案。一个一维数组–存放每个点的入栈情况。N个动态数组–存放每个点的父亲。 1.读入数据,记录每个结点的子数以及每个子点的父亲。 2.将子数为0的点,即无后代的点放入队…...
2024/5/7 4:01:13
最新文章
- 【图文教程】PyCharm安装配置PyQt5+QtDesigner+PyUic+PyRcc
这里写目录标题 PyQt5、Qt Designer、PyUic、PyRcc简介(1)下载安装PyQt5(2)打开designer.exe所在位置(3)在PyCharm中配置QtDesigner(4)验证QtDesigner是否配置成功(5&…...
2024/5/9 21:52:08 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/9 21:23:04 - WPS二次开发专题:如何获取应用签名SHA256值
作者持续关注WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 在申请WPS SDK授权版时候需要开发者提供应用包名和签…...
2024/5/8 22:08:17 - Python读取文件里内容
如果要读取一个文件里的内容是 # 文件名:db.txt 1 2 3 4代码如下 import requests f open("db.txt", mode"rb") content f.read() f.close()data content.decode(utf-8)# 存到 list 里 data_list data.split(\r\n) print(data_list)# 结果…...
2024/5/5 8:37:34 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/8 6:01:22 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/9 15:10:32 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/9 4:20:59 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/8 20:48:49 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/8 19:33:07 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/8 20:38:49 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/9 7:32:17 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/9 17:11:10 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57