零基础小白学python之「爬取贝克街用户」(三)

python干货:如何使用Python对音频进行特征提取? 写在前面 因为喜欢玩儿音乐游戏,所以打算研究一下如何用深度学习的模型生成音游的谱面。这篇文章主要目的是介绍或者总结一些音频的知识和代码。 恩。如果没玩儿过的话,音乐游戏大概是下面这个样子。 下面进入正题。 我Google了一下,找到了这篇文章:Music Feature Extraction in Python。然后这篇文章介绍完了还有一个歌曲分类的实践:Classification of Music into different Genres using Keras。 下面的内容会主要. 阅读详情

话说python爬虫界,有个非常知名的框架Scrapy。异步爬取,使用简单,功能强大。小编学习之,练习之。贝克街,一个推理爱好者论坛网站,用户数据量12W左右,很适合Scrapy学习练习爬取。本篇前半部分会介绍一点点基础,毕竟要照顾小白同学们嘛~

Tip:本文仅供学习与交流,切勿用于非法用途!!!

01. 写在前面的话

本博客在编写代码的同时,会简单介绍Scrapy这个框架。相较于小编写的前两篇爬虫博客,本篇博客爬取的数据量较大。

在写代码之前,我想说下贝克街这个网站。在两三年前,我上过几天这个网站,当时好像也就5、6万人,现在发展到12W多用户挺不容易的。一群推理爱好者的精神家园。本网站好像也没什么反爬措施,在再次申明免责声明的同时,小编恳请大家,仅仅学习交流,不要把人家服务器搞崩了哦。同时,本博客爬取的链接都在贝克街robots文件要求以外,绝对ok~

如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们的python圈,裙号930900780,可领取python学习资料,会节约很多时间,减少很多遇到的难题。

02. Scrapy安装

首先需要安装 lxml库

pip install lxml
复制代码

然后分别去以下两个链接,安装和自己本机python版本一致的 whl 文件

pywin32 twisted

接着安装上面那两个库

pip install 你完整的pywin32whl 文件路径
pip install 你完整的twistedwhl 文件路径
例如:
pip install C:\Users\Administrator\Downloads\pywin32-228-cp38-cp38-win_amd64.whl
复制代码

最后,可以安装Scrapy了

pip install scrapy
复制代码

查看一下是否安装成功

 

以上,我们就安装完毕了。

03. 项目结构简介

Scrapy为我们提供了一些好用的命令行,比如上一节的scrapy -h。我们还可以使用命令行创建项目

scrapy startproject beikejie
复制代码

然后,我们得到了如下的项目结构

 

简单介绍下几个文件

BeiKeJieSpider.py:一个爬虫,咱们代码主要写和里面,后面会详细说。 items.py:数据实例,一个数据结构。 pipelines.py:数据爬取之后,进行数据清晰储存的地方。 middlewares.py:一些中间件,这里可以设置每次请求前的代理、cookie等。本项目不使用这个模块,毕竟人家没什么反爬措施嘛。 settings.py:一些项目的设置,可以设置很多东西,包括 pipelines 内管道的优先级等等,后面用到的地方会详细说。 scrapy.cfg:一些全局设置,本项目基本不适用。

04. 需求分析

本次爬取的目的,是获取贝克街所有的用户信息

思路:一批网站的大V,爬取他们的关注列表和粉丝列表,然后再以某个关注者或者粉丝为起点,继续爬取其关注列表和粉丝列表。这样可以爬取大部分用户,并不能爬取全部,因为毕竟可能会有无关注无粉丝的用户的用户孤岛。

所以我们要做的是:

  1. 根据某用户主页,获取一些用户信息。
  2. 获取某用户的关注列表,获取每个关注者主页,并执行第一步。
  3. 获取某用户的粉丝列表,获取每个粉丝主页,并执行第一步。

05. 获取用户信息

首先,我们需要编写根据某用户主页,获取用户信息,并储存mongo功能。

 

先在 BeiKeJieSpider中编写代码,这个是爬虫主要逻辑编写的地方。

class BeiKeJieSpider(scrapy.Spider):
    name = "beikejie"
    logger = logging.getLogger()
    allowed_domains = ['tuilixy.net']

	cookies = {'你自己的cookie'}

    def start_requests(self):
        urls = [
            'http://www.tuilixy.net/space-uid-45001.html'
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        item = self.main_page_parse(response)
        yield item

	    # 解析主页数据
    def main_page_parse(self, response):
        select = Selector(response)
        uid = select.xpath('//*[@id="main"]/div[2]/div/div/div[2]/div[1]/h1/span/text()').get(default='- -').split(' ')[1]
        name = select.xpath('//*[@id="main"]/div[2]/div/div/div[2]/div[1]/h1/text()').get(default='-')
        register_time = select.xpath('//*[@id="pbbs"]/tbody/tr[2]/td[2]/text()').get(default='-')
        follower_numbers = select.xpath('//*[@id="ct"]/div[2]/div[1]/ul/a[1]/li/h4/text()').get(default=0)
        fans_numbers = select.xpath('//*[@id="ct"]/div[2]/div[1]/ul/a[2]/li/h4/text()').get(default=0)
        item = BeikejieItem()
        item['uid'] = uid
        item['name'] = name
        item['register_time'] = register_time
        item['follower_numbers'] = follower_numbers
        item['fans_numbers'] = fans_numbers
        return item
复制代码

上面我们说了,这个类实际上就是一直爬虫,name就是爬虫的名字,allowed_domains是此爬虫可以爬取的域名,start_requests是起始爬取页面,这里面urls就是那些大V的主页,为了方便说明,我们这边从一个大V的主页开始。

爬取完了,进入回调函数parse进行解析,注意此方法内返回数据使用的是yield,此关键字实际上是生成了一个迭代器,再次进入函数时,会接着从yield处开始执行,后面会有妙用。然后解析完了,会返回一个BeikejieItem实例,因为返回的是item,所以会让pipelines.py进行进一步处理。

那么们先看下数据结构BeikejieItem所在的items.py文件吧。

class BeikejieItem(scrapy.Item):
    uid = scrapy.Field()
    name = scrapy.Field()
    register_time = scrapy.Field()
    follower_numbers = scrapy.Field(serializer=int)
    fans_numbers = scrapy.Field(serializer=int)
复制代码

需要继承scrapy.Item,然后定义一些需要储存的数据字段。可以看到,字段还可以设置储存类型。

有了数据结构,那么接着看下管道处理pipelines.py文件吧。

class MongoPipeline:
    def __init__(self, mongo_uri, mongo_db):
        self.mongo_uri = mongo_uri
        self.mongo_db = mongo_db
        self.mongo_collection = None

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            mongo_uri=crawler.settings.get('MONGO_URI'),
            mongo_db=crawler.settings.get('MONGO_DATABASE', 'items')
        )

    def open_spider(self, spider):
        self.client = MongoClient(self.mongo_uri)
        self.db = self.client[self.mongo_db]
        self.mongo_collection = self.db['beikejie']

    def close_spider(self, spider):
        self.client.close()

    def process_item(self, item, spider):
        self.mongo_collection.insert_one(ItemAdapter(item).asdict())
        return item


class DuplicatesPipeline:

    def __init__(self):
        self.ids_seen = set()

    def process_item(self, item, spider):
        adapter = ItemAdapter(item)
        if adapter['uid'] in self.ids_seen:
            raise DropItem(f"Duplicate item found: {item!r}")
        else:
            self.ids_seen.add(adapter['uid'])
            return item

    def close_spider(self, spider):
        print(self.ids_seen)
复制代码

这里有两个Pipeline分别都会处理传进来的item,优先级待会会被配置到文件settings.py里面。

先看下这两个Pipeline,DuplicatesPipeline是去重用的,内存中维护了一个set,存放存入库中的uid,避免重复,如果存在就报错。其实本博客的去重不太完美,首先内存问题,一个12w个元素的大集合维护是个问题,并且没有持久化(当然可以最开始,从mongo中读出所有库中已存在的uid),没有考虑到分布式。未来后期,去重应该交给Redis这种缓存中间件,这边只是演示作用。

第二个MongoPipeline,是进行mongo储存,细品一番~ 首先执行类方法from_crawler,从配置文件settings.py中读取mongo库的信息,然后执行__init__初始化信息,初始化实例属性mongo_uri、mongo_db 。接着执行open_spider,这个方法开启一个爬虫的时候会被执行,生成真正的数据库链接mongo_collection。每次进入管道,都会执行process_item方法,进行数据插入操作。close_spider这个方法顾名思义,只有关闭一个爬虫的时候会执行,将数据库链接关闭。

去重和存库的管道都介绍完了,下面查看一下配置信息,looksettings.py。

ITEM_PIPELINES = {
   'beikejie.pipelines.DuplicatesPipeline': 299,
   'beikejie.pipelines.MongoPipeline': 300
}

MONGO_URI = '127.0.0.1:27017'
MONGO_DATABASE = 'pjjlt'
复制代码

ITEM_PIPELINES 就是开启以上的两个管道,数字越小,优先级越高,所以去重优先于存库管道,符合逻辑。下面是数据库配置信息。当然,settings.py还有很多配置信息,有用到你可以自己看撒~

以上,我们实现了一个用户主页数据的读取和储存。下面我们去做第二步和第三步。

06. 获取关注者列表

继续回到BeiKeJieSpider这个类,我们继续爬取关注者列表。

 

可以看出,关注者列表是分页的,我们可以根据下一页按钮获取下一页url进行翻页操作。每页关注者列表都可以获取到它们的uid,从而我们又可以去拼凑出每个关注者的主页url。献上代码~

	cookies = {'你自己的cookie'}

    def parse(self, response):
        item = self.main_page_parse(response)
        yield item
        uid = item['uid']
        try:
            # # 点击关注连接,进入关注页,爬取每个关注者的信息 http://www.tuilixy.net/home.php?mod=follow&uid=45001&do=following
            follower_url = f'http://www.tuilixy.net/home.php?mod=follow&uid={uid}&do=following'
            yield scrapy.Request(url=follower_url, cookies=self.cookies, callback=self.follower_parse)
        except Exception as e:
            logging.error("失败:uid:"+uid+"\n错误原因是: "+str(e))

    def follower_parse(self, response):
        logging.info('开始爬取关注列表,'+response.url)
        doc = pq(response.text)
        lis = doc('.flw_ulist.prw.plw').children('.ptf.pbf.cl')
        for li in lis:
            try:
                url_end = pq(li)('.z.avt.w60.br4').attr('href')
                if url_end:
                    url = 'http://www.tuilixy.net/'+url_end
                    yield scrapy.Request(url=url, callback=self.parse)
            except Exception as e:
                logging.error("爬取关注失败:url:" + response.url +"\n错误原因是: "+str(e))
        try:
            # 翻页
            turn_page_url_start = doc('.nxt').attr('href')
            if turn_page_url_start:
                turn_page_url = 'http://www.tuilixy.net/'+turn_page_url_start
                yield scrapy.Request(url=turn_page_url, cookies=self.cookies, callback=self.follower_parse)
        except Exception as e:
            logging.error("爬取关注失败:url:" + response.url+"\n错误原因是: "+str(e))
复制代码

首先,补充下我们上面写的parse方法,储存完某用户的信息后,爬取这个用户的关注者列表的第一页。获取到第一页关注着列表后执行回调函数follower_parse。

follower_parse主要干了两件事,获取本页所有用户的uid,拼凑其用户主页url,并且执行获取用户主页的回调函数parse。(就是去做我们需求分析的第一步)。第二件事就是,获取下一页url,进行翻页操作,获取下一页关注者列表,并执行获取关注者列表的回调函数follower_parse。如此往复,知道该用户的关注者列表被翻到最后一步。

请求关注者列表需要加入cookie,这个需要你自己从浏览器获取(需要登录,都爬人家了,不得注册一个账号嘛,嗯哼?)。值得一提的是,Scrapy的Request方法,设置cookie必须显示设置,不能通过将cookie放到headers中! 这个知识点消耗了小编好多时间找问题,害,还是太菜。。知道点开Request源码。

 

以上,我们就完成了某用户的关注者列表的爬取。

07. 获取粉丝列表

和爬取关注者逻辑一样,直接上代码吧。

    def parse(self, response):
        item = self.main_page_parse(response)
        yield item
        uid = item['uid']
        try:
            # # 点击关注连接,进入关注页,爬取每个关注者的信息 http://www.tuilixy.net/home.php?mod=follow&uid=45001&do=following
            follower_url = f'http://www.tuilixy.net/home.php?mod=follow&uid={uid}&do=following'
            yield scrapy.Request(url=follower_url, cookies=self.cookies, callback=self.follower_parse)
            # # 点击粉丝连接,进入粉丝页,爬取每个粉丝的信息 http://www.tuilixy.net/home.php?mod=follow&uid=45001&do=follower
            fans_url = f'http://www.tuilixy.net/home.php?mod=follow&uid={uid}&do=follower'
            yield scrapy.Request(url=fans_url, cookies=self.cookies, callback=self.fans_parse)
        except Exception as e:
            logging.error("失败:uid:"+uid+"\n错误原因是: "+str(e))

    def fans_parse(self, response):
        logging.info('开始爬取粉丝列表,'+response.url)
        doc = pq(response.text)
        lis = doc('.flw_ulist.prw.plw').children('.ptf.pbf.cl')
        for li in lis:
            try:
                url_end = pq(li)('.z.avt.w60.br4').attr('href')
                if url_end:
                    url = 'http://www.tuilixy.net/'+url_end
                    yield scrapy.Request(url=url, callback=self.parse)
            except Exception as e:
                logging.error("爬取粉丝失败:url:" + response.url+"\n错误原因是: "+str(e))

        # 翻页
        try:
            turn_page_url_start = doc('.nxt').attr('href')
            if turn_page_url_start:
                turn_page_url = 'http://www.tuilixy.net/'+turn_page_url_start
                yield scrapy.Request(url=turn_page_url, cookies=self.cookies, callback=self.fans_parse)
        except Exception as e:
            logging.error("爬取粉丝失败:url:" + response.url+"\n错误原因是: "+str(e))
复制代码

08. 运行

逻辑写完了,加上写try、except,还有关键性注释,利用Scrapy命令行操作,开始跑吧。

scrapy crawl beikejie
复制代码

crawl就是执行一个爬虫,后面的参数是爬虫的name。

由于小编原始大V url只有一条,所以只爬了部分数据,只有16429个用户信息,大约耗时将近2个小时。你可以多选几个大V,选的越多,数据就会越无限接近12W。后期我们还可以利用分布式,多开几个scrapy实例,提高爬取速度。

 

09. 结束

相比于前面两篇博客,这篇Scrapy数据量大,代码编写时间也较长,希望各位读者小伙伴会喜欢~

喜欢的小伙伴,点个赞再走吧,您的支持,小编感激不尽。

最后多说一句,想学习Python可联系小编,这里有我自己整理的整套python学习资料和路线,想要这些资料的都可以进q裙930900780领取。

本文章素材来源于网络,如有侵权请联系删除。

如何用python实现——进程间通信IPC的主要方式? 计算机通信方式主要有如下几种,本文会详细介绍以下几种通信方式以及对应使用Python的实现方法,能够在学习理论的同时,也结合到Code层面,学以致用。 前言 每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。 如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们的python圈,裙号930900780,可领取python学习资料,会节约很多时间,减少很多遇到的难题。 1.管道 如果你... 阅读详情

相关推荐

大佬教你如何让爬虫可视化——爬下来的东西不分析一波岂不可惜

絮叨一下 爬虫爬来爬去,总是要服务于某些行业的,存在数据库中唯自己所用,做数据分析,搜索引擎,以及人工智能,训练模型. 前面已经分享了很多学习爬虫的笔记,比如urllib模块,requests模块,正则,BS4,selenium,牛逼的scrapy框架,以及一些反爬比如js加密,cookies反爬,非对称加密等,爬下来的数据就放在磁盘中是不是太过于浪费,自然需要分析一波,那就要生成可视化图表 这次就 爬取腾讯新闻下的疫情信息进行分析 网址: https://news.qq...

pythonbobo的博客 2192

python爬取重名div_零基础小白学python之「爬取贝克街用户」(三)

话说python爬虫界,有个非常知名的框架Scrapy。异步爬取,使用简单,功能强大。小编学习之,练习之。贝克街,一个推理爱好者论坛网站,用户数据量12W左右,很适合Scrapy学习练习爬取。本篇前半部分会介绍一点点基础,毕竟要照顾小白同学们嘛~Tip:本文仅供学习与交流,切勿用于非法用途!!!01. 写在前面的话本博客在编写代码的同时,会简单介绍Scrapy这个框架。相较于小编写的前两篇爬虫博客...

weixin_39717865的博客 257

大佬教你用Python Tkinter实现数字猜谜小游戏

Tkinter是Python的Tk GUI(图形用户界面)工具包和事实上的标准GUI 的标准接口。GUI使您可以使用大多数操作系统使用的可视项(例如窗口,图标和菜单)与计算机进行交互。这个功能强大的工具可用于构建各种项目,并且使可视化代码更加容易。 在本文中,我们将了解Tkinter的基础知识以及可在Python应用程序中使用的不同类型的小部件。在本文的后面,我们将使用Tkinter小部件开发一个很酷的数字猜测游戏。 今天,我们将介绍: Tkinter的基础 Tkinter的小部件与示例 从头开始

pythonbobo的博客 2137

辣条君写爬虫 3【爬取贝克街用户】

话说python爬虫界,有个非常知名的框架Scrapy。异步爬取,使用简单,功能强大。辣条君,学习之,练习之。贝克街,一个推理爱好者论坛网站,用户数据量12W左右,很适合Scrapy学习练习爬取。本篇前半部分会介绍一点点基础,毕竟要照顾小白同学们嘛~ Tip:本文仅供学习与交流,切勿用于非法用途!!! 目录01. 写在前面的话02. Scrapy安装03. 项目结构简介04. 需求分析05. 获取用户信息06. 获取关注者列表07. 获取粉丝列表08. 运行09. 结束 01. 写在前面的话 本博客.

啤酒就辣条 396

零基础小白学python之【贝壳房价爬取】(一)

学习用python写爬虫有几天了,下面写一个小爬虫验证下学习成果吧。 本文适合小白食用,各位大佬您就图个乐~ Tip:本文仅供学习与交流,切勿用于非法用途!!! 一、网页分析 爬取贝壳网石家庄二手房信息,先打开链接 https://sjz.ke.com/ershoufang/。 如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们的python圈,裙号930900780,可领取python学习资料,会节约很多时间,减少很多遇到的难题。 不添加筛选条件,发现总共有428.

pythonbobo的博客 1425

如何用Python Tkinter实现剪刀石头布小游戏?

编写剪刀石头布游戏 让我们使用Python 3和Tkinter开发相同的游戏。我们可以将游戏命名为Rock-Paper-Scissors-Lizard-Spock。 规则和玩法 Rock crushes Scissors Rock crushes Lizard Paper covers Rock Paper disproves Spock Scissors cuts Paper Scissors decapitates Lizard Lizard poisons Spock Lizard

pythonbobo的博客 1390

干货收藏丨教你用python-Matplotlib绘制饼图

一、函数原型 plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False) 如果大家在学习中遇到困难,想找一个pyt

pythonbobo的博客 1787

100 个 Python 小例子(基于 Python3)上篇

实例001:数字组合 题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:遍历全部可能,把有重复的剃掉。 total=0 for i in range(1,5): for j in range(1,5): for k in range(1,5): if ((i!=j)and(j!=k)and(k!=i)): print(i,j,k) total

pythonbobo的博客 967

一份超级完整实用的PyCharm图解教程,赶紧收藏起来

PyCharm 是一种 Python IDE,可以帮助程序员节约时间,提高生产效率。那么具体如何使用呢?本文从 PyCharm 安装到插件、外部工具、专业版功能等进行了一一介绍,希望能够帮助到大家。 在本文中,我们并不会提供非常完善的指南,但是会介绍 PyCharm 最主要的一些能力,了解这些后,后面就需要我们在实践中再具体学习了。 本文将介绍: PyCharm 安装 在 PyCharm 中写代码 在 PyCharm 中运行代码 在 PyCharm 中进行代码 debug 和测试 在 PyCh

pythonbobo的博客 1402

大佬用python写了个豆瓣短评爬虫,有你喜欢的电视试试吗

前言 本篇主要实现的是对任意一部电影短评(热门)的抓取以及可视化分析。也就是你只要提供链接和一些基本信息,他就可以 分析 对于豆瓣爬虫,what shold we 考虑?怎么分析呢?豆瓣电影首页 这个首先的话尝试就可以啦,打开任意一部电影,这里以姜子牙为例。打开姜子牙你就会发现它是非动态渲染的页面,也就是传统的渲染方式,直接请求这个url即可获取数据。但是翻着翻着页面你就会发现:未登录用户只能访问优先的界面,登录的用户才能有权限去访问后面的页面。 所以这个流程应该是登录——...

pythonbobo的博客 901

Python干货 | 办公小白入门处理word文档:基础篇

python有很多第三方库,要想用python处理word文档就需要安装python-docx库。 1、安装python-docx库 首先找到python根目录(就是有python.exe的文件夹)打开Scripts文件夹 Shift+鼠标右键选择在此处打开 powershell窗口或者cmd窗口输入 pip install python-docx按下回车等待安装完成。 2、基本操作语法 2.1打开文档 document = Document() 复制代码 第一行从docx模.

pythonbobo的博客 869

大牛教你:规避Python中lambda函数会犯四个常见错误

Lambda 函数是 Python 中的匿名函数。当你需要完成一件小工作时,在本地环境中使用它们可以让工作得心应手。有些人将它们简称为 lambdas,它们的语法如下: lambda arguments: expression 复制代码 lambda 关键字可以用来创建一个 lambda 函数,紧跟其后的是参数列表和用冒号分割开的单个表达式。例如,lambda x: 2 * x 是将任何输入的数乘2,而 lambda x, y: x+y 是计算两个数字的和。语法十分直截了当,对吧? 假设您知道什么是

pythonbobo的博客 1190

Python 列表推导式使用有哪些注意事项?(干货建议收藏)

Python 列表推导式并不是给初学者用的,因为它非常反直觉,甚至对于有其他编程语言背景的人也是如此。 我们接触到 List 的使用时,学习的内容都是零散的。所以我们缺少一个关于如何在各种各样的场景下使用 List 的知识体系。 本文提供了一些 List 的使用指南,尽可能涵盖各个方面。希望本文可以成为你的一站式实用手册。 如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们的python裙,裙号930900780,可领取python学习资料,会节约很多时间,减少很多遇到的难题

pythonbobo的博客 750

教你Python的collections.Counter类型

collections.Counter 类型可以用来给可散列的对象计数,或者是当成多重集合来使用 —— 多重集合就是集合里的元素可以出现多次1。 collections.Counter 类型类似于其它编程语言中的 bags 或者 multisets2。 (1)基本用法 counter = collections.Counter(['生物', '印记', '考古学家', '生物', '枣', '印记']) logging.info('counter -> %s', counter) .

pythonbobo的博客 687

2021届秋招贝壳找房面试(口头offer,还没谈薪资)

贝壳一面 贝壳a过了2题半,然后第二天下午就约了面试,和猿辅导时间冲突了,应该是临时加的,约定8.15中午12点开始面试,估计面试官也想早点去吃饭吧,11.48看我在线就开始面试了。 自我介绍下吧 面试了哪些家了?拿到什么offer了吗? 然后根据项目进行提问,三个项目中的技术难点有什么?然后提问项目 问了下美赛建模的事情 看项目问了runtime,runloop,block的一些东西 ios内存管理,retainCount谁控制的 gcd的一些使用 说了下性能优化的一些东西 后面几年的发展规划 可能是中

canoejun的博客 4178

SpringAi 通过大模型来实现调用自己的Api

摘要 本文介绍了如何利用Spring AI的Tools机制扩展大模型能力,实现业务系统集成。通过@Tool和@ToolParam注解定义工具方法,将订单查询和关闭功能暴露给大模型调用。关键实现包括:1)使用详细描述标注工具方法和参数;2)在ChatClient中注册工具服务;3)集成对话记忆保持上下文。该方法使AI具备操作业务系统的能力,形成"认知-决策-执行"闭环,大幅提升了模型在实际业务场景中的应用价值。

又要搬砖了 836

100 个 Python 小例子(基于 Python3)下篇

实例051:按位与 题目:学习使用按位与 & 。 程序分析:0&0=0; 0&1=0; 1&0=0; 1&1=1。 a=0o77 print(a) b=a&3 print(b) b=b&7 print(b) 复制代码 实例052:按位或 题目:学习使用按位或 | 。 程序分析:0|0=0; 0|1=1; 1|0=1; 1|1=1 a=0o77 print(a|3) print(a|3|7) 复制代码 实例053:按位异或 题目:学

pythonbobo的博客 600

伺服电机入门01

编码器输出 旋转信号 , 接收端: 使用ADC 捕捉旋转信号 ,转成数字信号,驱动器得到数字处理, 因为信号量是模拟信号, mcu mpu 等芯片通常内部处理是数字,通过adc 得到数字cpu 才能识别 传输过来的pos 等信息。IPM 芯片示例, IRAM256A 这个芯片已经停产,有换新的,,下面示例来自stmbl 高功率方案,4 步进电机 有全步控制,半步控制 ,微步控制,FOC控制,步进电机也是可以做伺服系统的。以下面几种信号是可以细分,也就是通过细分增加编码器的分辨率,

qq_25160559的博客 969

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 411

Proteus一体化安装STC15库添加

Proteus一体化安装与STC15库添加指南 本文详细介绍了Proteus 8.9 SP2专业版的一体化安装流程和STC15系列单片机库文件的添加方法。安装过程简单快捷,无需破解,稳定性好。通过将两个库文件(Lib和LIB)复制到Proteus安装目录的DATA/LIBRARY文件夹中,即可实现STC15W4K32S4芯片的仿真功能。文中还提供了新建工程和器件放置的步骤说明,特别指出STC15W4K32S4芯片可兼容仿真其他STC15系列芯片,并附带下载链接获取资源。该教程适用于电子设计初学者和开发者。

#法外狂徒张三的博客 4万+

of_graph_get_remote_port

isp { compatible = "isp"; core@0 { id = <0>; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; ...

wmzjzwlzs的专栏 1165

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 235

2、机器人控制技术:阻抗/导纳控制与强化学习的融合

本文探讨了阻抗/导纳控制与强化学习在机器人控制中的融合应用。阻抗/导纳控制广泛应用于外骨骼和跟踪控制,通过改进方案提升建模误差下的鲁棒性;强化学习则为解决维度灾难、实现最优交互提供了有效途径,尤其在大输入空间、连续时间系统、冗余机器人及鲁棒控制中表现突出。结合近似器与合理奖励设计,强化学习可在无模型情况下实现高效控制。未来,两者融合有望推动更智能、更安全的机器人系统发展。

ice55的博客 300
上一篇: 零基础小白学python之【贝壳房价爬取】(一)
下一篇: 零基础小白Python学习:垃圾回收机制剖析
python小丸子
博客等级 码龄6年 30粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值