python教程---网络爬虫

7.1 urllib

Urllib是Python内置的一个用于读取来自Web的数据的库。它是一个请求库,可以用来发送HTTP请求,获取网页内容,支持多种HTTP方法,如GET和POST等。
使用Urllib读取网页内容的步骤如下:

  1. 导入Urllib库中的request模块。
import urllib.request
  1. 使用urlopen()函数发送HTTP请求,获取网页内容。
response = urllib.request.urlopen('http://www.example.com')
  1. 读取获取到的内容。可以使用read()、readline()和readlines()方法。
html = response.read()
  1. 对获取到的内容进行解码,以便得到字符串形式的内容。
html = html.decode('utf-8')
  1. 关闭响应对象。
response.close()

示例:

import urllib.request
url = 'http://www.example.com'
response = urllib.request.urlopen(url)
html = response.read()
html = html.decode('utf-8')
print(html)
response.close()

以上代码使用Urllib读取了http://www.example.com网站的内容,并将其打印出来。


7.2 正则表达式

正则表达式(Regular Expression,简称RegEx)是一种用于匹配字符串中字符组合的模式。在Python中,re模块提供了正则表达式的支持。正则表达式在网络爬虫中常用于解析网页内容,提取需要的数据。
使用正则表达式的基本步骤如下:

  1. 导入re模块。
import re
  1. 编写正则表达式模式。正则表达式的语法规则包括字符匹配、量词、分组等。
  2. 使用re模块提供的方法进行匹配。常见的方法有:
    • re.search(pattern, string): 在字符串中搜索模式,返回第一个匹配项的匹配对象。
    • re.match(pattern, string): 从字符串的起始位置匹配模式,返回匹配对象。
    • re.findall(pattern, string): 在字符串中找到所有匹配项,返回一个列表。
    • re.finditer(pattern, string): 在字符串中找到所有匹配项,返回一个迭代器。
    • re.sub(pattern, repl, string): 替换字符串中所有匹配的子串。
      示例:
import re
# 示例文本
text = "Hello, my phone number is 123-456-7890."
# 正则表达式模式,用于匹配电话号码
pattern = r'\d{3}-\d{3}-\d{4}'
# 使用re.search()查找匹配项
match = re.search(pattern, text)
# 如果找到匹配项,则输出
if match:print("Found phone number:", match.group())
else:print("No phone number found.")
# 使用re.findall()查找所有匹配项
phone_numbers = re.findall(pattern, text)
print("Phone numbers found:", phone_numbers)

输出:

Found phone number: 123-456-7890
Phone numbers found: ['123-456-7890']

在这个例子中,我们使用正则表达式\d{3}-\d{3}-\d{4}来匹配格式为XXX-XXX-XXXX的电话号码。re.search()用于找到第一个匹配项,而re.findall()用于找到所有匹配项。


7.3 Beautiful Soup
Beautiful Soup 是一个 Python 库,用于从 HTML 或 XML 文件中提取数据。它可以帮助我们解析网页内容,方便地提取出我们需要的数据。Beautiful Soup 与 lxml、html5lib 等解析器一起工作,提供了丰富的解析方法。
使用 Beautiful Soup 的基本步骤如下:

  1. 安装 Beautiful Soup 库。如果还没有安装,可以使用 pip 进行安装:
pip install beautifulsoup4
  1. 导入 Beautiful Soup 模块。
from bs4 import BeautifulSoup
  1. 加载 HTML 内容到 Beautiful Soup 对象。
soup = BeautifulSoup(html_content, 'html.parser')

其中 html_content 是你要解析的 HTML 内容,'html.parser' 是解析器,这里使用的是 Python 内置的 HTML 解析器。
4. 使用 Beautiful Soup 提供的方法提取数据。常见的方法有:

  • soup.find(): 查找第一个匹配的标签。
  • soup.find_all(): 查找所有匹配的标签。
  • soup.select(): 使用 CSS 选择器查找标签。
  • tag.get_text(): 获取标签内的文本内容。
    示例:
from bs4 import BeautifulSoup
# 示例 HTML 内容
html_content = """
<html>
<head>
<title>Example Web Page</title>
</head>
<body>
<h1>Welcome to Example Web Page</h1>
<p>This is a paragraph with some text.</p>
<ul><li>Item 1</li><li>Item 2</li><li>Item 3</li>
</ul>
</body>
</html>
"""
# 加载 HTML 内容到 Beautiful Soup 对象
soup = BeautifulSoup(html_content, 'html.parser')
# 提取标题文本
title = soup.find('title').get_text()
print("Title:", title)
# 提取所有的段落文本
paragraphs = soup.find_all('p')
for p in paragraphs:print("Paragraph:", p.get_text())
# 使用 CSS 选择器提取无序列表中的所有列表项
list_items = soup.select('ul li')
for item in list_items:print("List item:", item.get_text())

输出:

Title: Example Web Page
Paragraph: This is a paragraph with some text.
List item: Item 1
List item: Item 2
List item: Item 3

在这个例子中,我们使用 Beautiful Soup 来解析一个简单的 HTML 页面,提取了标题、段落文本以及无序列表中的列表项。Beautiful Soup 提供了丰富的 API 来方便地操作和提取网页内容。


在Python中,网络爬虫是一种常见的任务,涉及多个库和框架。对于您提到的目录7.4,我们将重点讨论lxml
lxml是一个用于处理XML和HTML的Python库。它提供了非常快速和有效的解析方法,并且支持XPath和CSS选择器,这对于提取和操作数据非常有用。lxml通常与requests库一起使用,以获取网页内容并对其进行解析。
以下是如何使用lxml进行基本网页解析的示例:

  1. 安装lxml
    pip install lxml
    
  2. 使用lxml解析HTML
    from lxml import html
    import requests
    # 获取网页内容
    page = requests.get('http://example.com')
    # 解析网页内容
    tree = html.fromstring(page.content)
    # 使用XPath找到元素
    titles = tree.xpath('//h2/text()')
    for title in titles:print(title)
    
  3. 提取属性和更复杂的数据
    # 假设我们要提取所有链接和它们的文本
    links = tree.xpath('//a')
    for link in links:href = link.get('href')text = link.textprint(f'Text: {text}, Link: {href}')
    

lxml提供了非常强大的解析能力,可以处理复杂的HTML结构,并且相对较快。这对于需要从网页中提取特定信息的网络爬虫来说非常有用。
需要注意的是,使用网络爬虫时,应始终遵守目标网站的robots.txt文件规定,并尊重网站的使用条款。同时,合理控制访问频率,避免对目标网站服务器造成不必要的负担。在处理数据时,也应当遵守相关法律法规,尊重数据隐私和版权。


目录7.5提到的是requests库,这是一个非常流行的Python库,用于发送HTTP请求。它简单易用,同时功能强大,支持多种HTTP方法,如GET、POST、PUT、DELETE等,以及各种高级功能,如HTTP会话、cookie持久化、SSL验证等。
以下是使用requests库进行基本HTTP请求的示例:

  1. 安装requests
    pip install requests
    
  2. 发送GET请求
    import requests
    # 发送GET请求
    response = requests.get('https://www.example.com')
    # 检查请求是否成功
    if response.status_code == 200:print('Success!')
    else:print('An error has occurred.')
    # 输出响应的文本内容
    print(response.text)
    
  3. 发送POST请求
    # 发送POST请求
    payload = {'key1': 'value1', 'key2': 'value2'}
    response = requests.post('https://www.example.com/post', data=payload)
    # 检查响应状态码
    print(response.status_code)
    # 输出响应的文本内容
    print(response.text)
    
  4. 处理响应头和cookie
    # 获取响应头
    print(response.headers)
    # 获取特定的响应头
    print(response.headers.get('Content-Type'))
    # 获取cookie
    print(response.cookies)
    
  5. 使用Session对象
    # 创建一个session对象
    session = requests.Session()
    # 使用session发送请求,它会自动处理cookie
    session.get('https://www.example.com')
    response = session.post('https://www.example.com/login', data={'user': 'username', 'pass': 'password'})
    # 检查是否登录成功
    print(response.text)
    

requests库是进行网络爬虫时不可或缺的工具,它简化了HTTP请求的发送和响应的处理,使得开发者可以专注于数据的抓取和处理。在使用requests库时,应当遵循网站的使用条款,合理使用网络资源,并尊重数据隐私和版权。


目录7.6提到的是Selenium,这是一个自动化测试工具,它允许你编写脚本来模拟用户在网页上的行为。Selenium支持多种浏览器,包括Chrome、Firefox、Safari等,并且可以运行在多种操作系统上。对于网络爬虫来说,Selenium特别有用,因为它可以处理JavaScript渲染的页面,执行复杂的用户交互,以及绕过一些反爬虫机制。
以下是使用Selenium进行基本网页自动化操作的示例:

  1. 安装Selenium
    pip install selenium
    
  2. 下载对应的WebDriver
    你需要下载与你的浏览器相对应的WebDriver。例如,如果你使用的是Chrome,你需要下载ChromeDriver。
  3. 使用Selenium打开网页
    from selenium import webdriver
    # 设置WebDriver的路径
    driver_path = 'path/to/your/webdriver'
    # 创建WebDriver实例
    driver = webdriver.Chrome(driver_path)
    # 打开网页
    driver.get('https://www.example.com')
    # 获取页面标题
    print(driver.title)
    # 关闭浏览器
    driver.quit()
    
  4. 执行用户交互
    # 找到元素
    search_box = driver.find_element_by_name('q')
    # 输入搜索关键词
    search_box.send_keys('Python')
    # 提交表单
    search_box.submit()
    
  5. 处理JavaScript渲染的页面
    # 等待页面加载完成
    driver.implicitly_wait(10)
    # 获取页面源代码
    page_source = driver.page_source
    # 使用BeautifulSoup或lxml解析页面源代码
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(page_source, 'html.parser')
    
  6. 模拟登录
    # 找到用户名和密码输入框
    username_box = driver.find_element_by_name('username')
    password_box = driver.find_element_by_name('password')
    # 输入用户名和密码
    username_box.send_keys('your_username')
    password_box.send_keys('your_password')
    # 点击登录按钮
    login_button = driver.find_element_by_id('login-btn')
    login_button.click()
    

Selenium是一个非常强大的工具,但它也有一定的缺点,比如运行速度较慢,需要下载和配置WebDriver,以及对于大规模抓取可能会有性能问题。尽管如此,对于需要模拟用户行为的复杂网络爬虫任务,Selenium是一个非常有用的选择。


目录7.7提到的是Scrapy框架,这是一个非常强大的Python爬虫框架,用于构建高效、异步的网络爬虫。Scrapy提供了完整的爬虫解决方案,包括请求调度、自动抓取、数据提取、持久化存储等功能。它还支持多种类型的数据输出,如JSON、CSV、XML等,并且可以与许多其他Python库和工具集成。
以下是使用Scrapy创建一个基本的爬虫项目的步骤:

  1. 安装Scrapy框架
    pip install scrapy
    
  2. 创建一个新的Scrapy项目
    scrapy startproject myspider
    
    这将创建一个名为myspider的新目录,其中包含Scrapy项目的初始结构。
  3. 定义Item
    items.py文件中定义你要抓取的数据结构。
    import scrapy
    class MyItem(scrapy.Item):title = scrapy.Field()link = scrapy.Field()content = scrapy.Field()
    
  4. 编写爬虫
    spiders目录下创建一个新的爬虫文件,例如my_spider.py
    import scrapy
    from myspider.items import MyItem
    class MySpider(scrapy.Spider):name = 'my_spider'start_urls = ['https://www.example.com']def parse(self, response):item = MyItem()item['title'] = response.css('h1::text').get()item['link'] = response.urlitem['content'] = response.css('p::text').getall()yield item
    
  5. 运行爬虫
    在项目根目录下运行以下命令:
    scrapy crawl my_spider
    
    这将启动爬虫,并根据定义的parse方法处理每个响应。
  6. 存储数据
    你可以使用Scrapy的内置功能将数据存储为不同的格式。例如,要将数据输出为JSON,可以使用以下命令:
    scrapy crawl my_spider -o output.json
    

Scrapy是一个高度可扩展的框架,它支持中间件、管道等多种方式来自定义爬虫的行为。它还内置了强大的选择器(基于lxml),可以方便地提取和操作数据。Scrapy的异步处理能力使其非常适合大规模的网络爬取任务。在使用Scrapy时,应当遵守网站的使用条款,合理使用网络资源,并尊重数据隐私和版权。


目录7.8提到的是pyspider框架,这是一个强大的爬虫框架,它提供了一个可视化的Web界面,允许用户编写爬虫脚本,并调度任务。pyspider支持多种数据库后端,如MySQL、MongoDB、SQLite等,并且可以处理JavaScript渲染的页面。
以下是使用pyspider创建一个基本的爬虫项目的步骤:

  1. 安装pyspider
    pip install pyspider
    
  2. 启动pyspider
    pyspider
    
    这将启动pyspider的服务器,并默认在5000端口上运行。
  3. 访问Web界面
    打开浏览器,访问http://localhost:5000/,你将看到pyspider的管理界面。
  4. 创建一个新的爬虫
    在Web界面中,点击"Create"按钮,创建一个新的爬虫。你可以选择"Prototype"来快速开始。
  5. 编写爬虫脚本
    在脚本编辑器中,编写你的爬虫代码。以下是一个简单的示例:
    from pyspider.libs.base_handler import *
    class Handler(BaseHandler):crawl_config = {}@every(minutes=24 * 60)def on_start(self):self.crawl('https://www.example.com', callback=self.index_page)@config(age=10 * 24 * 60 * 60)def index_page(self, response):for each in response.doc('a[href^="http"]').items():self.crawl(each.attr.href, callback=self.detail_page)def detail_page(self, response):return {"url": response.url,"title": response.doc('title').text(),}
    
  6. 运行爬虫
    在脚本编辑器中,点击"Run"按钮,测试你的爬虫脚本。如果一切正常,你可以点击"Run"旁边的"Save"按钮保存脚本。
  7. 调度任务
    pyspider的管理界面,你可以看到你创建的爬虫。点击"Run"按钮开始爬取数据。
    pyspider提供了一个灵活的框架,可以处理各种复杂的爬虫任务。它的Web界面使得编写、调试和运行爬虫变得更加方便。在使用pyspider时,应当遵守网站的使用条款,合理使用网络资源,并尊重数据隐私和版权。

7.9验证码处理

  1. 使用图像识别库
    Python中有一些图像识别库可以帮助处理简单的验证码,例如pytesseract,它是Google的Tesseract-OCR引擎的Python封装。
    from PIL import Image
    import pytesseract
    # 安装Tesseract-OCR引擎
    # https://github.com/tesseract-ocr/tesseract
    # 打开验证码图片
    image = Image.open('captcha.png')
    # 使用pytesseract识别图像中的文字
    text = pytesseract.image_to_string(image, config='--psm 8')
    print(text)
    
  2. 使用专门的验证码识别服务
    有些服务专门提供验证码识别功能,如2Captcha、Anti-Captcha等。这些服务通常需要付费,但它们可以处理更复杂的验证码。
    import requests
    # 使用2Captcha服务的示例
    url = 'http://2captcha.com/in.php'
    api_key = 'your_api_key'
    captcha_id = 'captcha_image_id'
    # 发送验证码图片到服务
    response = requests.post(url, data={'key': api_key, 'method': 'post', 'json': 1, 'body': captcha_id})
    # 解析响应获取验证码ID
    captcha_id = response.json()['captcha_id']
    # 检查验证码是否已经解决
    # ...
    # 使用验证码解决方案
    # ...
    
  3. 手动输入验证码
    对于一些简单的验证码,如果自动化处理的成本过高,可以考虑手动输入验证码。这种方法通常用于测试或偶尔的爬虫任务。
  4. 绕过验证码
    有些情况下,可以通过分析网站的验证码机制来找到绕过验证码的方法。例如,如果验证码是为了防止自动化脚本而设置的,但同时又提供了API接口,可以考虑使用API来进行数据抓取。
    处理验证码是一个复杂且不断变化的过程,因为验证码的目的是防止自动化工具,所以它们会不断进化变得更加难以被自动化脚本识别。在处理验证码时,应当遵守法律法规,不得用于非法目的。同时,应当尊重网站的合法权益,避免对网站的正常运营造成影响。

7.10动态渲染网页爬取

  1. 使用Selenium
    Selenium是一个自动化测试工具,它可以模拟用户的浏览器行为,包括执行JavaScript。使用Selenium可以获取动态渲染后的网页内容。
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get('https://www.example.com')
    html = driver.page_source
    driver.quit()
    # 然后可以使用BeautifulSoup或lxml解析html内容
    
  2. 使用Pyppeteer
    Pyppeteer是一个Python库,它是puppeteer(一个Node库)的端口,用于控制无头版的Chrome或Chromium。Pyppeteer可以用于爬取动态渲染的网页。
    import pyppeteer
    async def main():browser = await pyppeteer.launch()page = await browser.newPage()await page.goto('https://www.example.com')html = await page.content()await browser.close()
    # 运行异步函数
    pyppeteer.asyncio.run(main())
    # 然后可以使用BeautifulSoup或lxml解析html内容
    
  3. 使用requests-html
    requests-html是一个Python库,它结合了requestsPyppeteer的功能,提供了一个简单的API来爬取JavaScript渲染的网页。
    from requests_html import HTMLSession
    session = HTMLSession()
    response = session.get('https://www.example.com')
    response.html.render()
    # response.html包含了动态渲染后的内容
    
  4. 使用Ajax分析
    对于一些使用Ajax加载内容的网页,可以分析Ajax请求,直接获取JSON格式的数据,这样可以避免处理JavaScript和渲染过程。
    import requests
    # 分析网页,找到Ajax请求的URL
    ajax_url = 'https://www.example.com/api/data'
    # 发送请求获取数据
    response = requests.get(ajax_url)
    data = response.json()
    

在爬取动态渲染网页时,应当注意遵守网站的使用条款,合理使用网络资源,并尊重数据隐私和版权。同时,由于动态渲染的网页可能涉及更多的数据交互和用户行为模拟,因此爬虫的复杂度和资源消耗可能会更高。

7.11模拟登录

  1. 使用requests库模拟登录
    import requests
    # 登录URL
    login_url = 'https://www.example.com/login'
    # 用户名和密码
    payload = {'username': 'your_username', 'password': 'your_password'}
    # 创建一个session对象,它会自动处理cookie
    session = requests.Session()
    # 发送POST请求进行登录
    response = session.post(login_url, data=payload)
    # 检查是否登录成功
    if response.ok:print('Login successful!')
    else:print('Login failed!')
    # 然后可以使用session对象进行其他需要登录的操作
    
  2. 使用Selenium模拟登录
    from selenium import webdriver
    # 创建WebDriver实例
    driver = webdriver.Chrome()
    # 打开登录页面
    driver.get('https://www.example.com/login')
    # 找到用户名和密码输入框
    username_box = driver.find_element_by_name('username')
    password_box = driver.find_element_by_name('password')
    # 输入用户名和密码
    username_box.send_keys('your_username')
    password_box.send_keys('your_password')
    # 点击登录按钮
    login_button = driver.find_element_by_id('login-btn')
    login_button.click()
    # 等待页面跳转或加载完成
    driver.implicitly_wait(10)
    # 然后可以使用driver对象进行其他需要登录的操作
    
  3. 处理验证码
    如果登录过程中包含验证码,你可能需要手动输入验证码,或者使用图像识别服务自动识别验证码。
  4. 处理cookie
    在登录后,通常需要保存cookie以便于后续请求使用。使用requests库的session对象或Seleniumdriver对象可以自动处理cookie。
  5. 处理安全问题
    有些网站可能会在登录过程中加入额外的安全措施,如二次验证、安全问题等。这些情况可能需要特殊处理,例如使用短信验证码、邮件验证码或回答安全问题。
    模拟登录时,应当遵守网站的使用条款,不得用于非法目的。同时,应当尊重网站的合法权益,避免对网站的正常运营造成影响。在进行大规模数据抓取时,应当考虑到服务器负载,合理控制请求频率。

7.12 autoscraper

以下是使用autoscraper的基本步骤:

  1. 安装autoscraper
    pip install autoscraper
    
  2. 创建一个AutoScraper实例
    from autoscraper import AutoScraper
    # 初始化AutoScraper
    scraper = AutoScraper()
    
  3. 提供示例数据和URL
    # 示例URL和数据
    url = 'https://www.example.com/products'
    example_data = {'product_name': 'Example Product', 'price': '$19.99'}
    # fit方法用于提供示例数据和URL
    scraper.fit(url, example_data)
    
  4. 使用get_data方法提取数据
    # 现在可以提取同一页面上其他产品的数据
    products_url = 'https://www.example.com/products'
    data = scraper.get_data(products_url)
    for product in data:print(product)
    
  5. 处理多个页面
    # 如果需要处理多个页面,可以继续调用get_data
    another_page_url = 'https://www.example.com/products/page/2'
    more_data = scraper.get_data(another_page_url)
    for product in more_data:print(product)
    

autoscraper的强大之处在于它的易用性和自动学习提取规则的能力。然而,它可能不适用于所有复杂的网页结构或需要高度定制化的数据提取任务。在使用autoscraper时,应当遵守网站的使用条款,合理使用网络资源,并尊重数据隐私和版权。同时,考虑到autoscraper的学习性质,可能需要用户提供足够的示例数据以确保准确的数据提取。

参考网址


7.13 selectolax

以下是使用selectolax的基本步骤:

  1. 安装selectolax
    pip install selectolax
    
  2. 解析HTML文档
    from selectolax.parser import HTMLParser
    # 从字符串解析HTML
    html = '<html><body><div class="example">Text</div></body></html>'
    parser = HTMLParser(html)
    # 或者从URL加载HTML
    # parser = HTMLParser.from_url('https://www.example.com')
    
  3. 使用CSS选择器查找元素
    # 使用CSS选择器查找元素
    div = parser.css_first('div.example')
    if div is not None:print(div.text())  # 输出: Text
    
  4. 遍历所有匹配的元素
    # 遍历所有匹配的元素
    for div in parser.css('div.example'):print(div.text())
    
  5. 修改元素和属性
    # 修改元素文本
    div.set_text('New text')
    # 修改元素属性
    div.set_attribute('class', 'new-class')
    # 获取修改后的HTML
    modified_html = parser.html()
    

selectolax的优势在于它的速度和灵活性。它支持CSS选择器,这使得从HTML文档中提取数据变得非常方便。此外,selectolax还允许修改文档结构,这在某些爬虫任务中可能很有用。在使用selectolax时,应当遵守网站的使用条款,合理使用网络资源,并尊重数据隐私和版权。


7.14 requests-html

以下是使用requests-html的基本步骤:

  1. 安装requests-html
    pip install requests-html
    
  2. 发送请求并获取响应
    from requests_html import HTMLSession
    # 创建一个HTMLSession对象
    session = HTMLSession()
    # 发送GET请求
    response = session.get('https://www.example.com')
    # 查看响应内容
    print(response.text)
    
  3. 处理JavaScript渲染的页面
    requests-html会自动处理JavaScript渲染的页面。如果你需要确保页面完全加载,可以使用response.html.render()方法。
    # 等待页面完全加载
    response.html.render()
    # 再次查看响应内容,此时应该包含动态加载的内容
    print(response.text)
    
  4. 使用CSS选择器提取数据
    requests-html提供了一个类似于BeautifulSoup的API来操作HTML元素。
    # 使用CSS选择器提取数据
    title = response.html.find('h1')[0].text
    print(title)
    
  5. 处理JavaScript交互
    requests-html还支持一些JavaScript交互,如执行JavaScript代码或处理JavaScript事件。
    # 执行JavaScript代码
    response.html.eval('console.log("Hello, world!")')
    # 处理JavaScript事件
    response.html.handle_event('click', 'button#my-button')
    

requests-html是一个强大的工具,尤其适合于需要处理JavaScript渲染页面的网络爬虫任务。然而,它可能不适合所有情况,特别是对于复杂的交互式网页或需要高度定制化的爬虫任务。在使用requests-html时,应当遵守网站的使用条款,合理使用网络资源,并尊重数据隐私和版权。同时,考虑到requests-html的JavaScript执行能力,可能需要更多的资源来处理页面,因此在大规模抓取时应当考虑到服务器负载。

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

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

相关文章

Redis--18--Redis Desktop Manage下载与安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Redis Desktop Manage1.官网下载https://redis.io/insight/ 2.安装方法3.使用方法3.1.进入RedisDesktopManager的主界面3.2 新建连接3.3 支持操作 Redis Desktop Ma…

J021_QQ号格式校验

一、需求描述 校验QQ号码是否正确。要求全部是数字&#xff0c;数字长度&#xff08;6-20位之间&#xff09;&#xff0c;不能以0开头。 二、代码实现 package com.itheima.sort;public class Test {public static void main(String[] args) {System.out.println("----…

汽车尾灯(转向灯)电路设计

即当汽车进行转弯时,司机打开转向灯,尾灯会根据转向依次被点亮,经过一定的间隔后,再全部被消灭。不停地重复,直到司机关闭转向灯。 该效果可由以下电路实现: 完整电路图: 02—电路设计要点 延时电路的要点主要有两个: 一、当转向开关被按下时,LED需要逐个亮起; 二、LED被逐…

uniapp 使用cavans 生成海报

uniapp 使用cavans 生成海报 npm install qs-canvas1.创建 useCanvas.js /*** Shopro qs-canvas 绘制海报* version 1.0.0* author lidongtony* param {Object} options - 海报参数* param {Object} vm - 自定义组件实例*/ import QSCanvas from qs-canvas; import { getPos…

NVIDIA Visual Profiler启动失败报错

在银河麒麟V10安装完NVIDIA后&#xff0c;想着试着运行一下NVIDIA Visual Profiler&#xff0c;发现报错&#xff0c;如下图。 照着提示翻阅日志文件。看见其中写着 !ENTRY com.nvidia.viper.birt 2 0 2024-06-30 08:39:39.806 !MESSAGE Could not resolve module: com.nvidi…

ACE之Task框架

简介 其提供了并发处理事件的能力 结构 #mermaid-svg-8gxc0Agd7gZ9tHdf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-icon{fill:#552222;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-text{…

R学习资源及R包安装

转自生信师兄 生信必备技巧之R语言基础教程 1. 学习资源 推荐书籍&#xff1a;R语言实战&#xff0c;R数据科学等等&#xff1b; 这两本书在公众号【生信师兄】都有pdf版&#xff0c;有需要的可以关注公众号【生信师兄】并回复&#xff1a;“R语言”&#xff0c;即可获得免费…

【自然语言处理】预训练语言模型实现与应用

预训练语言模型实现与应用 1 任务目标 1.1 案例简介 ​ 2018年&#xff0c;Google提出了预训练语言模型BERT&#xff0c;该模型在各种NLP任务上都取得了很好的效果。与此同时&#xff0c;它的使用十分方便&#xff0c;可以快速地对于各种NLP任务进行适配。因此&#xff0c;B…

《每天5分钟用Flask搭建一个管理系统》第8章:权限管理

第8章&#xff1a;权限管理 8.1 权限管理的概念 权限管理是控制用户对应用内不同资源访问的机制。它确保用户只能访问他们被授权的资源。 8.2 Flask-Principal扩展的使用 Flask-Principal是一个提供权限管理功能的Flask扩展&#xff0c;它允许您定义角色和权限&#xff0c;…

基于HarmonyOS NEXT开发智能提醒助手

目录 目录 目录 前言 关于HarmonyOS NEXT 智能提醒助手需求分析 智能提醒助手设计 1、系统架构 2、功能模块 智能提醒助手的应用场景 智能提醒助手的竞争力 具体技术实现 未来展望 结束语 前言 随着智能设备的普及和物联网技术的飞速发展&#xff0c;人们对于智能…

基于大津阈值法和二值化与联通区域标记进行图像目标计数

1 建模 A.读取图像&#xff1a; 1.使用imread函数读取图像文件。 2.如果图像是彩色的&#xff0c;通常需要先转换为灰度图像&#xff0c;因为大津阈值法通常应用于灰度图像。 B.灰度化&#xff1a; 1&#xff0e;如果图像是彩色的&#xff0c;使用rgb2gray函数将其转换为灰度…

《昇思25天学习打卡营第16天 | 昇思MindSpore基于MobileNetv2的垃圾分类》

16天 本节学习了垃圾分类代码开发的方法。通过读取本地图像数据作为输入&#xff0c;对图像中的垃圾物体进行检测&#xff0c;并且将检测结果图片保存到文件中。 MobileNet网络是由Google团队于2017年提出的专注于移动端、嵌入式或IoT设备的轻量级CNN网络&#xff0c;相比于传…

Excel显示/隐藏批注按钮为什么是灰色?

在excel中&#xff0c;经常使用批注来加强数据信息的提示&#xff0c;有时候会把很多的批注显示出来&#xff0c;但是再想将它们隐藏起来&#xff0c;全选工作表后&#xff0c;“显示/隐藏批注”按钮是灰色的&#xff0c;不可用。 二、可操作方法 批注在excel、WPS表格中都是按…

【考研408计算机组成原理】微程序设计重要考点指令流水线考研真题+考点分析

苏泽 “弃工从研”的路上很孤独&#xff0c;于是我记下了些许笔记相伴&#xff0c;希望能够帮助到大家 目录 微指令的形成方式 微指令的地址形成方式 对应考题 题目&#xff1a;微指令的地址形成方式 - 断定方式 解题思路&#xff1a; 答题&#xff1a; 分析考点&…

每日疑问,多线程场景,下面的代码是否可以保证只执行一次

看着这个代码的目的是只注册一次sighandler&#xff0c;但是这个判定是否可以保证一次&#xff1f;但是根据代码看&#xff0c;其实不会有关键区的读写&#xff0c;所以即使有同步问题&#xff0c;也不会产生什么特别的影响。所以代码没有问题&#xff0c;但是这是一个坑。 in…

Spring Boot中的分页与排序实现

Spring Boot中的分页与排序实现 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在开发Web应用时&#xff0c;分页和排序是常见的功能需求&#xff0c;特别是在处…

计算机体系结构和指令系统

1.计算机体系结构 - 五大部件 - 冯 诺依曼 计算机的特点 1.计算机有五大部件组成 2.指令和数据以同等地位存储于存储器&#xff0c;可按照地址访问 3.指令和数据用二进制表示 4.指令由操作码和地址码组成 5。存储程序 6.以计算器为中心&#xff08;输入、输出设备与存储器…

2024年【湖北省安全员-C证】新版试题及湖北省安全员-C证试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 湖北省安全员-C证新版试题参考答案及湖北省安全员-C证考试试题解析是安全生产模拟考试一点通题库老师及湖北省安全员-C证操作证已考过的学员汇总&#xff0c;相对有效帮助湖北省安全员-C证试题及解析学员顺利通过考试…

WIN10系统自带录屏软件怎么用?

WIN10系统自带录屏软件怎么用&#xff1f; WIN10系统录屏软件怎么用&#xff1f; 第一步&#xff1a;WING 快捷打开系统自带录屏软件&#xff0c;如下&#xff1a; 第二步&#xff1a;点击录屏软件区域“开始录制”按钮进入屏幕录制状态&#xff0c;如下&#xff1a; 第三步…

基于SpringBoot的财务管理系统

根据您提供的论文内容和模板要求&#xff0c;以下是定制化的文章输出&#xff1a; 你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; SpringBoot…