https://www.jb51.net/article/57183.htm
前面的文章我们介绍了Python爬虫框架Scrapy的安装与配置等基本资料,本文我们就来看看如何使用Scrapy框架方便快捷的抓取一个网站的内容,随便选个小站(dmoz.org)来示例吧
网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据。虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间。Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便。使用Scrapy可以很方便的完成网上数据的采集工作,它为我们完成了大量的工作,而不需要自己费大力气去开发。
首先先要回答一个问题。 问:把网站装进爬虫里,总共分几步? 答案很简单,四步: 新建项目 (Project):新建一个新的爬虫项目 明确目标(Items):明确你想要抓取的目标 制作爬虫(Spider):制作爬虫开始爬取网页 存储内容(Pipeline):设计管道存储爬取内容
好的,基本流程既然确定了,那接下来就一步一步的完成就可以了。
1.新建项目(Project) 在空目录下按住Shift键右击,选择“在此处打开命令窗口”,输入一下命令:
复制代码 代码如下:
scrapy startproject tutorial
其中,tutorial为项目名称。 可以看到将会创建一个tutorial文件夹,目录结构如下:
复制代码 代码如下:
tutorial/ scrapy.cfg tutorial/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py ...
下面来简单介绍一下各个文件的作用: scrapy.cfg:项目的配置文件 tutorial/:项目的Python模块,将会从这里引用代码 tutorial/items.py:项目的items文件 tutorial/pipelines.py:项目的pipelines文件 tutorial/settings.py:项目的设置文件 tutorial/spiders/:存储爬虫的目录
2.明确目标(Item) 在Scrapy中,items是用来加载抓取内容的容器,有点像Python中的Dic,也就是字典,但是提供了一些额外的保护减少错误。 一般来说,item可以用scrapy.item.Item类来创建,并且用scrapy.item.Field对象来定义属性(可以理解成类似于ORM的映射关系)。 接下来,我们开始来构建item模型(model)。 首先,我们想要的内容有: 名称(name) 链接(url) 描述(description)
修改tutorial目录下的items.py文件,在原本的class后面添加我们自己的class。 因为要抓dmoz.org网站的内容,所以我们可以将其命名为DmozItem:
复制代码 代码如下:
# Define here the models for your scraped items # # See documentation in: # http://doc.scrapy.org/en/latest/topics/items.html from scrapy.item import Item, Field class TutorialItem(Item): # define the fields for your item here like: # name = Field() pass class DmozItem(Item): title = Field() link = Field() desc = Field()
刚开始看起来可能会有些看不懂,但是定义这些item能让你用其他组件的时候知道你的 items到底是什么。 可以把Item简单的理解成封装好的类对象。
3.制作爬虫(Spider)
制作爬虫,总体分两步:先爬再取。 也就是说,首先你要获取整个网页的所有内容,然后再取出其中对你有用的部分。3.1爬 Spider是用户自己编写的类,用来从一个域(或域组)中抓取信息。 他们定义了用于下载的URL列表、跟踪链接的方案、解析网页内容的方式,以此来提取items。 要建立一个Spider,你必须用scrapy.spider.BaseSpider创建一个子类,并确定三个强制的属性: name:爬虫的识别名称,必须是唯一的,在不同的爬虫中你必须定义不同的名字。 start_urls:爬取的URL列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URL中继承性生成。 parse():解析的方法,调用的时候传入从每一个URL传回的Response对象作为唯一参数,负责解析并匹配抓取的数据(解析为item),跟踪更多的URL。 这里可以参考宽度爬虫教程中提及的思想来帮助理解,教程传送:[Java] 知乎下巴第5集:使用HttpClient工具包和宽度爬虫。 也就是把Url存储下来并依此为起点逐步扩散开去,抓取所有符合条件的网页Url存储起来继续爬取。
下面我们来写第一只爬虫,命名为dmoz_spider.py,保存在tutorial\spiders目录下。 dmoz_spider.py代码如下:
复制代码 代码如下:
from scrapy.spider import Spider class DmozSpider(Spider): name = "dmoz" allowed_domains = ["dmoz.org"] start_urls = [ "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" ] def parse(self, response): filename = response.url.split("/")[-2] open(filename, 'wb').write(response.body)
allow_domains是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页。 从parse函数可以看出,将链接的最后两个地址取出作为文件名进行存储。 然后运行一下看看,在tutorial目录下按住shift右击,在此处打开命令窗口,输入:
复制代码 代码如下:
scrapy crawl dmoz
运行结果如图:
报错了: UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128) 运行第一个Scrapy项目就报错,真是命运多舛。 应该是出了编码问题,谷歌了一下找到了解决方案: 在python的Lib\site-packages文件夹下新建一个sitecustomize.py:
复制代码 代码如下:
import sys sys.setdefaultencoding('gb2312')
再次运行,OK,问题解决了,看一下结果:
最后一句INFO: Closing spider (finished)表明爬虫已经成功运行并且自行关闭了。 包含 [dmoz]的行 ,那对应着我们的爬虫运行的结果。 可以看到start_urls中定义的每个URL都有日志行。 还记得我们的start_urls吗? http://www.dmoz.org/Computers/Programming/Languages/Python/Books http://www.dmoz.org/Computers/Programming/Languages/Python/Resources 因为这些URL是起始页面,所以他们没有引用(referrers),所以在它们的每行末尾你会看到 (referer: )。 在parse 方法的作用下,两个文件被创建:分别是 Books 和 Resources,这两个文件中有URL的页面内容。
那么在刚刚的电闪雷鸣之中到底发生了什么呢? 首先,Scrapy为爬虫的 start_urls属性中的每个URL创建了一个 scrapy.http.Request 对象 ,并将爬虫的parse 方法指定为回调函数。 然后,这些 Request被调度并执行,之后通过parse()方法返回scrapy.http.Response对象,并反馈给爬虫。
3.2取 爬取整个网页完毕,接下来的就是的取过程了。 光存储一整个网页还是不够用的。 在基础的爬虫里,这一步可以用正则表达式来抓。 在Scrapy里,使用一种叫做 XPath selectors的机制,它基于 XPath表达式。 如果你想了解更多selectors和其他机制你可以查阅资料:点我点我
这是一些XPath表达式的例子和他们的含义 /html/head/title: 选择HTML文档
元素下面的
标签。 /html/head/title/text(): 选择前面提到的 元素下面的文本内容 //td: 选择所有 元素 //div[@class="mine"]: 选择所有包含 class="mine" 属性的div 标签元素 以上只是几个使用XPath的简单例子,但是实际上XPath非常强大。 可以参照W3C教程:点我点我。
为了方便使用XPaths,Scrapy提供XPathSelector 类,有两种可以选择,HtmlXPathSelector(HTML数据解析)和XmlXPathSelector(XML数据解析)。 必须通过一个 Response 对象对他们进行实例化操作。 你会发现Selector对象展示了文档的节点结构。因此,第一个实例化的selector必与根节点或者是整个目录有关 。 在Scrapy里面,Selectors 有四种基础的方法(点击查看API文档): xpath():返回一系列的selectors,每一个select表示一个xpath参数表达式选择的节点 css():返回一系列的selectors,每一个select表示一个css参数表达式选择的节点 extract():返回一个unicode字符串,为选中的数据 re():返回一串一个unicode字符串,为使用正则表达式抓取出来的内容
3.3xpath实验 下面我们在Shell里面尝试一下Selector的用法。 实验的网址:http://www.dmoz.org/Computers/Programming/Languages/Python/Books/
熟悉完了实验的小白鼠,接下来就是用Shell爬取网页了。 进入到项目的顶层目录,也就是第一层tutorial文件夹下,在cmd中输入:
复制代码 代码如下:
scrapy shell http://www.dmoz.org/Computers/Programming/Languages/Python/Books/
回车后可以看到如下的内容:
在Shell载入后,你将获得response回应,存储在本地变量 response中。 所以如果你输入response.body,你将会看到response的body部分,也就是抓取到的页面内容:
或者输入response.headers 来查看它的 header部分:
现在就像是一大堆沙子握在手里,里面藏着我们想要的金子,所以下一步,就是用筛子摇两下,把杂质出去,选出关键的内容。 selector就是这样一个筛子。 在旧的版本中,Shell实例化两种selectors,一个是解析HTML的 hxs 变量,一个是解析XML 的 xxs 变量。 而现在的Shell为我们准备好的selector对象,sel,可以根据返回的数据类型自动选择最佳的解析方案(XML or HTML)。 然后我们来捣弄一下!~ 要彻底搞清楚这个问题,首先先要知道,抓到的页面到底是个什么样子。 比如,我们要抓取网页的标题,也就是
这个标签:
可以输入:
复制代码 代码如下:
sel.xpath('//title')
结果就是:
这样就能把这个标签取出来了,用extract()和text()还可以进一步做处理。 备注:简单的罗列一下有用的xpath路径表达式: 表达式 描述 nodename 选取此节点的所有子节点。 / 从根节点选取。 // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 . 选取当前节点。 .. 选取当前节点的父节点。 @ 选取属性。 全部的实验结果如下,In[i]表示第i次实验的输入,Out[i]表示第i次结果的输出(建议大家参照:W3C教程):
复制代码 代码如下:
In [1]: sel.xpath('//title') Out[1]: [Open Directory - Computers: Progr'>] In [2]: sel.xpath('//title').extract() Out[2]: [u'Open Directory - Computers: Programming: Languages: Python: Books '] In [3]: sel.xpath('//title/text()') Out[3]: [] In [4]: sel.xpath('//title/text()').extract() Out[4]: [u'Open Directory - Computers: Programming: Languages: Python: Books'] In [5]: sel.xpath('//title/text()').re('(\w+):') Out[5]: [u'Computers', u'Programming', u'Languages', u'Python']
当然title这个标签对我们来说没有太多的价值,下面我们就来真正抓取一些有意义的东西。 使用火狐的审查元素我们可以清楚地看到,我们需要的东西如下:
我们可以用如下代码来抓取这个
标签:
复制代码 代码如下:
sel.xpath('//ul/li')
从
标签中,可以这样获取网站的描述:
复制代码 代码如下:
sel.xpath('//ul/li/text()').extract()
可以这样获取网站的标题:
复制代码 代码如下:
sel.xpath('//ul/li/a/text()').extract()
可以这样获取网站的超链接:
复制代码 代码如下:
sel.xpath('//ul/li/a/@href').extract()
当然,前面的这些例子是直接获取属性的方法。 我们注意到xpath返回了一个对象列表, 那么我们也可以直接调用这个列表中对象的属性挖掘更深的节点 (参考:Nesting selectors andWorking with relative XPaths in the Selectors): sites = sel.xpath('//ul/li') for site in sites: title = site.xpath('a/text()').extract() link = site.xpath('a/@href').extract() desc = site.xpath('text()').extract() print title, link, desc
3.4xpath实战 我们用shell做了这么久的实战,最后我们可以把前面学习到的内容应用到dmoz_spider这个爬虫中。 在原爬虫的parse函数中做如下修改:
复制代码 代码如下:
from scrapy.spider import Spider from scrapy.selector import Selector class DmozSpider(Spider): name = "dmoz" allowed_domains = ["dmoz.org"] start_urls = [ "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" ] def parse(self, response): sel = Selector(response) sites = sel.xpath('//ul/li') for site in sites: title = site.xpath('a/text()').extract() link = site.xpath('a/@href').extract() desc = site.xpath('text()').extract() print title
注意,我们从scrapy.selector中导入了Selector类,并且实例化了一个新的Selector对象。这样我们就可以像Shell中一样操作xpath了。 我们来试着输入一下命令运行爬虫(在tutorial根目录里面):
复制代码 代码如下:
scrapy crawl dmoz
运行结果如下:
果然,成功的抓到了所有的标题。但是好像不太对啊,怎么Top,Python这种导航栏也抓取出来了呢? 我们只需要红圈中的内容:
看来是我们的xpath语句有点问题,没有仅仅把我们需要的项目名称抓取出来,也抓了一些无辜的但是xpath语法相同的元素。 审查元素我们发现我们需要的
具有class='directory-url'的属性, 那么只要把xpath语句改成sel.xpath('//ul[@class="directory-url"]/li')即可 将xpath语句做如下调整:
复制代码 代码如下:
from scrapy.spider import Spider from scrapy.selector import Selector class DmozSpider(Spider): name = "dmoz" allowed_domains = ["dmoz.org"] start_urls = [ "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" ] def parse(self, response): sel = Selector(response) sites = sel.xpath('//ul[@class="directory-url"]/li') for site in sites: title = site.xpath('a/text()').extract() link = site.xpath('a/@href').extract() desc = site.xpath('text()').extract() print title
成功抓出了所有的标题,绝对没有滥杀无辜:
3.5使用Item 接下来我们来看一看如何使用Item。 前面我们说过,Item 对象是自定义的python字典,可以使用标准字典语法获取某个属性的值:
复制代码 代码如下:
>>> item = DmozItem() >>> item['title'] = 'Example title' >>> item['title'] 'Example title'
作为一只爬虫,Spiders希望能将其抓取的数据存放到Item对象中。为了返回我们抓取数据,spider的最终代码应当是这样:
复制代码 代码如下:
from scrapy.spider import Spider from scrapy.selector import Selector from tutorial.items import DmozItem class DmozSpider(Spider): name = "dmoz" allowed_domains = ["dmoz.org"] start_urls = [ "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" ] def parse(self, response): sel = Selector(response) sites = sel.xpath('//ul[@class="directory-url"]/li') items = [] for site in sites: item = DmozItem() item['title'] = site.xpath('a/text()').extract() item['link'] = site.xpath('a/@href').extract() item['desc'] = site.xpath('text()').extract() items.append(item) return items
4.存储内容(Pipeline) 保存信息的最简单的方法是通过Feed exports,主要有四种:JSON,JSON lines,CSV,XML。 我们将结果用最常用的JSON导出,命令如下:
复制代码 代码如下:
scrapy crawl dmoz -o items.json -t json
-o 后面是导出文件名,-t 后面是导出类型。 然后来看一下导出的结果,用文本编辑器打开json文件即可(为了方便显示,在item中删去了除了title之外的属性):
因为这个只是一个小型的例子,所以这样简单的处理就可以了。 如果你想用抓取的items做更复杂的事情,你可以写一个 Item Pipeline(条目管道)。 这个我们以后再慢慢玩^_^
以上便是python爬虫框架Scrapy制作爬虫抓取网站内容的全部过程了,非常的详尽吧,希望能够对大家有所帮助,有需要的话也可以和我联系,一起进步
您可能感兴趣的文章:
Python爬虫框架scrapy实现的文件下载功能示例
python爬虫框架scrapy实现模拟登录操作示例
Python爬虫框架Scrapy常用命令总结
Python爬虫框架Scrapy基本用法入门教程
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Python爬虫框架Scrapy安装使用步骤
Python基于scrapy采集数据时使用代理服务器的方法
Python的Scrapy爬虫框架简单学习笔记
Python的爬虫程序编写框架Scrapy入门学习教程
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
你可能感兴趣的:(python)
【手把手教你-Python】如何让 Flask 根据现有表结构生成 SQLAlchemy 模型文件?
EricLing2022
python flask 开发语言 sql database
首先你要具备一定Python基础,了解Flask框架,以及数据库工具SQLAchemy。为什么会有这个需求?在使用Python编写项目代码时,假设数据库中的表已经存在,我们需要根据现有的表结构来编写SQLAlchemy模型文件。为了避免逐行编写代码,我们可以使用一个工具来“一键生成”模型文件,那就是sqlacodegen。准备工作Python版本:3.11.5(只要是3.xx版本应该都可以)安装好
数组逆序重放
crmeb专业二开
python 开发语言
数组逆序重放的意思是将数组的元素逆序排列,然后重新放回原数组中。这个操作可以在很多编程语言中实现,例如Python、Java等。下面是一个Python的示例代码,可以实现这个操作:defreverse_and_rearrange(arr):#反转数组arr.reverse()#重新放回原数组result=[]foriinrange(len(arr)):result.append(arr[i])re
Python 程序 运行过程
iteye_20309
python c/c++ 数据库
一.Python解释器Python是一门编程语言,同时也是一个解释器的软件包。解释器是一种让其他程序运行起来的程序。当你编写了一段Python程序,Python解释器将读取程序,并按照其中的命令执行,得出结果。解释器是代码与计算机硬件之间的软件逻辑层。当Python包安装后,它包含了一些最小化的组件:一个解释器和支持的库。根据使用情况的不同,Python解释器可能采取可执行程序的形式,或者作为链接
python记录6from flask import Flaskapp = Flask(__name__) @app.route(‘/‘)def hello_world(): retu
我讨厌python
python 开发语言 后端
利用pycharm实现视频分镜1.下载pip3installpycharm或者官网下载2.网页显示文字步骤想要在网页上显示:Hello,World!第一步先在PyCharm上新建项目然后在main.py中输入以下代码fromflaskimportFlaskapp=Flask(__name__)@app.route('/')defhello_world():return'Hello,World!'i
将一个数组逆序输出。-多语言
赔罪
Practice questions 算法 数据结构 python c语言 java javascript
目录C语言实现方法1:交换元素方法2:使用辅助数组方法3:使用递归方法4:使用标准库函数(C99及以上)总结Python实现方法1:交换元素方法2:使用切片方法3:使用reversed()函数方法4:使用list.reverse()方法方法5:使用for循环和append()总结Java实现方法1:交换元素方法2:使用Collections.reverse()方法(适用于对象数组)方法3:使用递归
app=Flask(__name__)中的__name__的意义
BirdMan98
flask python 后端
在app=Flask(__name__)这行代码中,Flask(__name__)用于初始化Flask应用对象,而__name__这个参数的作用主要是确定应用的根路径,影响Flask如何查找资源,如静态文件、模板等。1.__name__是Python内置变量__name__在Python模块中表示当前模块的名称:如果Python文件被直接运行,__name__的值为"__main__"。如果Pyt
使用yolov8+flask实现精美登录界面+图片视频摄像头检测系统
FL1623863129
深度学习 YOLO flask python
这个是使用flask实现好看登录界面和友好的检测界面实现yolov8推理和展示,代码仅仅有2个html文件和一个python文件,真正做到了用最简洁的代码实现复杂功能。测试通过环境:windowsx64anaconda3+python3.8ultralytics==8.3.81flask==1.1.2torch==2.3.0运行步骤:安装好环境执行pythonlogin.py后端实现代码:from
python 解决 ‘win32api’ 模块找不到的问题
xybf
python python 开发语言
出现这个问题可能是因为升级至python3.10之后,会遗漏两个重要的dll:`pythoncom310.dll`和`pywintypes310.dll`。解决方案就是在python目录下运行`pythonScripts/pywin32_postinstall.py-install`,然后这两个文件就会被创建在`C:\Windows\System32`或者是python目录下。如果这两个地方都找不
AI编程篇-python基础篇
cv工程师(ctrl+c\v)
AI编程 python
转型AI算法后的总结-python基础篇python基础AI算法工程师的日常开发工作离不开python这门语言。python的优点:开源免费、简单易学、丰富的库。以下是我总结的python的一些基础:1.python及IDE工具安装对于初学者来说,python的安装是必不可少的,但是为了方便代码编辑和查看结果及debug,可以安装pycharm社区版暂时用来前期学习:python安装及注意事项:下
torch-torchvision-python版本对应问题
Thirtyaoe
python 深度学习 pytorch
module‘torch.onnx.symbolic_helper’hasnoattribute‘quantized_args’今日在联系pytorch时,importtorchvision时报错:module‘torch.onnx.symbolic_helper’hasnoattribute‘quantized_args’查阅后发现是版本不兼容的问题,于是查看了正确的对应版本,对自己的进行修改。
torchvision与torch的版本冲突
RanGriffin
python pytorch
在importtorchvision时报错:UserWarning:FailedtoloadimagePythonextension:[WinError127]解决在晚上查询之后,问题在于自己的torchvision版本与torch版本不对应。首先查询自己的torch和torchvision版本importtorchprint(torch.__version__)importtorchvision
xodooIP地址定位
odoo实施
XODOO PRO Xodoo odoo python
//src/packages/python/geoip2.rs实现特点:跨平台支持:通过Rust原生实现,兼容Windows、Linux、macOS等主流操作系统类型安全:使用Rust的Option类型处理可能缺失的字段严格校验IP地址格式自动处理编码转换性能优化:数据库文件只加载一次内存映射方式读取数据零拷贝解析技术错误处理:明确的错误类型(IOError/ValueError)友好的错误提示信
警告 torch.nn.utils.weight_norm is deprecate 的参考解决方法
wongHome
深度学习相关调试问题 Ubuntu pytorch
文章目录写在前面一、问题描述二、解决方法参考链接写在前面自己的测试环境:Ubuntu20.04一、问题描述运行pytorch程序,如下如下警告/home/wong/ProgramFiles/anaconda3/envs/pytorch_env/lib/python3.8/site-packages/torch/nn/utils/weight_norm.py:30:UserWarning:torch
如何用Python绘制柱状图堆叠图?
上官美丽
技术分享 python 开发语言
在数据分析和可视化的过程中,柱状图是一种非常常用的图表类型。它能清晰地展示不同类别之间的比较。而堆叠柱状图则是在此基础上,能够展示各个部分在整体中的占比!今天,我们来聊聊如何使用Python绘制堆叠柱状图,帮助你更好地理解数据。我们将使用一个非常流行的库:Matplotlib。准备工作首先,你需要确保安装了Matplotlib库。如果还没有安装,可以通过以下命令来安装:pipinstallmatp
python socket库详解
mosquito_lover1
python websocket
socket是Python标准库中的一个模块,提供了对底层网络通信的接口,允许开发者进行网络编程。通过socket你可以创建客户端和服务器应用程序,实现网络通信。1.基本概念-Socket:是网络通信的端点,用于在不同主机之间或同一主机上的不同进程之间进行数据传输。-IP地址:标识网络中的设备。-端口号:标识设备上的特定进程或服务。-协议:常用的协议有TCP(传输控制协议)和UDP(用户数据报协议
使用Python和LangChain创建可调用工具的智能对话机器人:全面指南
m0_57781768
python langchain 机器人
使用Python和LangChain创建可调用工具的智能对话机器人:全面指南在当今技术迅猛发展的时代,人工智能(AI)和自然语言处理(NLP)技术的应用范围越来越广。尤其是对话机器人,它们不仅能与人类进行自然交互,还能通过调用外部API与各种系统对接,为用户提供更加智能和灵活的服务。本文将通过一系列实例和代码演示,向您展示如何利用Python编程语言和LangChain框架,创建能够使用外部工具(
踩坑:VirtualBox:安装提示缺少python core和win32 api
过去的了
linux python
一、安装OracleVirtualBox时出现以下现象内容提示:安装OracleVMVirtualBox7.0.24的Python绑定需要先安装PythonCore包和win32api绑定。如果现在继续安装OracleVMVirtualBox7.0.24的Python绑定,那么这些依赖项需要在之后手动设置。用户可以参考OracleVMVirtualBox7.0.24SDK手册获取更多信息。如果忽视
YOLO11 环境安装
你喜欢喝可乐吗?
conda deep learning 人工智能 conda
1.安装Anaconda/Miniconda在Ubuntu中安装MinicondaAnaconda/Minicondapip配置清华镜像源Anaconda/Miniconda基本操作命令2.创建python虚拟环境#创建condacreate-nyolo11_envpython=3.12#激活condaactivateyolo11_env3.安装pytorch#Pytorchhttps://pyt
Python3 【项目实战】深度解析:赛跑成绩统计分析工具
李智 - 重庆
Python 精讲精练 - 从入门到实战 python 案例学习 编程技巧 时间处理 项目实战
Python3【项目实战】深度解析:赛跑成绩统计分析工具一、项目概述1.开发背景:田径比赛的成绩统计需要快速准确的计算选手成绩,传统人工计时和统计效率低且易出错。本工具通过程序化处理赛跑数据,自动计算各选手成绩及整体统计指标,主要应用于:学校运动会成绩实时统计田径锦标赛的自动化成绩公示运动员训练数据分析2.技术定位:时间数据处理与统计计算的典型案例字典数据结构的实践应用面向过程编程的教学范例二、项
默默的学python——两个重要的函数dir()、help()
xiaoli_panpan
# python基础 python
一、dir()函数dir()函数在Python中用于返回一个对象的所有属性和方法的列表,当你对一个函数使用dir()时,它会返回函数对象的所有可访问的属性和方法的名字列表。具体的说,dir()函数获取的内容包括:1.特殊方法和魔法方法如call、code、defaults、doc、globals、__name__等,这些方法和属性是函数对象的一部分,提供了对函数元数据的访问。2.基础自基类的属性和
python xpath定位元素方法_关于python中的xpath解析定位
weixin_39975366
python xpath定位元素方法
爬取的网站:http://jbk.39.net/chancegz/这里只针对个别属性值:#例如:'别名'下的span标签文本,‘发病部位'下的span标签文本以及‘挂号科室‘下的span标签文本#defdisease(url):text=get_html(url)tree=etree.HTML(text)bm=tree.xpath('//ul[@class="information_ul"]/li
通过Python使用json库写一个更新josn文件中某个字段中数组数据的函数
焦虑肇事者
json
你可以使用Python中的json库来读取json文件,然后使用Python字典的方式来更新json文件中的某个字段。最后,使用json库的写入功能将更新后的字典写回json文件。例如,你可以使用以下代码来实现这个功能:importjsondefupdate_json_array(json_file,field,new_data):#读取json文件withopen(json_file,'r')a
ros如何编译python文件_(二)ROS入门——4.如何编写ROS的第一个程序hello_world
weixin_39935903
ros如何编译python文件
ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便。我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS基础知识进行详细的讲解,给不熟悉ROS的朋友起到一个抛砖引玉的作用。本章节主要内容:1.ROS是什么2.ROS系统整体架构3.在ubuntu16.04中安装ROSkinetic4.如何编写ROS的第一个程序
基于深度学习的个性化新闻推荐系统设计与实现计算机毕设
sj52abcd
深度学习 课程设计 人工智能 毕业设计
博主介绍:✌专注于VUE,小程序,安卓,Java,python,物联网专业,有17年开发经验,长年从事毕业指导,项目实战✌选取一个适合的毕业设计题目很重要。✌关注✌私信我✌具体的问题,我会尽力帮助你。研究的背景:随着互联网技术的发展和普及,人们越来越依赖互联网获取信息。然而,随着信息量的不断增加,用户在查找新闻时面临着信息过载的问题。为了解决这个问题,个性化新闻推荐系统被广泛应用。个性化新闻推荐系
用Python提取json数据到Excel文件中
程序媛了了
python json excel
本文介绍基于Python,读取JSON文件数据,并将JSON文件中指定的键值对数据转换为.csv格式文件的方法。在之前的文章疯狂学习GIS:Python读取JSON数据并存储为CSV表格中,我们就介绍过将JSON文件数据保存到.csv格式或.xlsx格式的表格文件中的方法;而本文我们将针对不同的待提取数据特征,给出另一种方法。首先,我们来明确一下具体的需求。我们现有一个JSON文件数据,是一个包含
python 人工智能实战案例
2401_86114612
pygame python java
大家好,今天我们要分享,python编程人工智能小例子python人工智能100例子,一起探索吧!1.背景介绍概述在这个世纪,人类已经处于数字化的时代,而这也让很多其他行业都进入了数字化领域python列表有哪些基本操作,python列表功能很重要吗。其中包括游戏行业。游戏行业的蓬勃发展促使机器学习的产生,通过计算机能够进行高效率地模拟人类的学习、决策过程,不断升级提升人类的能力。游戏领域中的AI
Python 在人工智能领域的实际6大案例
Solomon_肖哥弹架构
人工智能 机器学习 python
Python作为一种功能强大且易于学习的编程语言,在人工智能(AI)领域得到了广泛的应用。从机器学习到深度学习,从自然语言处理到计算机视觉,Python提供了丰富的库和框架,使得开发者能够快速实现各种AI应用。本文将通过多个实际案例,展示Python在人工智能领域的强大功能和应用前景。二、案例一:手写数字识别(MNIST)1.背景介绍手写数字识别是机器学习领域的经典入门项目,MNIST数据集包含了
房产租赁数据分析与可视化
学习只是用户态
数据分析 信息可视化 数据挖掘
【实训目的】 通过本次实训,要求了解Python用于数据可视化的常用包:matplotlib、seaborn、pyecharts等基本使用,及各种图形的使用。【实训环境】 Jupyter环境、Pandas、NumPy、Matplotlib。【实训内容】 1.数据统计与分析方面的可视化; 2.数据分析与预测方面的可视化; 3.数据多类型的可视化。 本次实验以温州市三区房屋租赁数据(res
基于AI算法实现的情感倾向分析的方法
程序员奇奇
计算机毕设 人工智能 算法
完整代码:https://download.csdn.net/download/pythonyanyan/87430621背景目前,情感倾向分析的方法主要分为两类:一种是基于情感词典的方法;一种是基于机器学习的方法,如基于大规模语料库的机器学习。前者需要用到标注好的情感词典,英文的词典有很多,中文主要有知网整理的情感词典Hownet和台湾大学整理发布的NTUSD两个情感词典,还有哈工大信息检索研究
AI开发 - 算法基础 递归 的概念和入门(三)递归的进阶学习
minstbe
Python AI应用与观察 算法 学习 深度优先
前面我们通过2篇文章,一起了解了递归,以及使用递归来解决汉诺塔问题。今天我们在这个基础上,进一步地熟悉和学习递归。这篇学习笔记将涵盖递归的基本概念、应用、优化技巧、陷阱及与迭代的对比,并通过具体的Python代码示例和大家一起来深入理解递归的使用。一、巩固基础1.递归的概念递归,简单来说就是函数自己调用自己。听起来有点绕,但其实就像俄罗斯套娃,一层套一层,直到遇到最小的那个娃娃(基线条件)才停止。
PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
java UI linux PHP android
╔-----------------------------------╗┆
zookeeper admin 笔记
braveCS
zookeeper
Required Software
1) JDK>=1.6
2)推荐使用ensemble的ZooKeeper(至少3台),并run on separate machines
3)在Yahoo!,zk配置在特定的RHEL boxes里,2个cpu,2G内存,80G硬盘
数据和日志目录
1)数据目录里的文件是zk节点的持久化备份,包括快照和事务日
Spring配置多个连接池
easterfly
spring
项目中需要同时连接多个数据库的时候,如何才能在需要用到哪个数据库就连接哪个数据库呢?
Spring中有关于dataSource的配置:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
&nb
Mysql
171815164
mysql
例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WI
TH GRANT OPTION;
如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作
CommonDAO(公共/基础DAO)
g21121
DAO
好久没有更新博客了,最近一段时间工作比较忙,所以请见谅,无论你是爱看呢还是爱看呢还是爱看呢,总之或许对你有些帮助。
DAO(Data Access Object)是一个数据访问(顾名思义就是与数据库打交道)接口,DAO一般在业
直言有讳
永夜-极光
感悟 随笔
1.转载地址:http://blog.csdn.net/jasonblog/article/details/10813313
精华:
“直言有讳”是阿里巴巴提倡的一种观念,而我在此之前并没有很深刻的认识。为什么呢?就好比是读书时候做阅读理解,我喜欢我自己的解读,并不喜欢老师给的意思。在这里也是。我自己坚持的原则是互相尊重,我觉得阿里巴巴很多价值观其实是基本的做人
安装CentOS 7 和Win 7后,Win7 引导丢失
随便小屋
centos
一般安装双系统的顺序是先装Win7,然后在安装CentOS,这样CentOS可以引导WIN 7启动。但安装CentOS7后,却找不到Win7 的引导,稍微修改一点东西即可。
一、首先具有root 的权限。
即进入Terminal后输入命令su,然后输入密码即可
二、利用vim编辑器打开/boot/grub2/grub.cfg文件进行修改
v
Oracle备份与恢复案例
aijuans
oracle
Oracle备份与恢复案例
一. 理解什么是数据库恢复当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失。因此当发生上述故障后,希望能重构这个完整的数据库,该处理称为数据库恢复。恢复过程大致可以分为复原(Restore)与
JavaEE开源快速开发平台G4Studio v5.0发布
無為子
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V5.0版本已经正式发布。
访问G4Studio网站
http://www.g4it.org
2013-04-06 发布G4Studio_V5.0版本
功能新增
(1). 新增了调用Oracle存储过程返回游标,并将游标映射为Java List集合对象的标
Oracle显示根据高考分数模拟录取
百合不是茶
PL/SQL编程 oracle例子 模拟高考录取 学习交流
题目要求:
1,创建student表和result表
2,pl/sql对学生的成绩数据进行处理
3,处理的逻辑是根据每门专业课的最低分线和总分的最低分数线自动的将录取和落选
1,创建student表,和result表
学生信息表;
create table student(
student_id number primary key,--学生id
优秀的领导与差劲的领导
bijian1013
领导 管理 团队
责任
优秀的领导:优秀的领导总是对他所负责的项目担负起责任。如果项目不幸失败了,那么他知道该受责备的人是他自己,并且敢于承认错误。
差劲的领导:差劲的领导觉得这不是他的问题,因此他会想方设法证明是他的团队不行,或是将责任归咎于团队中他不喜欢的那几个成员身上。
努力工作
优秀的领导:团队领导应该是团队成员的榜样。至少,他应该与团队中的其他成员一样努力工作。这仅仅因为他
js函数在浏览器下的兼容
Bill_chen
jquery 浏览器 IE DWR ext
做前端开发的工程师,少不了要用FF进行测试,纯js函数在不同浏览器下,名称也可能不同。对于IE6和FF,取得下一结点的函数就不尽相同:
IE6:node.nextSibling,对于FF是不能识别的;
FF:node.nextElementSibling,对于IE是不能识别的;
兼容解决方式:var Div = node.nextSibl
【JVM四】老年代垃圾回收:吞吐量垃圾收集器(Throughput GC)
bit1129
垃圾回收
吞吐量与用户线程暂停时间
衡量垃圾回收算法优劣的指标有两个:
吞吐量越高,则算法越好
暂停时间越短,则算法越好
首先说明吞吐量和暂停时间的含义。
垃圾回收时,JVM会启动几个特定的GC线程来完成垃圾回收的任务,这些GC线程与应用的用户线程产生竞争关系,共同竞争处理器资源以及CPU的执行时间。GC线程不会对用户带来的任何价值,因此,好的GC应该占
J2EE监听器和过滤器基础
白糖_
J2EE
Servlet程序由Servlet,Filter和Listener组成,其中监听器用来监听Servlet容器上下文。
监听器通常分三类:基于Servlet上下文的ServletContex监听,基于会话的HttpSession监听和基于请求的ServletRequest监听。
ServletContex监听器
ServletContex又叫application
博弈AngularJS讲义(16) - 提供者
boyitech
js AngularJS api Angular Provider
Angular框架提供了强大的依赖注入机制,这一切都是有注入器(injector)完成. 注入器会自动实例化服务组件和符合Angular API规则的特殊对象,例如控制器,指令,过滤器动画等。
那注入器怎么知道如何去创建这些特殊的对象呢? Angular提供了5种方式让注入器创建对象,其中最基础的方式就是提供者(provider), 其余四种方式(Value, Fac
java-写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。
bylijinnan
java
public class CommonSubSequence {
/**
* 题目:写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。
* 写一个版本算法复杂度O(N^2)和一个O(N) 。
*
* O(N^2):对于a中的每个字符,遍历b中的每个字符,如果相同,则拷贝到新字符串中。
* O(
sqlserver 2000 无法验证产品密钥
Chen.H
sql windows SQL Server Microsoft
在 Service Pack 4 (SP 4), 是运行 Microsoft Windows Server 2003、 Microsoft Windows Storage Server 2003 或 Microsoft Windows 2000 服务器上您尝试安装 Microsoft SQL Server 2000 通过卷许可协议 (VLA) 媒体。 这样做, 收到以下错误信息CD KEY的 SQ
[新概念武器]气象战争
comsci
气象战争的发动者必须是拥有发射深空航天器能力的国家或者组织....
原因如下:
地球上的气候变化和大气层中的云层涡旋场有密切的关系,而维持一个在大气层某个层次
oracle 中 rollup、cube、grouping 使用详解
daizj
oracle grouping rollup cube
oracle 中 rollup、cube、grouping 使用详解 -- 使用oracle 样例表演示 转自namesliu
-- 使用oracle 的样列库,演示 rollup, cube, grouping 的用法与使用场景
--- ROLLUP , 为了理解分组的成员数量,我增加了 分组的计数 COUNT(SAL)
技术资料汇总分享
Dead_knight
技术资料汇总 分享
本人汇总的技术资料,分享出来,希望对大家有用。
http://pan.baidu.com/s/1jGr56uE
资料主要包含:
Workflow->工作流相关理论、框架(OSWorkflow、JBPM、Activiti、fireflow...)
Security->java安全相关资料(SSL、SSO、SpringSecurity、Shiro、JAAS...)
Ser
初一下学期难记忆单词背诵第一课
dcj3sjt126com
english word
could 能够
minute 分钟
Tuesday 星期二
February 二月
eighteenth 第十八
listen 听
careful 小心的,仔细的
short 短的
heavy 重的
empty 空的
certainly 当然
carry 携带;搬运
tape 磁带
basket 蓝子
bottle 瓶
juice 汁,果汁
head 头;头部
截取视图的图片, 然后分享出去
dcj3sjt126com
OS Objective-C
OS 7 has a new method that allows you to draw a view hierarchy into the current graphics context. This can be used to get an UIImage very fast.
I implemented a category method on UIView to get the vi
MySql重置密码
fanxiaolong
MySql重置密码
方法一:
在my.ini的[mysqld]字段加入:
skip-grant-tables
重启mysql服务,这时的mysql不需要密码即可登录数据库
然后进入mysql
mysql>use mysql;
mysql>更新 user set password=password('新密码') WHERE User='root';
mysq
Ehcache(03)——Ehcache中储存缓存的方式
234390216
ehcache MemoryStore DiskStore 存储 驱除策略
Ehcache中储存缓存的方式
目录
1 堆内存(MemoryStore)
1.1 指定可用内存
1.2 驱除策略
1.3 元素过期
2 &nbs
spring mvc中的@propertysource
jackyrong
spring mvc
在spring mvc中,在配置文件中的东西,可以在java代码中通过注解进行读取了:
@PropertySource 在spring 3.1中开始引入
比如有配置文件
config.properties
mongodb.url=1.2.3.4
mongodb.db=hello
则代码中
@PropertySource(&
重学单例模式
lanqiu17
单例 Singleton 模式
最近在重新学习设计模式,感觉对模式理解更加深刻。觉得有必要记下来。
第一个学的就是单例模式,单例模式估计是最好理解的模式了。它的作用就是防止外部创建实例,保证只有一个实例。
单例模式的常用实现方式有两种,就人们熟知的饱汉式与饥汉式,具体就不多说了。这里说下其他的实现方式
静态内部类方式:
package test.pattern.singleton.statics;
publ
.NET开源核心运行时,且行且珍惜
netcome
java .net 开源
背景
2014年11月12日,ASP.NET之父、微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET 扩展为可在 Linux 和 Mac OS 平台上运行。.NET核心运行时将基于MIT开源许可协议发布,其中将包括执行.NET代码所需的一切项目——CLR、JIT编译器、垃圾收集器(GC)和核心
使用oscahe缓存技术减少与数据库的频繁交互
Everyday都不同
Web 高并发 oscahe缓存
此前一直不知道缓存的具体实现,只知道是把数据存储在内存中,以便下次直接从内存中读取。对于缓存的使用也没有概念,觉得缓存技术是一个比较”神秘陌生“的领域。但最近要用到缓存技术,发现还是很有必要一探究竟的。
缓存技术使用背景:一般来说,对于web项目,如果我们要什么数据直接jdbc查库好了,但是在遇到高并发的情形下,不可能每一次都是去查数据库,因为这样在高并发的情形下显得不太合理——
Spring+Mybatis 手动控制事务
toknowme
mybatis
@Override
public boolean testDelete(String jobCode) throws Exception {
boolean flag = false;
&nbs
菜鸟级的android程序员面试时候需要掌握的知识点
xp9802
android
熟悉Android开发架构和API调用
掌握APP适应不同型号手机屏幕开发技巧
熟悉Android下的数据存储
熟练Android Debug Bridge Tool
熟练Eclipse/ADT及相关工具
熟悉Android框架原理及Activity生命周期
熟练进行Android UI布局
熟练使用SQLite数据库;
熟悉Android下网络通信机制,S