Python进阶--下载想要的格言(基于格言网的Python爬虫程序)

news2024/12/29 1:16:19

 注:由于上篇帖子(Python进阶--爬取下载人生格言(基于格言网的Python3爬虫)-CSDN博客)篇幅长度的限制,此篇帖子对上篇做一个拓展延伸。 

目录

一、爬取格言网中想要内容的url

1、找到想要的内容

2、抓包分析,找到想要内容的url

3、改写爬虫代码

二、输入想要的内容即可下载到本地

1、抓包分析

2、具备上一页和下一页的正常目录页下载内容代码

3、只具备下一页的非正常目录页下载内容代码

4、针对以上情况都适用的完整代码


一、爬取格言网中想要内容的url

1、找到想要的内容

        在格言网中,里面包含大量类型的格言、经典语录、句子、对联、成语等内容。上篇帖子仅仅只是爬取了人生格言这一部分,如果想要爬取下载其他内容,只需要将上篇帖子的全部代码中的url方面的代码做一个修改,即可爬取你想要的内容。

查看格言网的所有类型的内容步骤如下:

1、打开格言网首页(http://www.mouxiao.com/)

2、往下翻找到栏目导航

3、此部分就是格言网所有类型的内容

注:格言网中其他部分的内容都是此部分的子节点

2、抓包分析,找到想要内容的url

        根据上篇帖子抓包分析的方式,在此处继续根据此方式进行抓包分析,定位到想要内容的url。

        此处,定位到想要内容的url。(开心!!!)

3、改写爬虫代码

        思路:将想要内容的url赋给上篇博客代码中的url部分即可   

上篇帖子中的所有代码:

import re
import requests
from lxml import etree
# 获取user-agent,用于身份识别
header = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Mobile Safari/537.36'}
# 1、获取具体格言内容和标题
# 封装成一个函数,输入具体人生格言页的地址,获取其具体的人生格言和标题
def get_content(url):
    # 请求当前网页的源代码
    r = requests.get(url,headers=header)
    # 拒绝requests的自动编码,保留源代码
    r.encoding = r.apparent_encoding
    # 解析源代码提取具体格言内容和标题
    # 获取网页源代码
    html = etree.HTML(r.text)
    # 获取格言内容
    content = html.xpath('//div[@class="maike"]/p[@class="p"]/text()')
    # 使用 join() 方法将列表中的元素用换行符连接起来
    content = '\n'.join(content)
    # 获取标题
    title = html.xpath('//div[@class="maike"]/h1[@class="title_l"]/text()')[0]
    # 返回标题和内容
    return title,content
# 当前页面
index_url = 'http://www.mouxiao.com/renshenggeyan/index.html'
# 2、获取各种类型的人生格言链接并下载其具体人生格言内容和标题
# 输入当前人生格言的目录页地址,获取各种类型的人生格言链接并下载其具体人生格言内容和标题
def pageupload_play(index_url):
    # 请求当前网页的源代码
    r = requests.get(index_url,headers=header)
    # 由于requests模块会将获取的网页源代码进行自动编码,此处我们不需要编码。
    # 故采用apparent_encoding方法,禁止requests模块自动编码。
    r.encoding = r.apparent_encoding
    # 采用xpath的方式定位获取链接所在位置
    html = etree.HTML(r.text)
    links = html.xpath('//ul[@class="readers-list"]//a/@href')
    # 要匹配所有以数字开头,后面跟 '.html' 的元素,可以遍历列表
    matched_links = []
    for link in links:
        # 采用正则表达式筛选出我们所需要的链接,将其保存到matched_links中
        if re.findall(r'^\d+\.html', link):
            matched_links.append(link)
    # 遍历每个类型人生格言的具体人生格言内容和标题,对其进行下载
    for link in matched_links:
        # link中获取的链接是相对地址,需要补全前面的地址
        link1 = 'http://www.mouxiao.com/renshenggeyan/'+link
        # 调用get_content方法下载内容和标题并保存到本地
        title, content = get_content(link1)
        with open(f'格言/{title}.txt','w',encoding='utf-8') as f:
            f.write('\t'+title + '\n\n')
            f.write(content)
            print(f'已下载...{title}')
# 3、获取下一页的地址
# 封装成一个函数,输入当前页面的url,返回下一页的url
def get_nextpage(url):
    #请求当前网页的源代码
    r = requests.get(url, headers=header)
    # 拒绝requests的自动编码,保留源代码
    r.encoding = r.apparent_encoding
    # 定位到下一页的url地址
    html = etree.HTML(r.text)
    next_page = html.xpath('//div[@class="maike"]//p[@class="p"]//a/@href')[3]
    # 因为所获取的下一页地址是相对地址,故进行补全
    next_page = 'http://www.mouxiao.com/renshenggeyan/'+ next_page
    # 如果下一页地址和当前页地址不相等,则将下一页地址返回
    if next_page != url:
        return next_page
# 4、将以上函数排放好顺序进行调用,下载人生格言的全部内容及标题
n = 1
while 1:
    print(f"正在下载第{n}页...")
    print("下载地址为:"+index_url)
    pageupload_play(index_url)
    page = get_nextpage(index_url)
    index_url = page
    if index_url==None:
        break
    n+=1

   此处以爬取励志格言为例,只需要将上面部分代码中的url改为励志格言的url即可。

代码如下:

import re
import requests
from lxml import etree
# 获取user-agent,用于身份识别
header = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Mobile Safari/537.36'}
# 1、获取具体格言内容和标题
# 封装成一个函数,输入具体人生格言页的地址,获取其具体的人生格言和标题
def get_content(url):
    # 请求当前网页的源代码
    r = requests.get(url,headers=header)
    # 拒绝requests的自动编码,保留源代码
    r.encoding = r.apparent_encoding
    # 解析源代码提取具体格言内容和标题
    # 获取网页源代码
    html = etree.HTML(r.text)
    # 获取格言内容
    content = html.xpath('//div[@class="maike"]/p[@class="p"]/text()')
    # 使用 join() 方法将列表中的元素用换行符连接起来
    content = '\n'.join(content)
    # 获取标题
    title = html.xpath('//div[@class="maike"]/h1[@class="title_l"]/text()')[0]
    # 返回标题和内容
    return title,content
# 当前页面
index_url = 'http://www.mouxiao.com/lizhimingyan/index.html'
# 2、获取各种类型的人生格言链接并下载其具体人生格言内容和标题
# 输入当前人生格言的目录页地址,获取各种类型的人生格言链接并下载其具体人生格言内容和标题
def pageupload_play(index_url):
    # 请求当前网页的源代码
    r = requests.get(index_url,headers=header)
    # 由于requests模块会将获取的网页源代码进行自动编码,此处我们不需要编码。
    # 故采用apparent_encoding方法,禁止requests模块自动编码。
    r.encoding = r.apparent_encoding
    # 采用xpath的方式定位获取链接所在位置
    html = etree.HTML(r.text)
    links = html.xpath('//ul[@class="readers-list"]//a/@href')
    # 要匹配所有以数字开头,后面跟 '.html' 的元素,可以遍历列表
    matched_links = []
    for link in links:
        # 采用正则表达式筛选出我们所需要的链接,将其保存到matched_links中
        if re.findall(r'^\d+\.html', link):
            matched_links.append(link)
    # 遍历每个类型人生格言的具体人生格言内容和标题,对其进行下载
    for link in matched_links:
        # link中获取的链接是相对地址,需要补全前面的地址
        link1 = 'http://www.mouxiao.com/lizhimingyan/'+link
        # 调用get_content方法下载内容和标题并保存到本地
        title, content = get_content(link1)
        with open(f'励志格言/{title}.txt','w',encoding='utf-8') as f:
            f.write('\t'+title + '\n\n')
            f.write(content)
            print(f'已下载...{title}')
# 3、获取下一页的地址
# 封装成一个函数,输入当前页面的url,返回下一页的url
def get_nextpage(url):
    #请求当前网页的源代码
    r = requests.get(url, headers=header)
    # 拒绝requests的自动编码,保留源代码
    r.encoding = r.apparent_encoding
    # 定位到下一页的url地址
    html = etree.HTML(r.text)
    next_page = html.xpath('//div[@class="maike"]//p[@class="p"]//a/@href')[3]
    # 因为所获取的下一页地址是相对地址,故进行补全
    next_page = 'http://www.mouxiao.com/lizhimingyan/'+ next_page
    # 如果下一页地址和当前页地址不相等,则将下一页地址返回
    if next_page != url:
        return next_page
# 4、将以上函数排放好顺序进行调用,下载人生格言的全部内容及标题
n = 1
while 1:
    print(f"正在下载第{n}页...")
    print("下载地址为:"+index_url)
    pageupload_play(index_url)
    page = get_nextpage(index_url)
    index_url = page
    if index_url==None:
        break
    n+=1

二、输入想要的内容即可下载到本地

1、抓包分析

        根据上面的抓包分析,可知栏目导航部分内容的url如下图所示:

  根据以上情况,可以分析得出:

  • 栏目导航的链接地址是以下构造
    http://www.mouxiao.com/{你想要的内容的中文拼音}
    注:好书推荐为book,不为中文拼音:haoshutuijian
    

       注:/index.html或者/index-数字.html或者数字.html是属于子页节点,它被包括在以上url的地址中。(此处我们只要找到父页节点,即可访问到其子页节点)

        思路:想要通过输入想要的内容来下载,则可以通过读取键盘消息,来填充此部分内容的url。

        点击栏目导航中所有部分的类型链接跳转到其目录页,查看其目录页的布局情况。据此发现: 

  • 如果要下载的某个内容的目录页只有下一页选项的情况,其获取下一页的所在源代码的链接位置有所改变,获取下一页的链接地址的代码需要做相应修改。

  • 正常的网页应具备上一页和下一页,这样下一页的url位置不会改变,可以适用上篇帖子获取下一页的函数代码 

2、具备上一页和下一页的正常目录页下载内容代码

        具备上一页和下一页的正常目录页下载的代码为:

import os
import re
import requests
from lxml import etree
# 获取user-agent,用于身份识别
header = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Mobile Safari/537.36'}
# 1、获取具体格言内容和标题
# 封装成一个函数,输入具体人生格言页的地址,获取其具体的人生格言和标题
def get_content(url):
    # 请求当前网页的源代码
    r = requests.get(url,headers=header)
    # 拒绝requests的自动编码,保留源代码
    r.encoding = r.apparent_encoding
    # 解析源代码提取具体格言内容和标题
    # 获取网页源代码
    html = etree.HTML(r.text)
    # 获取格言内容
    content = html.xpath('//div[@class="maike"]/p[@class="p"]/text()')
    # 使用 join() 方法将列表中的元素用换行符连接起来
    content = '\n'.join(content)
    # 获取标题
    title = html.xpath('//div[@class="maike"]/h1[@class="title_l"]/text()')[0]
    # 返回标题和内容
    return title,content
# 当前页面
keyword = input("情输入你想要的内容(拼音):")
index_url = f'http://www.mouxiao.com/{keyword}'
regular_part = f'http://www.mouxiao.com/{keyword}/'
dictionary = f'../{keyword}'
os.makedirs(dictionary, exist_ok=True)
# 2、获取各种类型的人生格言链接并下载其具体人生格言内容和标题
# 输入当前人生格言的目录页地址,获取各种类型的人生格言链接并下载其具体人生格言内容和标题
def pageupload_play(index_url):
    # 请求当前网页的源代码
    r = requests.get(index_url,headers=header)
    # 由于requests模块会将获取的网页源代码进行自动编码,此处我们不需要编码。
    # 故采用apparent_encoding方法,禁止requests模块自动编码。
    r.encoding = r.apparent_encoding
    # 采用xpath的方式定位获取链接所在位置
    html = etree.HTML(r.text)
    links = html.xpath('//ul[@class="readers-list"]//a/@href')
    # 要匹配所有以数字开头,后面跟 '.html' 的元素,可以遍历列表
    matched_links = []
    for link in links:
        # 采用正则表达式筛选出我们所需要的链接,将其保存到matched_links中
        if re.findall(r'^\d+\.html', link):
            matched_links.append(link)
    # 遍历每个类型人生格言的具体人生格言内容和标题,对其进行下载
    for link in matched_links:
        # link中获取的链接是相对地址,需要补全前面的地址
        link1 = regular_part+link
        # 调用get_content方法下载内容和标题并保存到本地
        title, content = get_content(link1)
        with open(f'../{keyword}/{title}.txt','w',encoding='utf-8') as f:
            f.write('\t'+title + '\n\n')
            f.write(content)
            print(f'已下载...{title}')
# 3、获取下一页的地址
# 封装成一个函数,输入当前页面的url,返回下一页的url
def get_nextpage(url):
    #请求当前网页的源代码
    r = requests.get(url, headers=header)
    # 拒绝requests的自动编码,保留源代码
    r.encoding = r.apparent_encoding
    # 定位到下一页的url地址
    html = etree.HTML(r.text)
    next_page = html.xpath('//div[@class="maike"]//p[@class="p"]//a/@href')[3]
    # 因为所获取的下一页地址是相对地址,故进行补全
    next_page = regular_part+ next_page
    # 如果下一页地址和当前页地址不相等,则将下一页地址返回
    if next_page != url:
        return next_page
# 4、将以上函数排放好顺序进行调用,下载人生格言的全部内容及标题
n = 1
while 1:
    print(f"正在下载第{n}页...")
    print("下载地址为:"+index_url)
    pageupload_play(index_url)
    page = get_nextpage(index_url)
    index_url = page
    if index_url==None:
        break
    n+=1

        输入你想要的内容,即可下载获得!!!

3、只具备下一页的非正常目录页下载内容代码

        这种情况下,下一页所在的源代码的url位置发生了变化,抓包分析出此时下一页url所在位置,修改这部分代码即可。

注:

  • 在调试的时候发现,这种情况下在处于最后一页时,没有下一页的选项反而出现上一页的选项,且上一页选项的链接所在源代码的位置与下一页选项的链接所在源代码的位置一致。
  •  在正常页面中,处于最后一页时,上一页和下一页选项仍然出现,且链接所在位置都没有发生改变,下一页的链接地址与当前页面的链接地址一致。

        基于以上情况,返回下一页url时需要使用不同的条件。

代码如下:

import os
import re
import requests
from lxml import etree
# 获取user-agent,用于身份识别
header = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Mobile Safari/537.36'}
# 1、获取具体格言内容和标题
# 封装成一个函数,输入具体人生格言页的地址,获取其具体的人生格言和标题
def get_content(url):
    # 请求当前网页的源代码
    r = requests.get(url,headers=header)
    # 拒绝requests的自动编码,保留源代码
    r.encoding = r.apparent_encoding
    # 解析源代码提取具体格言内容和标题
    # 获取网页源代码
    html = etree.HTML(r.text)
    # 获取格言内容
    content = html.xpath('//div[@class="maike"]/p[@class="p"]/text()')
    # 使用 join() 方法将列表中的元素用换行符连接起来
    content = '\n'.join(content)
    # 获取标题
    title = html.xpath('//div[@class="maike"]/h1[@class="title_l"]/text()')[0]
    # 返回标题和内容
    return title,content
# 当前页面
keyword = input("情输入你想要的内容(拼音):")
index_url = f'http://www.mouxiao.com/{keyword}'
regular_part = f'http://www.mouxiao.com/{keyword}/'
dictionary = f'../{keyword}'
os.makedirs(dictionary, exist_ok=True)
# 2、获取各种类型的人生格言链接并下载其具体人生格言内容和标题
# 输入当前人生格言的目录页地址,获取各种类型的人生格言链接并下载其具体人生格言内容和标题
def pageupload_play(index_url):
    # 请求当前网页的源代码
    r = requests.get(index_url,headers=header)
    # 由于requests模块会将获取的网页源代码进行自动编码,此处我们不需要编码。
    # 故采用apparent_encoding方法,禁止requests模块自动编码。
    r.encoding = r.apparent_encoding
    # 采用xpath的方式定位获取链接所在位置
    html = etree.HTML(r.text)
    links = html.xpath('//ul[@class="readers-list"]//a/@href')
    # 要匹配所有以数字开头,后面跟 '.html' 的元素,可以遍历列表
    matched_links = []
    for link in links:
        # 采用正则表达式筛选出我们所需要的链接,将其保存到matched_links中
        if re.findall(r'^\d+\.html', link):
            matched_links.append(link)
    # 遍历每个类型人生格言的具体人生格言内容和标题,对其进行下载
    for link in matched_links:
        # link中获取的链接是相对地址,需要补全前面的地址
        link1 = regular_part+link
        # 调用get_content方法下载内容和标题并保存到本地
        title, content = get_content(link1)
        with open(f'../{keyword}/{title}.txt','w',encoding='utf-8') as f:
            f.write('\t'+title + '\n\n')
            f.write(content)
            print(f'已下载...{title}')
# 3、获取下一页的地址
# 封装成一个函数,输入当前页面的url,返回下一页的url
def get_nextpage(url):
    #请求当前网页的源代码
    r = requests.get(url, headers=header)
    # 拒绝requests的自动编码,保留源代码
    r.encoding = r.apparent_encoding
    # 定位到下一页的url地址
    html = etree.HTML(r.text)
    next_page = html.xpath('//div[@class="maike"]//p[@class="p"]//a[text()="下一页"]/@href')
    if len(next_page)==0:
        return
    # 因为所获取的下一页地址是相对地址,故进行补全
    next_page = regular_part + ''.join(next_page)
    return next_page
    # 如果下一页地址和当前页地址不相等,则将下一页地址返回
# 4、将以上函数排放好顺序进行调用,下载人生格言的全部内容及标题
n = 1
while 1:
    print(f"正在下载第{n}页...")
    print("下载地址为:"+index_url)
    pageupload_play(index_url)
    page = get_nextpage(index_url)
    index_url = page
    if index_url==None:
        break
    n+=1

4、针对以上情况都适用的完整代码

        将以上两种情况用if语句做一个判断,即可。完整代码如下:

import os
import re
import requests
from lxml import etree
# 获取user-agent,用于身份识别
header = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Mobile Safari/537.36'}
# 1、获取具体格言内容和标题
# 封装成一个函数,输入具体人生格言页的地址,获取其具体的人生格言和标题
def get_content(url):
    # 请求当前网页的源代码
    r = requests.get(url,headers=header)
    # 拒绝requests的自动编码,保留源代码
    r.encoding = r.apparent_encoding
    # 解析源代码提取具体格言内容和标题
    # 获取网页源代码
    html = etree.HTML(r.text)
    # 获取格言内容
    content = html.xpath('//div[@class="maike"]/p[@class="p"]/text()')
    # 使用 join() 方法将列表中的元素用换行符连接起来
    content = '\n'.join(content)
    # 获取标题
    title = html.xpath('//div[@class="maike"]/h1[@class="title_l"]/text()')[0]
    # 返回标题和内容
    return title,content
# 当前页面
keyword = input("情输入你想要的内容(拼音):")
index_url = f'http://www.mouxiao.com/{keyword}'
regular_part = f'http://www.mouxiao.com/{keyword}/'
dictionary = f'../{keyword}'
os.makedirs(dictionary, exist_ok=True)
# 2、获取各种类型的人生格言链接并下载其具体人生格言内容和标题
# 输入当前人生格言的目录页地址,获取各种类型的人生格言链接并下载其具体人生格言内容和标题
def pageupload_play(index_url):
    # 请求当前网页的源代码
    r = requests.get(index_url,headers=header)
    # 由于requests模块会将获取的网页源代码进行自动编码,此处我们不需要编码。
    # 故采用apparent_encoding方法,禁止requests模块自动编码。
    r.encoding = r.apparent_encoding
    # 采用xpath的方式定位获取链接所在位置
    html = etree.HTML(r.text)
    links = html.xpath('//ul[@class="readers-list"]//a/@href')
    # 要匹配所有以数字开头,后面跟 '.html' 的元素,可以遍历列表
    matched_links = []
    for link in links:
        # 采用正则表达式筛选出我们所需要的链接,将其保存到matched_links中
        if re.findall(r'^\d+\.html', link):
            matched_links.append(link)
    # 遍历每个类型人生格言的具体人生格言内容和标题,对其进行下载
    for link in matched_links:
        # link中获取的链接是相对地址,需要补全前面的地址
        link1 = regular_part+link
        # 调用get_content方法下载内容和标题并保存到本地
        title, content = get_content(link1)
        with open(f'../{keyword}/{title}.txt','w',encoding='utf-8') as f:
            f.write('\t'+title + '\n\n')
            f.write(content)
            print(f'已下载...{title}')
# 3、获取下一页的地址
# 封装成一个函数,输入当前页面的url,返回下一页的url
def get_nextpage(url):
    #请求当前网页的源代码
    r = requests.get(url, headers=header)
    # 拒绝requests的自动编码,保留源代码
    r.encoding = r.apparent_encoding
    # 定位到下一页的url地址
    html = etree.HTML(r.text)
    next_page = html.xpath('//div[@class="maike"]//p[@class="p"]//a/@href')
    # 如果是具有上一页和下一页的正常目录页面
    if len(next_page) > 2:
        next_page = next_page[3]
        next_page = regular_part + next_page
        if next_page != url:
            return next_page
    # 如果只有下一页的目录页面
    else:
        next_page = html.xpath('//div[@class="maike"]//p[@class="p"]//a[text()="下一页"]/@href')
        if len(next_page)==0:
            return
        next_page = regular_part + ''.join(next_page)
        return next_page
n = 1
while 1:
    print(f"正在下载第{n}页...")
    print("下载地址为:"+index_url)
    pageupload_play(index_url)
    page = get_nextpage(index_url)
    index_url = page
    if index_url==None:
        break
    n+=1

 运行以上代码需要注意的地方:

  • 造句大全和成语大全,需要输入的是zaoju和fanwen。而不是zaojudaquan和chengyudaquan

  • 英语角和道德经的目录页布局跟其他内容的目录页布局不同,内容和所在标签都不是跟以上情况处于网页源代码的相同位置。如果需要爬取则需根据上篇贴子进行抓包分析,修改其相应代码即可。
  • 书评的页面布局与以上布局类似,但所有的内容在网页源代码的的位置与以上情况有所不同。如果需要爬取,需要抓包分析修改其xpath所定位到的部分。

注:本帖只用于学习交流,禁止商用! 

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

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

相关文章

C++之std::tuple(一) : 使用精讲(全)

相关系列文章 C之std::tuple(一) : 使用精讲(全) C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二):深入剖析 深入理解可变参数(va_list、std::initializer_list和可变参数模版) std::apply源码分析 目录 1.简介 2.std::ignore介绍 3.创建元组 3.1.…

【极数系列】Flink集成KafkaSink 实时输出数据(11)

文章目录 01 引言02 连接器依赖2.1 kafka连接器依赖2.2 base基础依赖 03 使用方法04 序列化器05 指标监控06 项目源码实战6.1 包结构6.2 pom.xml依赖6.3 配置文件6.4 创建sink作业 01 引言 KafkaSink 可将数据流写入一个或多个 Kafka topic 实战源码地址,一键下载可用&#xf…

2024最新CleanMyMac X优化Mac电脑系统体验分享

使用Mac电脑的用户都希望它们能够保持最佳性能。但有时,你可能会发现你的Mac运行变慢或响应迟缓。这可能是由于几个原因造成的,包括硬盘空间不足、系统缓存堆积、以及过多的启动项等。解决了这些问题,你可以显著提升你的Mac性能。本文将探讨导…

寒假作业2024.2.7

1请编程实现二又树的操作 1.1二又树的创建 1.2二又树的先序遍历 1.3二又树的中序遍历 1.4二又树的后序遍历 1.5二又树各个节点度的个数 1.6二叉树的深度 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <…

【JS逆向六】(上)逆向模拟生成某网站的【sig】和【payload】的值 仅供学习

逆向日期&#xff1a;2024.02.07 使用工具&#xff1a;Node.js 加密方法&#xff1a;未知 / md5标准库 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 可使用AES进行解密处理&#xff08; 直接解密即可&#xff09;&#xff1a;在线AES加解…

[HCIE]防火墙基础配置

实验目的&#xff1a;1.允许主机 ping FW的物理接口&#xff1b; 2.允许FW访问trust区域的主机&#xff1b; 3.允许trust主机访问其他所有区域。 配置步骤&#xff1a; 1.配置所有接口地址&#xff08;略&#xff09; 2.将防火墙接口加入到各自的区域 firewall zone trust …

企业数字化转型面临什么挑战?

随着科技的飞速发展&#xff0c;企业数字化转型已成为当今商业世界的一大趋势。然而&#xff0c;在这场变革中&#xff0c;企业可能会面临诸多挑战。本文将结合实际案例&#xff0c;探讨企业在数字化转型过程中可能遇到的一些问题&#xff0c;并提供相应的解决建议。 1.技术挑…

C# CAD交互界面-自定义窗体(三)

运行环境 vs2022 c# cad2016 调试成功 一、引用 二、开发代码进行详细的说明 初始化与获取AutoCAD核心对象&#xff1a; Database db HostApplicationServices.WorkingDatabase;&#xff1a;这行代码获取当前工作中的AutoCAD数据库对象。在AutoCAD中&#xff0c;所有图形数…

研发误删的库,凭什么要 DBA 承担责任

镇楼图 三个角色 删库以及更宽泛的数据库变更场景中有三个角色&#xff0c;业务研发&#xff0c;DBA 以及使用的数据库变更工具&#xff1a; 业务研发通常指的是后端研发。国内最主流的技术栈还是 Java&#xff0c;此外 Go 也有一部分&#xff0c;另有全栈的则使用 Node。这些…

如何开始深度学习,从实践开始

将“如何开始深度学习”这个问题喂给ChatGPT和文心一言&#xff0c;会给出很有专业水准的答案&#xff0c;比如&#xff1a; 要开始深度学习&#xff0c;你可以遵循以下步骤&#xff1a; 学习Python编程语言的基础知识&#xff0c;因为它在深度学习框架中经常被使用。 熟悉线性…

如何在GitHub上创建自己的个人网站【github.io】

如何在GitHub上创建自己的个人网站【github.io】 1.创建一个自己的GitHub账号2.点击New按钮3.填写个人仓库相关的信息并创建4.安装git&#xff0c;下载你需要的版本。5.上传新的文件6.访问网站7.后话 1.创建一个自己的GitHub账号 GitHub网站 最后会出现像下面一样的界面 2.点…

spring boot学习第十一篇:发邮件

1、pom.xml文件内容如下&#xff08;是我所有学习内容需要的&#xff0c;不再单独分出来&#xff0c;包不会冲突&#xff09;&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"…

基于Java农产品商城系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

OpenCV-31 获得形态学卷积核

OpenCV提供了获取卷积核的API&#xff0c;不需要我们手动创建卷积核。 通过下面API---getStructuringElement(shape&#xff0c;ksize&#xff0c;[, anchor]) shape是指卷积核的型状&#xff0c;注意不是指长宽&#xff0c;是指卷积核中1形成的形状。MORPH_RECT 卷积核中的1…

内网远程控制——anydesk

而通常这个时候我们有权限修改anydesk的配置文件&#xff0c;这里进行测试&#xff0c;起两个虚拟机&#xff0c;设定一个场景&#xff08;攻击机拿到了webshell&#xff0c;受害机开着windows defender&#xff0c;如何去渗透拿到受害机权限&#xff09; 情景复现 这里拿到了…

C#(C Sharp)学习笔记_If条件判断语句【五】

前言&#xff1a; 本期学习的是编程语言中的主要语句&#xff1a;if-条件判断语句。在这里我们会学到&#xff1a;if语法&#xff0c;if-else&#xff0c;和if嵌套。话不多说&#xff0c;我们开始吧&#xff01; 什么是条件判断语句&#xff1f; 条件语句是用来判断给定的条件…

WireShark使用教程(TCP/IP 部分情况居然变成三次挥手了???)

WireShark自学 WrieShark介绍WrieShark的应用常见协议包的抓取 WrieShark常用手段混杂模式 和 普通模式混杂模式打开方式普通模式 过滤器过滤器类型捕获过滤器显示过滤器语法捕获到的数据的列的含义常见的 Protocols - Values 键盘快捷键常用的过滤命令常用协议分析ARP 协议分析…

Unity类银河恶魔城学习记录3-4 EnemyBattleState P50

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Enemy.cs using System.Collections; using System.Collections.Generic; …

数据结构第十一天(栈)

目录 前言 概述 源码&#xff1a; 主函数&#xff1a; 运行结果&#xff1a; ​编辑 前言 今天简单的实现了栈&#xff0c;主要还是指针操作&#xff0c;soeasy! 友友们如果想存储其他内容&#xff0c;只需修改结构体中的内容即可。 哈哈&#xff0c;要是感觉不错&…

3D室内虚拟灭火体验为预防火灾提供全新方案

室内火灾常见于充电器未拔、电动车、油锅起火及煤气泄露等原因&#xff0c;由于室内空间小、易燃物多&#xff0c;因此极易造成较大的人员财产损失&#xff0c;3D仿真还原技术、通过1&#xff1a;1模拟还原火灾发生全过程&#xff0c;火灾VR安全培训提供全方位、真实感强的模拟…