发出前两篇Python实战的文章之后,有同学和我反映:你的想法很牛逼,可是我就是看不懂你写的是什么,我Python不熟悉,看起来有点吃力 。我细细一琢磨,这点是个问题。对于熟悉Python的同学,能够看懂我思路,但是对于那些没有Python基础,或者对Python不熟悉的同学,这样直接扔过来,可能会让他们失望而归。所以,这回我弄了一期手把手的实战教程,同时,在文章中遇到的知识点,还会有提供链接。完全对新手有好。
在前两篇Python实战「用代码来访问1024网站」和「用Scrapy编写“1024网站种子吞噬爬虫”」收到了大家的一致好评,可能文章写得比较匆忙,有些术语可能对于Python的初级玩家不是很好理解。所以,我特别准备了一下,用超级详细的解说,细化到每一步,提供查询链接等方法,为Python初级玩家,Python小白和对Scrapy框架不熟悉的同学,的制作了这篇手把手Python实战教程:用Scrapy爬取下载达盖尔社区的资源。
好了,废话不多说,学习代码就是要学以致用的。不能写了一遍代码就让代码吃灰。下面就跟我一起来搞吧。
小草网站是个好网站,我们这次实战的结果,是要把“达盖尔旗帜”里面的帖子爬取下来,将帖子的图片保存到本地,同时将帖子的一些相关信息,写入到本地的MongoDB中。这么乍一听,感觉我们做的事情好像挺多的,别慌,我带你慢慢的一步一步来搞起,问题不是很大。
手把手 Step By Stefp
Scrapy可以通过pip来安装:
$ pip install scrapy
接下来,我们去事先建好的工程目录里面,创建Scrapy的项目。这里,我们先看一下Scrapy的命令行怎么用,输入$ scray -help
出来
看到,创建scrapy的工程的命令是$ scrapy startproject
创建完的结果如下:
OK,这个时候,我们的目录内容变成了如下结构:
下一步就是创建我们的爬虫,还是依靠Scrapy本身自带的命令来创建。输入Scrapy自带四种爬虫模板:basic ,crawl ,csvfeed 和xmlfeed 四种。我们这里选择basic。
$ scrapy genspider --template=basic superspider bc.ghuws .men
创建成功,会出现以下提示:
这时候我们的工程目录就变成了这个样子:
看到我们的工程里面多了一个spiders文件夹,里面有一个superspider.py
文件,这个就是我们这次程序的主角。我们来看,这个可爱的小虫子刚生下来是长这个样子的:
这里呢,就简单说一下: - name - 是咱们的爬虫名字,这个主要是在运行爬虫的时候会用到。 - allowed_domains - 是在scrapy自带的OffsiteMiddleware中用到的。Scrapy默认会开启OffsiteMiddleware插件,不在此允许范围内的域名就会被过滤,而不会进行爬取。 - start_urls - 爬虫开始爬取的url。 - parse()方法 - 这个就是处理请求结果的。我们具体的爬虫逻辑大部分就是在这里写。
好了,废话不多说,既然start_urls是用来做爬虫开始爬取的第一个url,那么我们就应该把这里面的数值换成达盖尔社区的地址,然后我们看一下在parse()
里面返回的值是什么。运行方法,就是输入$ scrapy crawl superspider
指令即可:
我们看到,这个response是一个HtmlResponse类,它里面的text属性,里面的字符串就是网页的html文件。OK,这一步结束之后,我们下一步就想办法怎样能够解析html网页了。Scrapy是提供了html对象的解析的,它有一个selector类,可以解析html,同时,里面还支持xpath语法的查找和css的查找。但是这个个人感觉不是很好用,我推荐用BeautifulSoup4库。安装方法只需要$ pip install beautifulsoup4
。我们这里需要用这个来解析html,所以讲BeautifulSoup4导进来,在解析,然后我们就会得到一个beasutifulsoup对象。之后,我们就要在这个对象里面寻找我们需要解析的对象。
目前网页已经解析好了,下一步就是要在html文件中,找到每一个帖子的信息。我们回头来看html文件的源码,可以看到,每一个帖子其实都是在一个tag里面,其实我们需要的东西,就是下图红色框框里面圈的
tag。
这里,我们发现,每一个帖子的链接入口,也就是
tag是有两个特性,一个是有id值,另一个是有href
值。所以,我们要针对soup对象,调用find_all()
方法来寻找有特定内容的所有标签。
我们得到了一个 a_list
结果,这是一个list对象,长度102。在这些数据中,有些结果是我们不要的,比如000到007位置的这几个数据,他们在网页中对应的是版规之类的帖子信息,和我们想要的东西不一样,所以,在拿到这个a_list
数据,我们需要进行一下筛选。
筛选的过程必不可少,筛选的方法有很多种,我们这里就做的简单一点,只选取18年的帖子。为什么会是18年的帖子啊?少年你看,这一列href的值:
第二个数字“1805”,应该就是“年份+月份”。如果不信,则可以跳到比如论坛100页,看到的是16年3月份的帖子,这里面随便检查一个连接的href值,是“1603”。这就印证了我们的想法是正确的。好,按照这个筛选18年的帖子的思路,我们来筛选一下a_list
。
看到打印的结果却是是18年的帖子。但是目前的href并不是帖子真正的url。真正的url应该长这个样子:
http://bc.ghuws.men/htm_data/16/1805/3126577.html
所以,我们这里得进行拼接。对比上面的url,我们目前只有后半部分,前半部分其实是社区网站的root url。那么我们在settings.py文件里面添加一个ROOT_URL
变量,并将这个变量导入到我们的spider中即可。代码就变成了这样。为了方便,咱们还可以把帖子的id,也就是.html
前面的那个数字也摘出来,方便日后使用。
目前为止,我们拿到了帖子的id和帖子的url。我们的最终目的是要下载图片,所以,我们得让爬虫去按照帖子的url去爬取他们。爬虫需要进入第二层。这里,我们需要使用yield
函数,调用scrapy.Request
方法,传入一个callback,在callback中做解析。
现在我们已经进入了每一个帖子的内部,我们现在还没有拿到的信息有帖子的标题和帖子的图片。还是和parse()的步骤一样,这个时候,我们就该分析帖子的html文件了。 我们先找标题。看到html文件中,标题对应的是一个
标签。
那这就简单了,我们只需要找到所有的
标签,然后看标题是第几个就好。接下来是图片了。每个帖子用的图床都不一样,所以图片部分,我们先来看一下结构:
大概就是这两种,我们看到,图片的标签是
,关键点就在type=image
上面,所以我们尝试着看看能不能根据这个来找到图片的地址。
我们简单测试一下,看看运行效果:
完全没有问题,看着好爽。这时候,我们看结果,会发现,我们抓取到的image,会有一两个的图床是不一样的。
打开也会看到这个图片,里面的内容也和其他的图片不一样,并且这个图片不是我们想要的。所以,这里我们得做一下过滤。我这里的方法就是要从找到的image_list
里面,把少数图床不一样的图片url给过滤掉。一般看来,都是找到的第一个图片不是我们想要的,所以我们这里只是判断一下第一个和第二个是否一样就可以。
这样打印出来的结果就没有问题喽。
哈哈,现在我们已经拿到了帖子的id,标题,帖子的url地址,还有帖子里面图片的url地址。离我们的目标又近了一步。我之前说过,我们的目标是要把每张图片都保存在本地,目前我们只是拿到了每张图片的url。所以,我们需要把图片都下载下载下来。
其实,当拿到图片的URL进行访问的时候,通过http返回的数据,虽然是字符串的格式,但是只要将这些字符串保存成指定的图片格式,我们在本地就可以按照图片的解析来打开。这里,我们拿到帖子的image_list
,就可以在yield出一层请求,这就是爬虫的第三层爬取了。
同时,在第三层爬虫里面,我们还需要将访问回来的图片保存到本地目录。那么代码就长这个样子:
在上面第二次爬取函数的最后,有个地方需要注意一下,就是上图中红色框框圈出来的地方。这里需要加上dont_filter=True
。否则就会被Scrapy给过滤掉。因为图床的地址,并未在我们刚开始的allow_domain
里面。加上这个就可以正常访问了。
这样运行一遍,我们的本地目录里面就会有保存好的下载照片了。
我们还有个问题,就是我们需要将每个帖子的信息(id,title,url, 和image )都保存到本地的数据库中。这个该怎么做?
别慌,这个其实很简单。
首先,我们得针对每个帖子,建立一个Scrapy的item。需要在items.py里面编写代码:
写好之后,我们需要在爬虫里面引入这个类,在第二层解析函数中,构建好item,最后yield出来。这里,yield出来,会交给Scrapy的pipeline
来处理。
yield出来的item会进入到pipeline中。但是这里有个前提,就是需要将pipeline在settings.py中设置。
pipeline中我们先打印帖子的id,看看数据能不能够传入到这里
运行:
看到数据是完全可以过来的,而且在Scrapy的log中,会打印出来每一个item里面的信息。
我们如果想把数据保存到MongoDB 中,这个操作就应该是在pipeline中完成的。Scrapy之所以简历pipeline就是为了针对每个item,如果有特殊的处理,就应该在这里完成。那么,我们应该首先导入pymongo
库。然后,我们需要在pipeline的__init__()
初始化进行连接数据库的操作。整体完成之后,pipeline应该长这个样子:
那么我们来测试一下数据是否能够存入到MongoDB中。首先,在terminal中,通过命令$ sudo mongod
来启动MongoDB。
那么运行一下,看一下效果:
可以看到,左侧,有名为Daguerre
的数据库,里面有名为postTable
的表,而且我们的数据成功的写入了数据库中。数据的格式如图所展示,和我们预期的结果是一样的。
目前为止,我们完成了:从一页page中,获得所有帖子的url,然后进入每个帖子,再在帖子中,爬取每个帖子的图片,下载保存到本地,同时把帖子的信息存储到数据库中。
但是,这里你有没有发现一个问题啊?我们只爬取了第一页的数据,那如何才能爬取第二页,第三页,第N页的数据呢?
别慌,只需要简单的加几行代码即可。在我们的spider文件中的parse()
方法地下,加一个调用自己的方法即可,只不过,传入的url得是下一页的url,所以,我们这里得拼凑出下一页的url,然后再次调用parse()
方法即可。这里为了避免无限循环,我们设定一个最大页数MAX_PAGES
为3,即爬取前三页的数据。
OK,这样就完事儿了,这个达盖尔旗帜的爬虫就写好了。我们运行一下瞅瞅效果:
是不是非常的酷炫?再来看看我们的运行结果:
只能说,战果累累,有图有真相。
其实,这个程序,可以加入middleware,为http请求提供一些Cookie和User-Agents来防止被网站封。同时,在settings.py文件中,我们也可以设置一下DOWNLOAD_DELAY
来降低一下单个的访问速度,和CONCURRENT_REQUESTS
来提升一下访问速度。
就像之前EpicScrapy1024项目里面一样。喜欢的同学,可以去借鉴那个项目代码,然后融会贯通,自成一派,爬遍天下网站,无敌是多么的寂8 寞~~~~
好啦,能看到这里说明少年你很用心,很辛苦,是一个可塑之才。
废话不说,看到这里是有奖励的。关注“皮克啪的铲屎官 ”,回复“达盖尔 ”,即可获得项目源码和说明文档。同时,可以在下面的菜单中,找到“Python实战 ”按钮,能够查看以往文章,篇篇都非常精彩的哦~
扯扯皮,我觉得学习编程最大的动力就是爱好,其实干什么事情都是。爱好能够提供无线的动力,让人元气满满的往前冲刺。代码就是要方便作者,方便大家。写出来的代码要有用处,而且不要吃灰。这样的代码才是好代码。欢迎大家关注我的公众号,“皮克啪的铲屎官”,之后我会退出Python数据分析的内容,可能会结合量化交易之类的东西。
最后,来贴一张达盖尔的图片,纪念一下这位为人类做出杰出贡献的人。
推荐阅读:
【Python实战】用Scrapy编写“1024网站种子吞噬爬虫”,送福利 【Python实战】用代码来访问1024网站,送福利
你可能感兴趣的:(爬虫,Python,Scrapy,python,爬虫,scrapy,it)
批量将.doc文件转换为.docx文件的Python脚本优化
袁公白
python c# microsoft
在本篇博客中,我将分享如何使用Python编写一个脚本,可以批量将一个文件夹中的所有.doc文件转换为.docx文件。这个脚本利用了Python的win32com库来操作Word应用程序进行文件格式转换,并通过tkinter库中的filedialog模块实现文件夹选择对话框,让用户选择需要转换的文件夹路径。首先,我们定义了两个函数:doc_to_docx用于将单个.doc文件转换为.docx文件,
在 Python 中等待 5 秒
迹忆客
Python 实用技巧 python java 前端
Python具有各种功能和库来创建交互式应用程序,用户可以在其中提供输入和响应。我们可以创建需要暂停应用程序执行的情况。本篇文章将讨论如何在Python中等待5秒。在Python中使用time.sleep()函数等待5秒Python的time模块提供了存储和操作时间的功能和对象。该库中的sleep()函数增加了执行延迟;该函数接受以秒为单位的时间。例如,importtimeprint("Befor
[转载]Python量化交易平台开发教程系列0-引言
dijiesa4351
c# 操作系统 c/c++
原文出处:http://vnpy.org/2015/03/04/20150304_Python%E9%87%8F%E5%8C%96%E4%BA%A4%E6%98%93%E5%B9%B3%E5%8F%B0%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B%E7%B3%BB%E5%88%970-%E5%BC%95%E8%A8%80/为什么用Python来开发量化交易平台目前本人所
os模块
datbgd1130
python
os.getcwd()获取当前工作目录,即当前python脚本工作的目录路径os.path.abspath(path)返回path规范化的绝对路径os.path.split(path)将path分割成目录和文件名二元组返回os.path.dirname(path)返回path的目录。其实就是os.path.split(path)的第一个元素os.path.basename(path)返回path最
python 快速拆分含有多种分隔符的字符串
风陵苑主
python
importres='ab;cd|efghij,lmn;opq,rst,uvwx\yz're.split(r'[,;\\|]+',s)
华为OD机试 -TLV解码(Java & Python& JS & C++ & C )
算法大师
最新华为OD机试 c++ java 华为od 华为 华为od机试 python javascript
最新华为OD机试真题目录:点击查看目录华为OD面试真题精选:点击立即查看题目描述TLV编码是按[TagLengthValue]格式进行编码的,一段码流中的信元用Tag标识,Tag在码流中唯一不重复,Length表示信元Value的长度,Value表示信元的值。码流以某信元的Tag开头,Tag固定占一个字节,Length固定占两个字节,字节序为小端序。现给定TLV格式编码的码流,以及需要解码的信元T
股票量化交易进阶:构建回测框架backtrader
InUnix
python 开发语言
在量化交易领域,回测是一个重要的环节。回测框架可以帮助我们验证投资策略的有效性,并评估其在历史数据上的表现。backtrader是一个功能强大且灵活的Python回测框架,它为量化交易提供了丰富的工具和功能。本文将介绍如何使用backtrader构建一个简单的回测系统,并给出相应的源代码示例。首先,我们需要安装backtrader库。可以使用pip命令进行安装:pipinstallbacktrad
Python延时函数详解及实例代码
HackDyno
python java 前端 Python
Python延时函数详解及实例代码在Python编程中,有时我们需要在程序中添加延时,以便在执行特定操作之前等待一段时间。延时函数允许我们在代码中创建一个暂停的时间间隔。本文将详细介绍Python中的延时函数,并提供一些实例代码供参考。Python中的延时函数可以通过time模块来实现。time模块是Python标准库中的一部分,提供了与时间相关的函数和方法。我们可以使用time.sleep()函
Python中删除文件和目录
湫兮之风
python java 开发语言
python中分别提供os包下的os.remove()与shutil包下的shutil.rmtree()函数,其中os.remove()的主要作用是删除一个具体的文件,shutil.rmtree()主要作用是删除一个具体的目录。os.remove()这个函数需要一个参数,即要删除的文件的路径。importosfile_path="/path/to/your/file.txt"#将此处的路径替换为你
python os.path.basename()方法
Arthur-Ji
python
返回path最后的文件名。如果path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素。?12345>>>importos>>>path='/Users/beazley/Data/data.csv'>>>#Getthelastcomponentofthepath>>>os.path.basename(path)'data.csv'
Python path模块
倾听冷暖
python 策略模式 开发语言
在Python中,你可能说的是os.path模块(它属于os模块下专门处理路径相关操作的部分)或者是pathlib模块(Python标准库中用于面向对象风格的路径操作模块),以下分别为你详细介绍这两种与路径相关的内容:os.path模块os.path模块提供了一系列用于处理文件路径的实用函数,能帮助开发者方便地操作路径、获取路径相关信息等,且可以适配不同的操作系统(Windows、Linux、ma
差分进化算法(Differential evolution,DE)(附详细注释的Python代码)
XijueJa
算法 python 开发语言
概念与基本原理差分进化算法(DifferentialEvolution,简称DE)是一种基于种群的随机优化算法,由Storm和Price在1995年提出。它主要应用于解决非线性、非凸、连续和离散的优化问题。DE算法以其简单性、鲁棒性和高效性而受到广泛关注。差分进化算法的基本思想是通过模拟自然进化过程中的遗传和变异机制来寻找问题的最优解,类似于遗传算法。通过变异、交叉与选择,使得初始化的种群不断朝最
Python常用OS库之path模块学习
风陵苑主
python 学习
学习python没有太多捷径,有也只有技巧,更重要的是要多学多练,个人觉得练更重要,读万卷书不如行万里路。编程是一门技能,所以除了看还要多实践,写得多了自然也就有了路。如果看全部的标准库文档,可以访问这个链接os---多种操作系统接口—Python3.12.3文档接下来就来敲敲OS库下的path方法,这里只是记录一下,搬运工作,加深印象。那就开始吧。os.path常用方法一、os.path.abs
python 删除文件、目录(文件夹)
2301_78094384
python python
最近使用python进行文件,目录的操作,实在难以相信,python这么简单,易用的语言,竟然没有一个库很好的支持删除文件、目录(文件夹),于是把最近收集到的一些信息做下整理。删除文件:Pathlib:file_path.unlink()os:os.remove(file_path)删除目录(文件夹):空目录(Path库):dir_path.rmdir()非空目录(shutil):shutil.r
python与mysql的交互(一)
xiaoking32
Python python
python与mysql的交互(一)在mac上装mysqlpython操作mysql的步骤解析sql注入什么是sql注入?怎么防止?在mac上装mysql下载mysqlformac:https://dev.mysql.com/downloads/mysql/解压dmg文件,点击pkg文件进行安装Continue->Continue,Agree->Install->输入管理员密码->设置root用户
手把手教你 AI 顾投:在 Ollama 中使用 Python 调用金融 API 服务
老余捞鱼
AI探讨与学习 人工智能 python 金融 llama
作者:老余捞鱼原创不易,转载请标明出处及原作者。写在前面的话:尽管Ollama本身不是一个大型语言模型(LLM)开发工具,而是一个LLM的平台。但它最近宣布了其系统中直接使用工具调用的功能,本文主要介绍了最新版本的主要更新,特别是关于功能调用的使用,并演示了如何在Ollama中使用Python调用外部API服务。一、部署Ollama在本地运行1.1设置开发环境在开始编写代码之前,最好的做法是建立一
基于深度学习的推荐系统构建:Movielens 数据集
fresh的转码之路
深度学习 人工智能 机器学习 推荐算法
基于深度学习的推荐系统构建:Movielens数据集依赖环境代码语言:python3.11.5开发平台:pycharmtensorflow版本:2.18.0MovieLen1M数据及简介MovieLens1M数据集包含包含6000个用户在近4000部电影上的100万条评分,也包括电影元数据信息和用户属性信息。下载地址为:http://files.grouplens.org/datasets/mov
PyMySQL 详解
一只猪皮怪5
SQL 数据库 mysql python
PyMySQL是一个纯Python实现的MySQL客户端操作库,支持事务、存储过程、批量执行等。PyMySQL遵循Python数据库APIv2.0规范,并包含了pure-PythonMySQL客户端库。安装pipinstallPyMySQL创建数据库连接importpymysqlconnection=pymysql.connect(host='localhost',port=3306,user='
python界面小游戏贪吃蛇_用Python实现童年小游戏贪吃蛇
weixin_39627052
python界面小游戏贪吃蛇
贪吃蛇作为一款经典小游戏,早在1976年就面世了,我最早接触它还是在家长的诺基亚手机中。尽管贪吃蛇的历史相对比较久远,但它却有着十分顽强的生命力,保持经久不衰,其中很重要的原因便是游戏厂家不断的对其进行更新迭代。现在,这款游戏无论是游戏场景、规则等都变得十分丰富。接下来,我们看一下如何通过Python简单的实现这款小游戏。规则要有游戏主界面、贪吃蛇、食物能够控制贪吃蛇移动并获取食物贪吃蛇吃了食物后
python怎么安装pymysql_Python中操作mysql的pymysql模块详解
weixin_39634876
前言pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。但目前pymysql支持python3.x而后者不支持3.x版本。本文测试python版本:2.7.11。mysql版本:5.6.24一、安装pip3installpymysql二、使用操作1、执行SQL#!/usr/bin/envpytho#-*-coding:utf-8-*-importpymysql#创
用python操作浏览器的三种方式_经验 | python 操作浏览器的三种方式
weixin_39642619
第一种:selenium导入浏览器驱动,用get方法打开浏览器,例如:importtimefromseleniumimportwebdriverdefmac():#browser=webdriver.Chrome()#browser=webdriver.Firefox()browser=webdriver.Ie()browser.implicitly_wait(5)browser.get("htt
python与mysql交互_Python和Mysql交互
weixin_39703561
python与mysql交互
安装引入模块~安装mysql模块sudoapt-getinstallpython-mysqldb~在文件中引入模块importMySQLdbConnection对象用于建立与数据库的连接,创建对象:调用connect()方法conn=MySQLdb.connect(参数列表)其中参数列表有:host:连接的mysql主机,如果本机是'localhost';port:连接的mysql主机的端口,默认
python中redirect如何传值_传递参数时重定向 - python
叫我柴先生
在烧瓶中,我可以这样做:render_template("foo.html",messages={'main':'hello'})如果foo.html包含{{messages['main']}},则页面将显示hello。但是,如果有一条通往foo的路线怎么办:@app.route("/foo")defdo_foo():#dosomelogicherereturnrender_template("f
Flask 和阿里云 OSS 实现文件上传功能
ivwdcwso
开发 flask 阿里云 python oss
在本教程中,我们将学习如何使用Flask框架和阿里云对象存储服务(OSS)来创建一个简单而强大的文件上传应用。这个应用将允许用户通过Web界面上传文件,然后将文件安全地存储到阿里云OSS中,并返回可访问的文件URL。准备工作在开始之前,请确保您已经完成以下准备工作:安装Python(推荐Python3.7+)安装Flask:pipinstallflask安装阿里云OSSSDK:pipinstall
深入了解JSON:Python中JSON的全面应用指南
kdayjj966
开发语言 json python
JSON(JavaScriptObjectNotation)是一种广泛使用的数据交换格式,以其轻量级和易于阅读及解析的特性而备受欢迎。JSON起源于JavaScript,但已经被许多编程语言广泛支持,包括Python。本教程将深入探讨JSON的构造、数据类型,以及在Python中的多种操作方式。JSON的基础构造JSON由两种主要结构组成:对象(Object)和数组(Array)。对象(Objec
Auto PY to EXE:一键将Python脚本转换为可执行文件
方玉蜜United
AutoPYtoEXE:一键将Python脚本转换为可执行文件项目地址:https://gitcode.com/gh_mirrors/au/auto-py-to-exe在软件开发的世界里,将Python脚本转换为可执行文件(.exe)是一个常见的需求。无论是为了分发给非技术用户,还是为了保护源代码,这个过程都显得尤为重要。今天,我们要介绍的是一款强大的工具——AutoPYtoEXE,它能够帮助你轻
Python蓝桥杯刷题--妮妮的蓝桥果园2(split,map)
重生之我要成为代码大佬
蓝桥python学习 算法 python 开发语言 蓝桥杯
题目在蓝桥镇,妮妮拥有一片美丽的果园。果园中有N种不同的水果树,每种水果树上的水果都有其特别的价值。妮妮记下了每种水果的价值,用一个正整数Ai来表示。现在妮妮想知道,如果他把果园里所有种类的水果都摘下来卖掉,他能获得多少的总价值。你能帮助妮妮计算一下吗?输入格式输入的第一行包含一个整数N,表示果园中水果的种类数。接下来的一行包含N个整数A1,A2,...,AN,分别表示每种水果的价值。其中,满足1
利用auto-py-to-exe库的简单图形界面实现.py到.exe的转换
Lins号丹
Python编程 py文件打包 exe文件转换 auto-py-to-exe
文章目录1.auto-py-to-exe简介2.安装与使用3.配置项介绍4.打包完成1.auto-py-to-exe简介运行.py文件需要配套相应的Python解释器和相关的依赖项,而很多时候我们会面临光有待演示的.py程序,而没有支持演示的环境的尴尬。一种解决办法就是,将.py文件及其依赖的内容打包成可执行文件.exe,这样,就算用户电脑没有安装Python相关环境,也能够成功运行代码。Pyth
Python|基于DeepSeek大模型,实现文本内容仿写(8)
写python的鑫哥
AI大模型实战应用 人工智能 python 大模型 DeepSeek Kimi 文本 仿写
前言本文是该专栏的第8篇,后面会持续分享AI大模型干货知识,记得关注。我们在处理文本数据项目的时候,有时可能会遇到这样的需求。比如说,指定某些文本模板样例,需要仿写或者生成该“模板”样例数据。再或者说,通过给予某些指定类型的关键词,生成关键词相关领域的文本素材或内容。如果单单投入人力去完成,这肯定是没问题,但耗费的更多是人力成本。而现阶段,对于这种需求,大大可以选择大模型去完成。而本文,笔者将基于
【Python爬虫实战】深入解析 Scrapy 管道:数据清洗、验证与存储的实战指南
易辰君
python爬虫 python 爬虫 开发语言
个人主页:易辰君-CSDN博客系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html目录前言一、了解ScrapyShell二、配置文件settings.py(一)为什么需要配置文件(二)配置文件的使用方法(三)常用字段及其含义三、管道的深入使用(一)管道的常用方法(二)管道的实现(三)启用管道四、管道的常见应用场景五、管道使用
设计模式介绍
tntxia
设计模式
设计模式来源于土木工程师 克里斯托弗 亚历山大(http://en.wikipedia.org/wiki/Christopher_Alexander)的早期作品。他经常发表一些作品,内容是总结他在解决设计问题方面的经验,以及这些知识与城市和建筑模式之间有何关联。有一天,亚历山大突然发现,重复使用这些模式可以让某些设计构造取得我们期望的最佳效果。
亚历山大与萨拉-石川佳纯和穆雷 西乐弗斯坦合作
android高级组件使用(一)
百合不是茶
android RatingBar Spinner
1、自动完成文本框(AutoCompleteTextView)
AutoCompleteTextView从EditText派生出来,实际上也是一个文本编辑框,但它比普通编辑框多一个功能:当用户输入一个字符后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择某个菜单项之后,AutoCompleteTextView按用户选择自动填写该文本框。
使用AutoCompleteTex
[网络与通讯]路由器市场大有潜力可挖掘
comsci
网络
如果国内的电子厂商和计算机设备厂商觉得手机市场已经有点饱和了,那么可以考虑一下交换机和路由器市场的进入问题.....
这方面的技术和知识,目前处在一个开放型的状态,有利于各类小型电子企业进入
&nbs
自写简单Redis内存统计shell
商人shang
Linux shell 统计Redis内存
#!/bin/bash
address="192.168.150.128:6666,192.168.150.128:6666"
hosts=(${address//,/ })
sfile="staticts.log"
for hostitem in ${hosts[@]}
do
ipport=(${hostitem
单例模式(饿汉 vs懒汉)
oloz
单例模式
package 单例模式;
/*
* 应用场景:保证在整个应用之中某个对象的实例只有一个
* 单例模式种的《 懒汉模式》
* */
public class Singleton {
//01 将构造方法私有化,外界就无法用new Singleton()的方式获得实例
private Singleton(){};
//02 申明类得唯一实例
priva
springMvc json支持
杨白白
json springmvc
1.Spring mvc处理json需要使用jackson的类库,因此需要先引入jackson包
2在spring mvc中解析输入为json格式的数据:使用@RequestBody来设置输入
@RequestMapping("helloJson")
public @ResponseBody
JsonTest helloJson() {
android播放,掃描添加本地音頻文件
小桔子
最近幾乎沒有什麽事情,繼續鼓搗我的小東西。想在項目中加入一個簡易的音樂播放器功能,就像華為p6桌面上那麼大小的音樂播放器。用過天天動聽或者QQ音樂播放器的人都知道,可已通過本地掃描添加歌曲。不知道他們是怎麼實現的,我覺得應該掃描設備上的所有文件,過濾出音頻文件,每個文件實例化為一個實體,記錄文件名、路徑、歌手、類型、大小等信息。具體算法思想,
oracle常用命令
aichenglong
oracle dba 常用命令
1 创建临时表空间
create temporary tablespace user_temp
tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local
25个Eclipse插件
AILIKES
eclipse插件
提高代码质量的插件1. FindBugsFindBugs可以帮你找到Java代码中的bug,它使用Lesser GNU Public License的自由软件许可。2. CheckstyleCheckstyle插件可以集成到Eclipse IDE中去,能确保Java代码遵循标准代码样式。3. ECLemmaECLemma是一款拥有Eclipse Public License许可的免费工具,它提供了
Spring MVC拦截器+注解方式实现防止表单重复提交
baalwolf
spring mvc
原理:在新建页面中Session保存token随机码,当保存时验证,通过后删除,当再次点击保存时由于服务器端的Session中已经不存在了,所有无法验证通过。
1.新建注解:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
《Javascript高级程序设计(第3版)》闭包理解
bijian1013
JavaScript
“闭包是指有权访问另一个函数作用域中的变量的函数。”--《Javascript高级程序设计(第3版)》
看以下代码:
<script type="text/javascript">
function outer() {
var i = 10;
return f
AngularJS Module类的方法
bijian1013
JavaScript AngularJS Module
AngularJS中的Module类负责定义应用如何启动,它还可以通过声明的方式定义应用中的各个片段。我们来看看它是如何实现这些功能的。
一.Main方法在哪里
如果你是从Java或者Python编程语言转过来的,那么你可能很想知道AngularJS里面的main方法在哪里?这个把所
[Maven学习笔记七]Maven插件和目标
bit1129
maven插件
插件(plugin)和目标(goal)
Maven,就其本质而言,是一个插件执行框架,Maven的每个目标的执行逻辑都是由插件来完成的,一个插件可以有1个或者几个目标,比如maven-compiler-plugin插件包含compile和testCompile,即maven-compiler-plugin提供了源代码编译和测试源代码编译的两个目标
使用插件和目标使得我们可以干预
【Hadoop八】Yarn的资源调度策略
bit1129
hadoop
1. Hadoop的三种调度策略
Hadoop提供了3中作业调用的策略,
FIFO Scheduler
Fair Scheduler
Capacity Scheduler
以上三种调度算法,在Hadoop MR1中就引入了,在Yarn中对它们进行了改进和完善.Fair和Capacity Scheduler用于多用户共享的资源调度
2. 多用户资源共享的调度
Nginx使用Linux内存加速静态文件访问
ronin47
Nginx是一个非常出色的静态资源web服务器。如果你嫌它还不够快,可以把放在磁盘中的文件,映射到内存中,减少高并发下的磁盘IO。
先做几个假设。nginx.conf中所配置站点的路径是/home/wwwroot/res,站点所对应文件原始存储路径:/opt/web/res
shell脚本非常简单,思路就是拷贝资源文件到内存中,然后在把网站的静态文件链接指向到内存中即可。具体如下:
关于Unity3D中的Shader的知识
brotherlamp
unity unity资料 unity教程 unity视频 unity自学
首先先解释下Unity3D的Shader,Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微软的FX文件或者NVIDIA的CgFX有些类似。传统意义上的vertex shader和pixel shader还是使用标准的Cg/HLSL 编程语言编写的。因此Unity文档里面的Shader,都是指用ShaderLab编写的代码,然后我们来看下Unity3D自带的60多个S
CopyOnWriteArrayList vs ArrayList
bylijinnan
java
package com.ljn.base;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* 总述:
* 1.ArrayListi不是线程安全的,CopyO
内存中栈和堆的区别
chicony
内存
1、内存分配方面:
堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。
栈:由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中
回答一位网友对Scala的提问
chenchao051
scala map
本来准备在私信里直接回复了,但是发现不太方便,就简要回答在这里。 问题 写道 对于scala的简洁十分佩服,但又觉得比较晦涩,例如一例,Map("a" -> List(11,111)).flatMap(_._2),可否说下最后那个函数做了什么,真正在开发的时候也会如此简洁?谢谢
先回答一点,在实际使用中,Scala毫无疑问就是这么简单。
mysql 取每组前几条记录
daizj
mysql 分组 最大值 最小值 每组三条记录
一、对分组的记录取前N条记录:例如:取每组的前3条最大的记录 1.用子查询: SELECT * FROM tableName a WHERE 3> (SELECT COUNT(*) FROM tableName b WHERE b.id=a.id AND b.cnt>a. cnt) ORDER BY a.id,a.account DE
HTTP深入浅出 http请求
dcj3sjt126com
http
HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1.HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后We
判断MySQL记录是否存在方法比较
dcj3sjt126com
mysql
把数据写入到数据库的时,常常会碰到先要检测要插入的记录是否存在,然后决定是否要写入。
我这里总结了判断记录是否存在的常用方法:
sql语句: select count ( * ) from tablename;
然后读取count(*)的值判断记录是否存在。对于这种方法性能上有些浪费,我们只是想判断记录记录是否存在,没有必要全部都查出来。
对HTML XML的一点认识
e200702084
html xml
感谢http://www.w3school.com.cn提供的资料
HTML 文档中的每个成分都是一个节点。
节点
根据 DOM,HTML 文档中的每个成分都是一个节点。
DOM 是这样规定的:
整个文档是一个文档节点
每个 HTML 标签是一个元素节点
包含在 HTML 元素中的文本是文本节点
每一个 HTML 属性是一个属性节点
注释属于注释节点
Node 层次
jquery分页插件
genaiwei
jquery Web 前端 分页 插件
//jquery页码控件// 创建一个闭包 (function($) { // 插件的定义 $.fn.pageTool = function(options) { var totalPa
Mybatis与Ibatis对照入门于学习
Josh_Persistence
mybatis ibatis 区别 联系
一、为什么使用IBatis/Mybatis
对于从事 Java EE 的开发人员来说,iBatis 是一个再熟悉不过的持久层框架了,在 Hibernate、JPA 这样的一站式对象 / 关系映射(O/R Mapping)解决方案盛行之前,iBaits 基本是持久层框架的不二选择。即使在持久层框架层出不穷的今天,iBatis 凭借着易学易用、
C中怎样合理决定使用那种整数类型?
秋风扫落叶
c 数据类型
如果需要大数值(大于32767或小于32767), 使用long 型。 否则, 如果空间很重要 (如有大数组或很多结构), 使用 short 型。 除此之外, 就使用 int 型。 如果严格定义的溢出特征很重要而负值无关紧要, 或者你希望在操作二进制位和字节时避免符号扩展的问题, 请使用对应的无符号类型。 但是, 要注意在表达式中混用有符号和无符号值的情况。
&nbs
maven问题
zhb8015
maven问题
问题1:
Eclipse 中 新建maven项目 无法添加src/main/java 问题
eclipse创建maevn web项目,在选择maven_archetype_web原型后,默认只有src/main/resources这个Source Floder。
按照maven目录结构,添加src/main/ja
(二)androidpn-server tomcat版源码解析之--push消息处理
spjich
java androdipn 推送
在 (一)androidpn-server tomcat版源码解析之--项目启动这篇中,已经描述了整个推送服务器的启动过程,并且把握到了消息的入口即XmppIoHandler这个类,今天我将继续往下分析下面的核心代码,主要分为3大块,链接创建,消息的发送,链接关闭。
先贴一段XmppIoHandler的部分代码
/**
* Invoked from an I/O proc
用js中的formData类型解决ajax提交表单时文件不能被serialize方法序列化的问题
中华好儿孙
JavaScript Ajax Web 上传文件 FormData
var formData = new FormData($("#inputFileForm")[0]);
$.ajax({
type:'post',
url:webRoot+"/electronicContractUrl/webapp/uploadfile",
data:formData,
async: false,
ca
mybatis常用jdbcType数据类型
ysj5125094
mybatis mapper jdbcType
MyBatis 通过包含的jdbcType
类型
BIT FLOAT CHAR