Scrapy爬虫框架,入门案例(非常详细)
目录一、概述其设计了一款框架, 它具备快速的特质, 属于高层次范畴, 是屏幕抓取以及 web 抓取类型的框架, 该框架旨在对 web 站点实施抓取操作, 并且能够从页面当中提取出结构化的数据, 其作用范围宽敞, 可涵盖数据挖掘方面, 还涉及监测领域以及自动化测试领域。其最开始是针对页面抓取, 确切来讲是网络抓取而设计的, 在后台它还被应用于获取API所返回的数据, 比如说Web, 或者是通用的网络爬虫。存在着一种吸引人之处, 此吸引人之处在于它属于一个框架, 针对于这个框架而言, 任何人都能够依据需求便利地去做修改。它还给出了多种类型爬虫的基类, 像是爬虫这类, 并且最新版本再次给出了web2.0爬虫的支持符号。二、五大基本构成:分别由调度器、下载器、爬虫、实体管道Item以及引擎这五大组件共同构成框架, 接下来会去逐个介绍下这些组件各自所发挥的作用。(1)、调度器():调度器, 说白了, 将其假定当成一个URL, 也就是抓取网页的网址或者是链接的优先队列 , 由它来决定接下来要抓取的网址究竟是什么 , 同时把重复的网址去除, 避免做无用功。用户能够按自己的需求对调度器进行定制。(2)、下载器():处于所有被叫做组件其中的那个下载器, 是具有最大负担的, 它被用来高速地去对网络当中的可作为资源使用的东西进行下载。那个下载器的代码不会特别复杂不过效率会比较高, 主要存在的原因是对应的那个作为一个部件被理解进而被叫做下载器的东西是建立归属在那样一个具高效性质的异步模型之上的(实际上整个的框架都是归属建立置于那样一个模型之上的)。(3)、 爬虫:可供用户用于从特定网页提取自身所需信息也就是所谓实体的爬虫部分, 那在用户最关心中占据着关键位置, 况且用户还借助比如说定制正则表达式此类语法来完成对自带爬虫的定制操作, 并让定制体用于在特定网页萃取出相关数据项目, 也就是实体此项内容, 不仅如此, 用户也能够从里面筛选出来链接, 进而促使程序继续抓取接下来的页面。(4)、 实体管道(Item ):专门用于处理爬虫所提取出来的实体用的那种实体管道其最主要起到的功能是将相应实体进行持久化, 还要对数得清道得明的被定义成有效实体的该那些实体有效性, 进行逐一验证, 并且将不需要的信息清除掉。(5)、引擎( ):使得整个框架的核心是引擎, 它被用于对调试器进行控制, 会对下载器加以控制, 还会操控爬虫。实际上, 相当于计算机CPU的是引擎, 它操控着整个流程。三、整体架构图本图按顺序说明整个程序执行时候发生的顺序。当调用下载器之际, 常常会存在一个下载器中间件, 以此令下载速度得以提升需加以注意。官网架构图四、安装以及生成项目新建一个项目该项目的结构如下执行命令,和命令格式是一样的下载方式打开一个终端输入pip (或pip3 打开一个cmd输入pip 前提是你装了pip详细安装请点这项目名爬虫名 域名crawl 爬虫名我使用的是版本下面演示创建项目的例子把cmd打开, 输入其默认处于C:\Users\Administrator这个目录之中, 你能够自行去进行切换。cd mybaidu创建后目录大致页如下|- #项目文件夹|- #项目目录|去减一物品的文件, #对数据结构进行定义。|-.py #中间件|-.py #数据处理|-.py #全局配置|-|-.py #爬虫文件|-baidu.py配置文件乃项目基本.cfg -, 请注意此乃基本配置文件|-, 且为项目基有的配置文件.cfg #。下的baidu.py是自动为我们生成的下面再看一下项目的配置文件打开文件.py项目名默认的是属于注释范畴的, 这个事物是极为重要的, 要是不进行书写便极易被判定为电脑, 较为简便的做法是清洗一个/5.0就可以了。原本默认是true, 这是否遵循机器人协议的情况, 现在要把它变成false, 不然的话, 好多东西都没办法去爬取了。最大并发数很好理解就是同时允许开启多少个爬虫线程以秒为单位的下载延迟时间用于控制爬虫爬取频率, 需依据你的项目进行调适, 既不能太快, 亦不可太慢, 默认时长为3秒, 也就是爬取一个后停顿3秒, 若设为1秒则性价比较不错, 要是所要爬取的文件数量较多, 写成零点几秒也是可行的。该参数是否保存, 默认处于关闭状态, 开机时能够记录爬取过程当中的COKIE, 是非常好用的一个参数。ERS, 它是默认请求头, 在上面写着一个, 实际上, 这个东西是放置在请求头里面的而这个东西能够依据你爬取的内容进行相应的设置。项目管道300为优先级越低越爬取的优先度越高比如说, 我的.py里头写了两个管道, 其中一个是用于爬取网页的管道, 另一个是用来存数据库的管道, 我对它们的优先级进行了调整, 要是存在爬虫数据的情况下, 优先去执行存库的操作。ITEM_PIPELINES { scrapyP1.pipelines.BaiduPipeline: 300, scrapyP1.pipelines.BaiduMysqlPipeline: 200, }在这里, 我们试着去做一做爬取的操作, 打开一下其中的baidu.py, 它处于.py之下且其名称取决于你在设定爬虫名、域名时所输入的爬虫名。把代码进行输入, 采用xpath对百度首页的标题title予以提取 , 我们来做这件事情。import scrapy class BaiduSpider(scrapy.Spider): name baidu allowed_domains [www.baidu.com] start_urls [http://www.baidu.com/] def parse(self, response): tileresponse.xpath(//html/head/title/text()) print(tile)启动某一个终端cmd窗口, 在其中键入 crawl baidu这一爬虫名, 将会呈现相当 的输出消息, 并且这些内容之中就涵盖我们所需要的那信息。运用终端去运行可谓麻烦至极, 何况还无法提取数据, 我们要各自撰写一个run文件用来当作程序的入口, 这是必须得书写的, 其目的在于将字符串转变为列表这类形式, 第一个参数是, 第二个乃是crawl, 第三个是baidu。from scrapy import cmdline cmdline.execute(scrapy crawl baidu.split())可以在编辑器中输出了五、日志等级与日志保存在.py里面可以设置日志的等级与日志存放的路径相关变量 日志名.log日志等级分为1.DEBUG 调试信息2.INFO 一般信息3. 警告4.ERROR 普通错误5. 严重错误如果设置就只会等级之下的ERROR和默认等级是1六、导出为json或scv格式执行爬虫文件时添加-o选项即可crawl 项目名 -o *.csvcrawl 项目名 -o *.json涉及到json文件的情况, 于.js文件当中开展添加行为, 进行编码格式的设定操作, 不然就会出现乱码现象的情况, 是要注意的。utf-8示例from scrapy import cmdline cmdline.execute(scrapy crawl baidu -o baidu.csv.split())七、一个完整的案例这个项目我们的主题是爬腾讯视频的电影信息包括电影名和描述1.创建项目打开一个终端输入建议放到合适的路径下默认是C盘cdtxms2.修改改动三项要点, 其一乃是不依照机器人协议, 其二是下载的时段间隔, 鉴于后续的程序要去下载好多页面, 因而得给出一个间隔不给出也行, 只是极易被监测到, 其三是请求的头部, 增添一个用户代理, 其四是开启一条管道。ROBOTSTXT_OBEY False DOWNLOAD_DELAY 1 DEFAULT_REQUEST_HEADERS { Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8, Accept-Language: en, User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36 } ITEM_PIPELINES { TXmovies.pipelines.TxmoviesPipeline: 300, }3.确认要提取的数据item项提取内容定义数据结构由 item 来定义, 举例来说, 若我要提取的是电影名以及电影描述, 那我会去创建两个变量。Field 方法实际所做的事情是创建一个字典, 为这个字典添加一个键, 先不进行赋值操作, 而是等待提取到数据之后再去进行赋值。下面 item 的结构可以表述为这样: { name: , : }。# -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # https://docs.scrapy.org/en/latest/topics/items.html import scrapy class TxmoviesItem(scrapy.Item): # define the fields for your item here like: # name scrapy.Field() name scrapy.Field() description scrapy.Field()4.写爬虫程序我们所要撰写的部分出自parse方法之中的内容, 重点之处放在怎样去写xpath, 对于xpath我并非有多讲, 要是有兴趣能够去看一看我另外的一篇文章, 名为XPATH教程。引入才写好的那个item, 方才讲过item里创建的变量是充当字典键值的, 其自能够直接予以赋值。赋值之后转给管道去处理。简单讲一下这一段代码的思路首先腾讯视频的url为我们留意到了该项, 第一页的数值是0, 第二页是30, 依序类推。于程序里此项用来把控抓取第一页, 然而也要给出一个范围, 不能若无限制般大, 不然会报错, 能够去瞅瞅腾讯总共存在多少页视频, 还能够编写一个异常捕获机制, 一旦捕捉到请求出现错误便退出。我这边仅仅用于做示范, 因而只给出了120, 也就是4页。yield程序当中总共是具备两个yield, 其实本人相较偏爱称呼其为中断, 当然了中断仅仅是在CPU那里进发的, 它身为一种机制, 其作用或者说功能是移交控制权, 在眼下这个程序里面, 当我们针对item完成数据封装之后, 就得调用yield从而把控制权给予管道, 管道在拿到控制权加以处理之后再返回, 如此一来便又回到了这个程序。这便是针对第一个yield的相关解释了。第二个yield相对复杂一些, 在这条程序当中, 运用了一个回调机制, 也就是说, 回调的对象是parse, 而parse就是当前方法, 借助不断进行的回调, 程序会陷入循环, 要是不给程序增加条件的话, 程序就会陷入死循环, 比如在本程序里, 我把if去掉, 那就会成为死循环了。yield .(urlurl,self.parse)xpath存在一个需要留意的是怎样把里面的数据提取出来, 我们有着四种写法, 第一种写法将会获取的是选择器, 此选择器也就是原数据, 但是其中存在着一些我们并不需要用到的内容, 第二个括号是要把选择器的序列号转变为字符串, 至于第三个和第四个是一样的情况, 接下来是拿到字符串里的首个数据, 而这个数据正是我们所需要的数据。itemsname获取元素i下的a元素的title属性值, 通过xpath表达式./a/title来获取。itemsnameitemsnamei.xpath(./a/title).()itemsname等于在i这个对象上, 通过xpath方法选取当前节点下a标签的title属性值, 然后调用get方法获取其值。# -*- coding: utf-8 -*- import scrapy from ..items import TxmoviesItem class TxmsSpider(scrapy.Spider): name txms allowed_domains [v.qq.com] start_urls [https://v.qq.com/x/bu/pagesheet/list?append1channelcartooniarea1listpage2offset0pagesize30] offset0 def parse(self, response): itemsTxmoviesItem() listsresponse.xpath(//div[classlist_item]) for i in lists: items[name]i.xpath(./a/title).get() items[description]i.xpath(./div/div/title).get() yield items if self.offset 120: self.offset 30 url https://v.qq.com/x/bu/pagesheet/list?append1channelcartooniarea1listpage2offset{}pagesize30.format( str(self.offset)) yield scrapy.Request(urlurl,callbackself.parse)5.交给管道输出管道可以处理提取的数据如存数据库。我们这里仅输出。# -*- coding: utf-8 -*- # Define your item pipelines here # # Dont forget to add your pipeline to the ITEM_PIPELINES setting # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html class TxmoviesPipeline(object): def process_item(self, item, spider): print(item) return item6.run执行项目from scrapy import cmdline cmdline.execute(scrapy crawl txms.split())7.测试结果白色的管道输出的结果红色的调试信息8.流程梳理创建新的项目, 而后进入该项目, 接着新建用于爬虫的文件, 再明确要抓取的内容并编写相关物品模块, 随后编写爬虫程序来爬取数据, 将所获数据交给管道用以处理, 之后对全局配置做出调整, 最后执行爬虫程序, 可经由终端操作, 或将终端操作步骤嵌于程序内撰写单个执行程序予以达成。9.提速多线程爬取要是你达成了上述的实验, 不难发觉其爬取的速度是极其缓慢, 根本缘由在于它是按顺序执行的, 照此您能够从结果里看出, 始终是前面那一页的内容会率先被输出, 接下去才输出后面内容, 此举并不适宜于处理数据量比较大的情形, 一种不错的方式乃是采用多线程的办法, 这里所讲的多线程是基于方法这一维度的多线程, 并非借助创建对象来达成, 而是在一个单个的方法之中, 一次性将请求交付给调度器。我们借助重写方式, 来将我们的想法予以实现, 此方法的源码处于.py之下, 要是有兴趣的话, 能够去看一下。# -*- coding: utf-8 -*- import scrapy from ..items import TxmoviesItem class TxmsSpider(scrapy.Spider): name txms allowed_domains [v.qq.com] urlhttps://v.qq.com/x/bu/pagesheet/list?append1channelcartooniarea1listpage2offset{}pagesize30 offset0 def start_requests(self): for i in range(0,121,30): urlself.url.format(i) yield scrapy.Request( urlurl, callbackself.parse ) def parse(self, response): itemsTxmoviesItem() listsresponse.xpath(//div[classlist_item]) for i in lists: items[name]i.xpath(./a/title).get() items[description]i.xpath(./div/div/title).get() yield itemsPzx6.youxuantong.cNY1or.youxuantong.cNFxg5.youxuantong.cN9Ixz.youxuantong.cNG63p.youxuantong.cNU8kl.youxuantong.cNC9gu.youxuantong.cNZp6t.youxuantong.cN338R.youxuantong.cNNgie.youxuantong.cNIqv7.youxuantong.cN9Pmi.youxuantong.cNLz8m.youxuantong.cNEljf.youxuantong.cNPirb.youxuantong.cND7dz.youxuantong.cNXken.youxuantong.cNXdhh.youxuantong.cNE1yv.youxuantong.cN1Ayr.youxuantong.cNDppf.youxuantong.cNPo9t.youxuantong.cNPjyu.youxuantong.cNMims.youxuantong.cNP2d9.youxuantong.cNDbwk.youxuantong.cNKkln.youxuantong.cNFpqj.youxuantong.cNW3bk.youxuantong.cNLi6c.youxuantong.cNH0vj.youxuantong.cNScjv.youxuantong.cNA5k2.youxuantong.cNUfe8.youxuantong.cNJt80.youxuantong.cNAvia.youxuantong.cNXhoj.youxuantong.cNWgrp.youxuantong.cNNcy6.youxuantong.cNYkmt.youxuantong.cNDn6l.youxuantong.cNHhra.youxuantong.cN0Kcd.youxuantong.cNSzme.youxuantong.cNHiyy.youxuantong.cN4U2h.youxuantong.cN954L.youxuantong.cN9Ifw.youxuantong.cN156Y.youxuantong.cNAqka.youxuantong.cNGcfz.youxuantong.cNTjqt.youxuantong.cNEt77.youxuantong.cNZhpc.youxuantong.cNG9ed.youxuantong.cNYris.youxuantong.cN6Vku.youxuantong.cNZam8.youxuantong.cNAzsg.youxuantong.cNV8t1.youxuantong.cN595U.youxuantong.cNKlif.youxuantong.cN5Ih5.youxuantong.cNU4a2.youxuantong.cNBr2p.youxuantong.cNHouo.youxuantong.cNLrnn.youxuantong.cN7M8l.youxuantong.cN77Ql.youxuantong.cNGgcg.youxuantong.cNC7s0.youxuantong.cNR7zt.youxuantong.cNCau4.youxuantong.cNDnuf.youxuantong.cNBcld.youxuantong.cNH8pe.youxuantong.cNF4vi.youxuantong.cNCy3h.youxuantong.cNTgkp.youxuantong.cNHn8j.youxuantong.cNV3n7.youxuantong.cN9T24.youxuantong.cNWkch.youxuantong.cNCfvm.youxuantong.cNVjyo.youxuantong.cNV2j0.youxuantong.cNI0a7.youxuantong.cNTbyp.youxuantong.cNNh93.youxuantong.cN8Asb.youxuantong.cNI5jd.youxuantong.cN9C8y.youxuantong.cNAibm.youxuantong.cN1O1g.youxuantong.cNXq16.youxuantong.cNZ7on.youxuantong.cN3Wuy.youxuantong.cNCtqd.youxuantong.cNIcsw.youxuantong.cN6Hc8.youxuantong.cNEerb.youxuantong.cND5aa.youxuantong.cNEjsz.youxuantong.cNKnu0.youxuantong.cND7ji.youxuantong.cN5Tda.youxuantong.cNRpjf.youxuantong.cNJ2d0.youxuantong.cN3Wxk.youxuantong.cN8Upx.youxuantong.cNU02p.youxuantong.cNTr3z.youxuantong.cNQn4b.youxuantong.cNK2dg.youxuantong.cN6V11.youxuantong.cNE84y.youxuantong.cNLk9s.youxuantong.cN2Kre.youxuantong.cN0D97.youxuantong.cNE49d.youxuantong.cNXs6d.youxuantong.cN35Hi.youxuantong.cNGzz0.youxuantong.cN8Orp.youxuantong.cNAsfi.youxuantong.cNRvk6.youxuantong.cNV9t6.youxuantong.cN61F2.youxuantong.cNZ3mi.youxuantong.cNPr0n.youxuantong.cN9609.youxuantong.cN0Ajm.youxuantong.cNU9bb.youxuantong.cNW27s.youxuantong.cNEk1y.youxuantong.cNH6bn.youxuantong.cNQ0jd.youxuantong.cNLv12.youxuantong.cNCc0n.youxuantong.cNSp75.youxuantong.cNHezi.youxuantong.cNUs1u.youxuantong.cNHdji.youxuantong.cNIubj.youxuantong.cN25Ar.youxuantong.cN7Anl.youxuantong.cNU1ag.youxuantong.cNMkxp.youxuantong.cNNms4.youxuantong.cNJ6jk.youxuantong.cN4270.youxuantong.cNAcmg.youxuantong.cNAsp2.youxuantong.cNGbfs.youxuantong.cNG16t.youxuantong.cN30Di.youxuantong.cNKhhq.youxuantong.cNBve1.youxuantong.cNTyf2.youxuantong.cNR6ol.youxuantong.cNLtyf.youxuantong.cNOrzl.youxuantong.cNWh6m.youxuantong.cN2V7t.youxuantong.cNRq8f.youxuantong.cNXjff.youxuantong.cNSl2e.youxuantong.cN8Ln8.youxuantong.cNP0x5.youxuantong.cN1Lq1.youxuantong.cN44F2.youxuantong.cN1T9c.youxuantong.cN905Z.youxuantong.cN38Wc.youxuantong.cN8Mug.youxuantong.cN2Uij.youxuantong.cN07Yd.youxuantong.cNB7wd.youxuantong.cN78Ax.youxuantong.cN9Spy.youxuantong.cNFc5u.youxuantong.cNGh39.youxuantong.cN8Mqj.youxuantong.cNOjai.youxuantong.cNSquw.youxuantong.cN9Rih.youxuantong.cNIkzj.youxuantong.cNCb4v.youxuantong.cNP89h.youxuantong.cNF3qx.youxuantong.cNWypp.youxuantong.cN23Ye.youxuantong.cNO36t.youxuantong.cN61Qs.youxuantong.cNIp3j.youxuantong.cNAt8x.youxuantong.cNOq8b.youxuantong.cNIin5.youxuantong.cNC4xv.youxuantong.cN62Q9.youxuantong.cNHwro.youxuantong.cN7C04.youxuantong.cNYvi9.youxuantong.cN2Urs.youxuantong.cN26Zt.youxuantong.cNIlbw.youxuantong.cNU7qj.youxuantong.cNJh55.youxuantong.cNE11a.youxuantong.cN52Qp.youxuantong.cN8Lss.youxuantong.cNFwxx.youxuantong.cN9Nq0.youxuantong.cNHy3v.youxuantong.cNZ0kd.youxuantong.cN7Eya.youxuantong.cN7C1p.youxuantong.cNSstr.youxuantong.cN0Cua.youxuantong.cNKd5r.youxuantong.cNY73a.youxuantong.cN0D63.youxuantong.cN9Fob.youxuantong.cNWf9w.youxuantong.cN4E77.youxuantong.cN2Btp.youxuantong.cNIiz0.youxuantong.cN3Yej.youxuantong.cN12Xt.youxuantong.cNRg85.youxuantong.cNG76m.youxuantong.cND380.youxuantong.cN4T10.youxuantong.cN7Dpe.youxuantong.cNTbs2.youxuantong.cNYsp6.youxuantong.cNQd1k.youxuantong.cNNvf7.youxuantong.cNFfwf.youxuantong.cNWw8l.youxuantong.cNQhpz.youxuantong.cN6Yry.youxuantong.cN1Vvy.youxuantong.cNWwzo.youxuantong.cN0O91.youxuantong.cNBsz9.youxuantong.cN5Zu8.youxuantong.cNPju2.youxuantong.cNNqme.youxuantong.cN01Uv.youxuantong.cN84B0.youxuantong.cNWyqj.youxuantong.cNN0xo.youxuantong.cNGya7.youxuantong.cN5Axw.youxuantong.cN699B.youxuantong.cN3R4f.youxuantong.cN8Ug3.youxuantong.cND7hq.youxuantong.cNOwt5.youxuantong.cN4Wqn.youxuantong.cNEs1i.youxuantong.cN1Hv9.youxuantong.cN0Ycf.youxuantong.cNH5q2.youxuantong.cNWx37.youxuantong.cNRsf3.youxuantong.cN4Xxq.youxuantong.cN9P84.youxuantong.cN0F6b.youxuantong.cN0T5z.youxuantong.cN99Zj.youxuantong.cNQ2h1.youxuantong.cNHw0e.youxuantong.cNX0uv.youxuantong.cNI8j1.youxuantong.cNCeu8.youxuantong.cNOcir.youxuantong.cNHb8o.youxuantong.cNDqiq.youxuantong.cNWhm2.youxuantong.cNS4pc.youxuantong.cNM494.youxuantong.cN2Bu6.youxuantong.cNPbd9.youxuantong.cNK9cc.youxuantong.cNKy3f.youxuantong.cNF3ud.youxuantong.cNX4xy.youxuantong.cN3F6b.youxuantong.cNYac4.youxuantong.cNFyi8.youxuantong.cNXkd6.youxuantong.cNJ5po.youxuantong.cN9L3i.youxuantong.cNYd89.youxuantong.cN5Ix4.youxuantong.cNY0y2.youxuantong.cNLnsz.youxuantong.cN62Hy.youxuantong.cN25Id.youxuantong.cNY58g.youxuantong.cN187G.youxuantong.cN864R.youxuantong.cN272D.youxuantong.cNHxp2.youxuantong.cNJxnh.youxuantong.cNO7go.youxuantong.cNVwon.youxuantong.cNYohr.youxuantong.cN3Zb7.youxuantong.cN760K.youxuantong.cNQfqb.youxuantong.cNJ6f1.youxuantong.cN12Uz.youxuantong.cNFqw8.youxuantong.cN2Epf.youxuantong.cNO98h.youxuantong.cNIv8c.youxuantong.cNUaw9.youxuantong.cNV3pd.youxuantong.cN1Ev7.youxuantong.cN60Ys.youxuantong.cNP872.youxuantong.cNKoo6.youxuantong.cN96Zb.youxuantong.cN16Mm.youxuantong.cNTu4u.youxuantong.cNEot3.youxuantong.cNNe5v.youxuantong.cNUvof.youxuantong.cN9Ubw.youxuantong.cNPtps.youxuantong.cN0J3u.youxuantong.cNR7sl.youxuantong.cNKtkq.youxuantong.cN0967.youxuantong.cN2Am0.youxuantong.cNCth6.youxuantong.cNZns7.youxuantong.cN970R.youxuantong.cNVf8o.youxuantong.cNHi0t.youxuantong.cNPu1f.youxuantong.cNK7db.youxuantong.cN9Gir.youxuantong.cNMcn1.youxuantong.cNUe54.youxuantong.cNYci5.youxuantong.cNThaz.youxuantong.cN

相关新闻

DM注册数据库服务:构建稳定高效的数据库运维体系

DM注册数据库服务:构建稳定高效的数据库运维体系

一、DM注册数据库服务概述 1.1 什么是DM注册数据库服务 DM注册数据库服务是指将达梦数据库(DMDB)实例在Linux或Windows操作系统层面注册为系统服务的过程。通过注册服务,数据库实例可以随操作系统启动而自动启动,也能够通过标准的服务管理命令(如systemctl、service等)进行统…

2026/9/27 17:36:23 阅读更多 →
基于Unity3D《新时代河南农村房舍》场景漫游的设计与实现|毕设答辩|Unity项目|毕设项目|

基于Unity3D《新时代河南农村房舍》场景漫游的设计与实现|毕设答辩|Unity项目|毕设项目|

题目:基于Unity3D《新时代河南农村房舍》场景漫游的设计与实现 一、项目介绍 摘要:本研究聚焦于运用 Unity3D 技术构建《新时代河南农村房舍》场景漫游系统,旨在通过数字化手段生动展现河南农村在新时代背景下房舍的特色风貌与变迁&#xff0…

2026/10/8 5:54:30 阅读更多 →
新人转行大模型避坑指南|真诚建议少走弯_转行大模型

新人转行大模型避坑指南|真诚建议少走弯_转行大模型

作为一个年底转行成功的大模型算法工程师,告诉你一个事实。 大模型赛道真的香,但盲目冲算法岗可能坑到你哭😭作为过来人,掏心窝子分享4个真相👇 🔥看了市面的招聘网站,明确了四大方向怎么选&a…

2026/10/9 19:43:44 阅读更多 →

最新新闻

C++构建缓存加速实战:从原理到CI配置与命中率优化

C++构建缓存加速实战:从原理到CI配置与命中率优化

做 C 开发的时间长了,一定会被构建时间折腾过。改一个头文件,几十个源文件跟着重新编译,在本地机器上就是几分钟,放到持续集成环境里可能直接变成半小时起步。我前阵子梳理一个老项目,双人开发,全新构建一次…

2026/10/12 11:21:16 阅读更多 →
Python机器学习网络入侵检测实战:NSL-KDD预处理与随机森林建模全流程

Python机器学习网络入侵检测实战:NSL-KDD预处理与随机森林建模全流程

简介:面向Python机器学习课程设计与期末大作业场景,该压缩包提供了一套完整的网络入侵检测系统源码,依托KDD Cup 1999数据集完成训练与检测,适合需要快速交付高分项目的高校学生。资源共包含16个文件,以多个Python脚本…

2026/10/12 11:21:16 阅读更多 →
PyQt5现代化桌面开发实战:布局、QSS与工程落地全解

PyQt5现代化桌面开发实战:布局、QSS与工程落地全解

1. 为什么在2024年还在折腾PyQt5做桌面应用先说结论:PyQt5不是最年轻的框架,但它依然是做桌面应用时性价比最高的选择之一。你让我现在去推荐桌面GUI方案,我大概率还是会把PyQt5放进首选梯队,尤其是当目标是快速落地一个界面现代、…

2026/10/12 11:21:16 阅读更多 →
拆解 superpowers 四大核心技能:为什么 systematic-debugging 是全场 MVP?

拆解 superpowers 四大核心技能:为什么 systematic-debugging 是全场 MVP?

拆解 superpowers 四大核心技能:为什么 systematic-debugging 是全场 MVP? 【免费下载链接】superpowers An agentic skills framework & software development methodology that works. 项目地址: https://gitcode.com/GitHub_Trending/su/superp…

2026/10/12 11:21:16 阅读更多 →
为什么 Gorest 2D Animation Spritesheet Generator 敢做“无界面“?彻底讲透 Codex 驱动的 no-UI 动画 Agent 理念

为什么 Gorest 2D Animation Spritesheet Generator 敢做“无界面“?彻底讲透 Codex 驱动的 no-UI 动画 Agent 理念

【免费下载链接】gorest-2d-animation-spritesheet-generator Codex-assisted local 2D animation spritesheet generator and scene compositing workspace. 项目地址: https://gitcode.com/gh_mirrors/go/gorest-2d-animation-spritesheet-generator 点击查看 免费…

2026/10/12 11:21:16 阅读更多 →
让代码评审真正成为质量闸门:open-code-review 实践指南

让代码评审真正成为质量闸门:open-code-review 实践指南

写代码这么多年,评审过别人的代码,也被别人评审过无数次。有一个问题我一直想吐槽:绝大多数团队的代码评审,根本没做到“评审”,更像是在走个过场。点个 approve、回个 LGTM,然后该合并合并,改出…

2026/10/12 11:20:16 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →