Python爬虫学习第三弹 —— Xpath 页面解析 实现无广百·度

早上好啊,大佬们。上回使用 Beautiful Soup 进行页面解析的内容是不是已经理解得十分透彻了~
这回我们再来尝试使用另外一种页面解析,来重构上一期里写的那些代码。
讲完Xpath之后,小白兔会带大家解决上期里百·度搜索的代码编写,保证会有收获的哦,大家好好看好好学。

Xpath

XPath(XML Path Language)是一种用于在 XML(可扩展标记语言)文档中定位节点的语言。它也可以用于 HTML(超文本标记语言)文档,因为 HTML 可以看作是 XML 的一个子集。XPath 通过路径表达式来选取 XML 文档中的节点或者节点集。

Xpath不用额外安装包。

语法规则

首先,肯定要讲的是语法规则。
它的语法也很简单,都是很容易的。

1. 【//】 根目录
2. 【/】 子目录
3. 【@】获取属性
4. 【text()】获取文本
5. contains(@class,‘result’)

Bs4代码用Xpath重构

Xpath表达式

操作与上期基本一致,我们只着眼于定位内容的部分,也就是书写 Xpath 表达式
在这里插入图片描述
我们包裹所有我们所需内容的是这里,也就是说它就是我们所要指向的大类。

//div[@class=“Community”]

然后再往里走,指向我们所需内容。

//div[@class=“Community”]/div[contains(@class,“active”)]

最后指向储存链接

//div[@class=“Community”]/div[contains(@class,“active”)]/div/div/div[contains(@class,“content”)]/a

由于Xpath是一级一级向下的,所以不会遇到Bs4当时的情况,它的指向性会更好一些。

然后,对于我们的文本内容,也是一样的,大家可以自己试试,我在这里直接放结果了。

//div[@class=“Community”]/div[contains(@class,“active”)]/div/div/div/a/p/span[contains(@class,“blog-text”)]

这样我们就解决了Xpath表达式。

Python代码修改

我们可以先打开上次写的代码,对照着一样的思路,只需要修改其中几句就可以了。

首先,我们使用的是Xpath所以导入的包要改;

from lxml import etree

然后,我们页面解析时候的语句也要改;

soup=etree.HTML(html.text)

最后,把搜索语句修改了就完成了。

urls = soup.xpath('//div[@class="Community"]/div[contains(@class,"active")]/div/div/div[contains(@class,"content")]/a')
titles = soup.xpath('//div[@class="Community"]/div[contains(@class,"active")]/div/div/div/a/p/span[contains(@class,"blog-text")]')

由于当时写的Bs4的代码有一些问题,所以最后输出要进行一些修改。

这里就是完整代码了——

import requests
from lxml import etree

url = 'https://www.csdn.net/?spm=1011.2266.3001.4476'
headers={
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
}

html = requests.get(url,headers=headers)
soup=etree.HTML(html.text)

urls = soup.xpath('//div[@class="Community"]/div[contains(@class,"active")]/div/div/div[contains(@class,"content")]/a')
titles = soup.xpath('//div[@class="Community"]/div[contains(@class,"active")]/div/div/div/a/p/span[contains(@class,"blog-text")]')

for i in range(len(titles)):
    print(urls[i].get('href'))
    print(titles[i].text)

百·度搜索实现

上期最后,小白兔不是给了大家一个题目嘛,相信按照大家的聪明才智肯定都能写出来,这里小白兔还是提供一下我的思路。

百度搜索模拟

首先,我们手动先进行一次百度的搜索,看看怎么去获取我们所需要的内容。
在这里插入图片描述
在这里插入图片描述

例如我们搜索一下 Python 和 爬虫。
然后打开它们的检查,抓一下包,找到它的网址内容。
在这里插入图片描述
在这里插入图片描述
对于不同的网址搜索,改变的就是它的一些载荷
所以我们可以比较一下他们的区别,然后就能够找到搜索不同内容需要修改的内容。
在这里插入图片描述
我们很容易就能发现其中表示搜索内容的载荷 —— wd
但是其中还是有很多参数是不同的。
所以这里我又进行了一次搜索,得到的结果如下:
在这里插入图片描述
可以发现那些不同的参数在搜索同一个内容时也是不一样的,说明它们不影响搜索内容。
在这里插入图片描述
我们看一下新的搜索结果,发现它返回的内容是不同的,说明那些参数是随机生成的,是影响这里的搜索结果的,所以我们可以不用管它们。
这些参数具体指什么,我还没学到,有大佬知道可以告诉一下。
OK,下面我们可以试一下,只修改 wd 参数能不能进入到不同的搜索结果。

https://www.baidu.com/s?wd=Python
在这里插入图片描述

https://www.baidu.com/s?wd=Java
在这里插入图片描述

显然我们的猜测是对的。

Python爬虫访问页面

那么,我们就先用爬虫来访问一下页面。

https://www.baidu.com/s?wd=Python&rsv_spt=1&rsv_iqid=0xb6f30fb0001dc9b1&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_dl=tb&rsv_sug3=23&rsv_enter=1&rsv_sug1=9&rsv_sug7=100&rsv_sug2=0&rsv_btype=t&inputT=5324&rsv_sug4=5626&rsv_sug=1

我们就先按照我们直接搜索出的结果来进行访问。

import requests

url = 'https://www.baidu.com/s?wd=Python&rsv_spt=1&rsv_iqid=0xb6f30fb0001dc9b1&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_dl=tb&rsv_sug3=23&rsv_enter=1&rsv_sug1=9&rsv_sug7=100&rsv_sug2=0&rsv_btype=t&inputT=5324&rsv_sug4=5626&rsv_sug=1'
headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
}
# 这里我们只需要给一个user-agent就能够返回了,所以我们就不用继续给Cookie 和 Referer等参数。

html = requests.get(url, headers=headers)
print(html.text)

但是,按照我们刚才推论出来的结果,我们用这个网址进行搜索,对于同一个 wd值 的返回的结果是固定的,这当然不是我们想要的。
所以我们可以把其它的参数都给删掉。

"""
import requests

url = 'https://www.baidu.com/s?wd=Python'
headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
    'cookie':'BIDUPSID=B1F42D0D8BD6CE75C9B0290A9BAF2542; PSTM=1734239698; BAIDUID=B1F42D0D8BD6CE75087359BD19AEC05E:FG=1; BDUSS=Dh2dVNkLTQ0ZnZob2lWWGEzNXdZLTBubzZMZlhsMWhYUTNMb2FiSEJVM213SzVuSVFBQUFBJCQAAAAAAQAAAAEAAAAuxc1outqyu8CtvLjQobDXzcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYzh2fmM4dnc; BDUSS_BFESS=Dh2dVNkLTQ0ZnZob2lWWGEzNXdZLTBubzZMZlhsMWhYUTNMb2FiSEJVM213SzVuSVFBQUFBJCQAAAAAAQAAAAEAAAAuxc1outqyu8CtvLjQobDXzcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYzh2fmM4dnc; BD_UPN=12314753; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; delPer=0; BD_CK_SAM=1; PSINO=5; BAIDUID_BFESS=B1F42D0D8BD6CE75087359BD19AEC05E:FG=1; BA_HECTOR=2024ak058g8h2l0g0gah8180afd4as1jph43r1v; ZFY=pRGjK1fPQMj:Aq4XO1Q:ASRpcxNTPuaK66RZE1Jh5snKs:C; B64_BOT=1; H_PS_PSSID=61027_61542_61737_61782_61872_61878_61997_62001; BDRCVFR[feWj1Vr5u3D]=-_EV5wtlMr0mh-8uz4WUvY; baikeVisitId=dd0da186-dfcc-4b80-a830-a2e6ef3800e9; H_PS_645EC=bf09nMdMAx3qgm57o9DK9esArY%2FGSNJULT%2FUkOm6IqpNNWAGBqrHMEotjX3hI1z%2B2tOq; COOKIE_SESSION=29_0_4_9_0_3_1_0_4_3_0_0_0_0_0_0_0_0_1738052751%7C9%23257689_3_1734922612%7C2'

}
# 这里我们需要加上Cookie才行

html = requests.get(url, headers=headers)
print(html.text)

但是这样我们要加上Cookie,可能其它的参数和Cookie有所重复。

页面解析

下面我们来看看怎么去解析页面获取我们所需要的内容。
在这里插入图片描述
其中红框的内容是我们所需要的搜索结果。
方法就是和之前都一样的,这里就不多说了,直接看结果。

//div[@id=‘content_left’]/div[contains(@class,“result”)]/div/div/div/h3/a
上面是Xpath,下面是Bs4
div#content_left div.result.c-container.xpath-log.new-pmd h3 a

#Xpath版
import requests
from lxml import etree

url = 'https://www.baidu.com/s?wd=Python'
headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
    'cookie':'BIDUPSID=B1F42D0D8BD6CE75C9B0290A9BAF2542; PSTM=1734239698; BAIDUID=B1F42D0D8BD6CE75087359BD19AEC05E:FG=1; BDUSS=Dh2dVNkLTQ0ZnZob2lWWGEzNXdZLTBubzZMZlhsMWhYUTNMb2FiSEJVM213SzVuSVFBQUFBJCQAAAAAAQAAAAEAAAAuxc1outqyu8CtvLjQobDXzcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYzh2fmM4dnc; BDUSS_BFESS=Dh2dVNkLTQ0ZnZob2lWWGEzNXdZLTBubzZMZlhsMWhYUTNMb2FiSEJVM213SzVuSVFBQUFBJCQAAAAAAQAAAAEAAAAuxc1outqyu8CtvLjQobDXzcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYzh2fmM4dnc; BD_UPN=12314753; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; delPer=0; BD_CK_SAM=1; PSINO=5; BAIDUID_BFESS=B1F42D0D8BD6CE75087359BD19AEC05E:FG=1; BA_HECTOR=2024ak058g8h2l0g0gah8180afd4as1jph43r1v; ZFY=pRGjK1fPQMj:Aq4XO1Q:ASRpcxNTPuaK66RZE1Jh5snKs:C; B64_BOT=1; H_PS_PSSID=61027_61542_61737_61782_61872_61878_61997_62001; BDRCVFR[feWj1Vr5u3D]=-_EV5wtlMr0mh-8uz4WUvY; baikeVisitId=dd0da186-dfcc-4b80-a830-a2e6ef3800e9; H_PS_645EC=bf09nMdMAx3qgm57o9DK9esArY%2FGSNJULT%2FUkOm6IqpNNWAGBqrHMEotjX3hI1z%2B2tOq; COOKIE_SESSION=29_0_4_9_0_3_1_0_4_3_0_0_0_0_0_0_0_0_1738052751%7C9%23257689_3_1734922612%7C2'
}

html = requests.get(url, headers=headers)

soup = etree.HTML(html.text)
divs = soup.xpath('//div[@id="content_left"]/div[contains(@class,"result")]/div/div/div/h3/a')
for div in divs:
    print(div.text)
    print(div.get('href'))
#Bs4版
import requests
from bs4 import BeautifulSoup

url = 'https://www.baidu.com/s?wd=Python'
headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
    'cookie':'BIDUPSID=B1F42D0D8BD6CE75C9B0290A9BAF2542; PSTM=1734239698; BAIDUID=B1F42D0D8BD6CE75087359BD19AEC05E:FG=1; BDUSS=Dh2dVNkLTQ0ZnZob2lWWGEzNXdZLTBubzZMZlhsMWhYUTNMb2FiSEJVM213SzVuSVFBQUFBJCQAAAAAAQAAAAEAAAAuxc1outqyu8CtvLjQobDXzcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYzh2fmM4dnc; BDUSS_BFESS=Dh2dVNkLTQ0ZnZob2lWWGEzNXdZLTBubzZMZlhsMWhYUTNMb2FiSEJVM213SzVuSVFBQUFBJCQAAAAAAQAAAAEAAAAuxc1outqyu8CtvLjQobDXzcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYzh2fmM4dnc; BD_UPN=12314753; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; delPer=0; BD_CK_SAM=1; PSINO=5; BAIDUID_BFESS=B1F42D0D8BD6CE75087359BD19AEC05E:FG=1; BA_HECTOR=2024ak058g8h2l0g0gah8180afd4as1jph43r1v; ZFY=pRGjK1fPQMj:Aq4XO1Q:ASRpcxNTPuaK66RZE1Jh5snKs:C; B64_BOT=1; H_PS_PSSID=61027_61542_61737_61782_61872_61878_61997_62001; BDRCVFR[feWj1Vr5u3D]=-_EV5wtlMr0mh-8uz4WUvY; baikeVisitId=dd0da186-dfcc-4b80-a830-a2e6ef3800e9; H_PS_645EC=bf09nMdMAx3qgm57o9DK9esArY%2FGSNJULT%2FUkOm6IqpNNWAGBqrHMEotjX3hI1z%2B2tOq; COOKIE_SESSION=29_0_4_9_0_3_1_0_4_3_0_0_0_0_0_0_0_0_1738052751%7C9%23257689_3_1734922612%7C2'
}

html = requests.get(url, headers=headers)

soup = BeautifulSoup(html.text, 'lxml')
divs = soup.select('div#content_left div.result.c-container.xpath-log.new-pmd h3 a')
for div in divs:
    print(div.text.strip())
    print(div['href'])

两个的效果对比,还是Bs4更好一点,所以下面我们就继续用bs
4来写。

自定义搜索和翻页

我们下面来实现自定义的搜索,也就是我们来修改wd的值。
我们只需要加一个input,然后将输入的值替换wd。

import requests
from bs4 import BeautifulSoup

search = input('请输入搜索内容:')
url = f'https://www.baidu.com/s?wd={search}'
headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
    'cookie':'BIDUPSID=B1F42D0D8BD6CE75C9B0290A9BAF2542; PSTM=1734239698; BAIDUID=B1F42D0D8BD6CE75087359BD19AEC05E:FG=1; BDUSS=Dh2dVNkLTQ0ZnZob2lWWGEzNXdZLTBubzZMZlhsMWhYUTNMb2FiSEJVM213SzVuSVFBQUFBJCQAAAAAAQAAAAEAAAAuxc1outqyu8CtvLjQobDXzcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYzh2fmM4dnc; BDUSS_BFESS=Dh2dVNkLTQ0ZnZob2lWWGEzNXdZLTBubzZMZlhsMWhYUTNMb2FiSEJVM213SzVuSVFBQUFBJCQAAAAAAQAAAAEAAAAuxc1outqyu8CtvLjQobDXzcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYzh2fmM4dnc; BD_UPN=12314753; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; delPer=0; BD_CK_SAM=1; PSINO=5; BAIDUID_BFESS=B1F42D0D8BD6CE75087359BD19AEC05E:FG=1; BA_HECTOR=2024ak058g8h2l0g0gah8180afd4as1jph43r1v; ZFY=pRGjK1fPQMj:Aq4XO1Q:ASRpcxNTPuaK66RZE1Jh5snKs:C; B64_BOT=1; H_PS_PSSID=61027_61542_61737_61782_61872_61878_61997_62001; BDRCVFR[feWj1Vr5u3D]=-_EV5wtlMr0mh-8uz4WUvY; baikeVisitId=dd0da186-dfcc-4b80-a830-a2e6ef3800e9; H_PS_645EC=bf09nMdMAx3qgm57o9DK9esArY%2FGSNJULT%2FUkOm6IqpNNWAGBqrHMEotjX3hI1z%2B2tOq; COOKIE_SESSION=29_0_4_9_0_3_1_0_4_3_0_0_0_0_0_0_0_0_1738052751%7C9%23257689_3_1734922612%7C2'
}

html = requests.get(url, headers=headers)

soup = BeautifulSoup(html.text, 'lxml')
divs = soup.select('div#content_left div.result.c-container.xpath-log.new-pmd h3 a')
for div in divs:
    print('标题文本:', div.text.strip())
    print('跳转链接:', div['href'])
    print('-------------------------------------------------------------------------------------------')

在这里插入图片描述
在百度搜索的最后有一个翻页的功能,这个我们也能够实现。
在这里插入图片描述
这是它搜索的 2、3 页,我们观察它的载荷,显而易见pn是我们所需要的翻页。
它是按照 10 为间隔,0是第一页,10是第二页,以此类推。
下面我们可以显示前十页的内容。

import requests
from lxml import etree
from bs4 import BeautifulSoup

search = input('请输入搜索内容:')
for i in range(0, 100, 10):
    url = f'https://www.baidu.com/s?wd={search}&pn={i}'
    headers = {
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
        'cookie':'BIDUPSID=B1F42D0D8BD6CE75C9B0290A9BAF2542; PSTM=1734239698; BAIDUID=B1F42D0D8BD6CE75087359BD19AEC05E:FG=1; BDUSS=Dh2dVNkLTQ0ZnZob2lWWGEzNXdZLTBubzZMZlhsMWhYUTNMb2FiSEJVM213SzVuSVFBQUFBJCQAAAAAAQAAAAEAAAAuxc1outqyu8CtvLjQobDXzcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYzh2fmM4dnc; BDUSS_BFESS=Dh2dVNkLTQ0ZnZob2lWWGEzNXdZLTBubzZMZlhsMWhYUTNMb2FiSEJVM213SzVuSVFBQUFBJCQAAAAAAQAAAAEAAAAuxc1outqyu8CtvLjQobDXzcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYzh2fmM4dnc; BD_UPN=12314753; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; delPer=0; BD_CK_SAM=1; PSINO=5; BAIDUID_BFESS=B1F42D0D8BD6CE75087359BD19AEC05E:FG=1; BA_HECTOR=2024ak058g8h2l0g0gah8180afd4as1jph43r1v; ZFY=pRGjK1fPQMj:Aq4XO1Q:ASRpcxNTPuaK66RZE1Jh5snKs:C; B64_BOT=1; H_PS_PSSID=61027_61542_61737_61782_61872_61878_61997_62001; BDRCVFR[feWj1Vr5u3D]=-_EV5wtlMr0mh-8uz4WUvY; baikeVisitId=dd0da186-dfcc-4b80-a830-a2e6ef3800e9; H_PS_645EC=bf09nMdMAx3qgm57o9DK9esArY%2FGSNJULT%2FUkOm6IqpNNWAGBqrHMEotjX3hI1z%2B2tOq; COOKIE_SESSION=29_0_4_9_0_3_1_0_4_3_0_0_0_0_0_0_0_0_1738052751%7C9%23257689_3_1734922612%7C2'
    }

    html = requests.get(url, headers=headers)

    soup = BeautifulSoup(html.text, 'lxml')
    divs = soup.select('div#content_left div.result.c-container.xpath-log.new-pmd h3 a')
    for div in divs:
        print('标题文本:', div.text.strip())
        print('跳转链接:', div['href'])
        print('-------------------------------------------------------------------------------------------')

如上,我们的无广百·度就实现了。

尾声

大佬们,Xpath的内容就到这里了,和Bs4的处理基本也是一样的,今天写的所有代码我会在下面通过网盘的方式提供给大家,可以用来复习一下。
链接:小白兔的礼物——Xpath学习
提取码:BpWS
大家可以自行去多爬一些网页,多多熟练一下。
下一回我们来学 正则表达式,正则是最全能的一个,当前面两个不能用的时候,我们就需要用上我们的正则。
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

消息队列篇--通信协议篇--应用层协议和传输层协议理解

在网络通信中,传输层协议和应用层协议是OSI模型中的两个不同层次的协议,它们各自承担着不同的职责。 下文中,我们以TCP/UDP(传输层协议)和HTTP/SMTP(应用层协议)为例进行详细解释。 1、传输层协…

Maui学习笔记- SQLite简单使用案例02添加详情页

我们继续上一个案例,实现一个可以修改当前用户信息功能。 当用户点击某个信息时,跳转到信息详情页,然后可以点击编辑按钮导航到编辑页面。 创建项目 我们首先在ViewModels目录下创建UserDetailViewModel。 实现从详情信息页面导航到编辑页面…

arkui-x跨平台与android java联合开发

华为鸿蒙系统采用的是arkts,支持跨平台crossplatform 即前端为arkts,arkui-x框架,后端为其他的语言框架。 本篇示例后端采用的是java,android studio工程。 主要方式是前端鸿蒙完成界面元素、布局等效果,后面androi…

Unity敌人逻辑笔记

写ai逻辑基本上都需要状态机。因为懒得手搓状态机,所以选择直接用动画状态机当逻辑状态机用。 架构设计 因为敌人的根节点已经有一个animator控制动画,只能增加一个子节点AI,给它加一个animator指向逻辑“动画”状态机。还有一个脚本&#…

ts 基础核心

吴悠讲编程 : 20分钟学会TypeScript 无废话速成TS https://www.bilibili.com/video/BV1gX4y177Kf

BGP分解实验·11——路由聚合与条件性通告(3)

续接上(2)的实验。其拓扑如下: 路由聚合的负向也就是拆分,在有双出口的情况下,在多出口做流量分担是优选方法之一。 BGP可以根据指定来源而聚合路由,在产生该聚合路由的范围内的条目注入到本地BGP表后再向…

【leetcode】T1599

解题心得: 题目长且绕,直接看测试样例的解析有助于更快把握题目核心需求(即关注样例的输入、运算逻辑、输出) 题面 原题链接1599. 经营摩天轮的最大利润 - 力扣(LeetCode) AC代码 class Solution { pub…

Ansible自动化运维实战--通过role远程部署nginx并配置(8/8)

文章目录 1、准备工作2、创建角色结构3、编写任务4、准备配置文件(金甲模板)5、编写变量6、编写处理程序7、编写剧本8、执行剧本Playbook9、验证-游览器访问每台主机的nginx页面 在 Ansible 中,使用角色(Role)来远程部…

关于opencv环境搭建问题:由于找不到opencv_worldXXX.dll,无法执行代码,重新安装程序可能会解决此问题

方法一:利用复制黏贴方法 打开opencv文件夹目录找到\opencv\build\x64\vc15\bin 复制该目录下所有文件,找到C:\Windows\System32文件夹(注意一定是C盘)黏贴至该文件夹重新打开VS。 方法二:直接配置环境 打开opencv文…

Linux(19)——使用正则表达式匹配文本

新年快乐! 目录 一、正则表达式: 二、通过 grep 匹配正则表达式: 三、查找匹配项: 一、正则表达式: 正则表达式使用模式匹配机制查找特定内容,vim、grep 和 less 命令都可以使用正则表达式,P…

蓝牙技术在物联网中的应用有哪些

蓝牙技术凭借低功耗、低成本和易于部署的特性,在物联网领域广泛应用,推动了智能家居、工业、医疗、农业等多领域发展。 智能家居:在智能家居系统里,蓝牙技术连接各类设备,像智能门锁、智能灯泡、智能插座、智能窗帘等。…

使用 Confluent Cloud 的 Elasticsearch Connector 部署 Elastic Agent

作者:来自 Elastic Nima Rezainia Confluent Cloud 用户现在可以使用更新后的 Elasticsearch Sink Connector 与 Elastic Agent 和 Elastic Integrations 来实现完全托管且高度可扩展的数据提取架构。 Elastic 和 Confluent 是关键的技术合作伙伴,我们很…

【数据结构】初识链表

顺序表的优缺点 缺点: 中间/头部的插入删除,时间复杂度效率较低,为O(N) 空间不够的时候需要扩容。 如果是异地扩容,增容需要申请新空间,拷贝数据,释放旧空间,会有不小的消耗。 扩容可能会存在…

deepseek R1的确不错,特别是深度思考模式

deepseek R1的确不错,特别是深度思考模式,每次都能自我反省改进。比如我让 它写文案: 【赛博朋克版程序员新春密码——2025我们来破局】 亲爱的代码骑士们: 当CtrlS的肌肉记忆遇上抢票插件,当Spring Boot的…

Python爬虫之——Cookie存储器

目录 专栏导读1、背景介绍2、库的安装3、核心代码4、完整代码总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 &…

VMware 中Ubuntu无网络连接/无网络标识解决方法【已解决】

参考文档 Ubuntu无网络连接/无网络标识解决方法_ubuntu没网-CSDN博客 再我们正常使用VMware时,就以Ubuntu举例可能有时候出现无网络连接,甚至出现无网络标识的情况,那么废话不多说直接上教程 环境:无网络 解决方案&#…

CSS(快速入门)

欢迎大家来到我的博客~欢迎大家对我的博客提出指导,有错误的地方会改进的哦~点击这里了解更多内容 目录 一、什么是CSS?二、基本语法规范三、CSS选择器3.1 标签选择器3.2 id选择器3.3 class选择器3.4 通配符选择器3.5 复合选择器 四、常用CSS样式4.1 color4.2 font…

网络安全攻防实战:从基础防护到高级对抗

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 引言 在信息化时代,网络安全已经成为企业、政府和个人必须重视的问题。从数据泄露到勒索软件攻击,每一次…

PETSc源码分析: Optimization Solvers

本文结合PETSc源代码,分析PETSc中的优化求解器。 注1:限于研究水平,分析难免不当,欢迎批评指正。 注2:文章内容会不定期更新。 参考文献 Balay S. PETSc/TAO Users Manual, Revision 3.22. Argonne National Labora…

单细胞-第四节 多样本数据分析,下游画图

文件在单细胞\5_GC_py\1_single_cell\2_plots.Rmd 1.细胞数量条形图 rm(list ls()) library(Seurat) load("seu.obj.Rdata")dat as.data.frame(table(Idents(seu.obj))) dat$label paste(dat$Var1,dat$Freq,sep ":") head(dat) library(ggplot2) lib…