目录
一、相关原理
1.什么是爬虫
2.网络爬虫的分类
3.网络爬虫的使用范围
4.爬虫的基本架构
二、代码实现
1.环境配置
2.对南阳理工学院ACM题目网站练习题目数据的抓取和保存
3.爬取重庆交通大学新闻网站中近几年所有的信息通知的发布日期和标题全部
三、总结
参考资料
一、相关原理
1.什么是爬虫
网络爬虫英文名为Web Crawler或Web Spider。
它是一种自动浏览网页并采集所需要信息的程序。
爬虫从初始网页癿URL开始, 获取初始网页上癿URL; 在抓取网页癿过程中, 不断从当前页面上抽取新癿URL放入队列; 直到满足系统给定的停止条件。
它可以为搜索引擎从互联网中下载网页数据,是搜索引擎的重要组成部分。
互联网示意图:
每个节点 都是一个网页
每条边 都是一个超链接
网络爬虫就是从这样一个网络图中抓取感兴趣的内容
网页的抓取策略: 通常来说,网页的抓取策略可以分为以下三类: • 广度优先 • 最佳优先 • 深度优先 深度优先在很多情况下会寻致爬虫的陷入(trapped)问题,目前常见的是广度优先和最佳优先方法。
广度优先搜索 策略是指在抓取过程中,在完成当前层次得搜索后,才进行下一层次的搜索。特点 是,算法的设计和实现相对简单。在目前为覆盖尽可能多的网页,一般使用广度优先搜索方法。也有很多研究将广度优先搜索策略应用于聚焦爬虫中。其基本思想是认为与初始URL在一定链接距离内的网页具有主题相关性的概率很大。
最佳优先搜索 策略按照一定的网页分析算法,预测候选URL与目标网页的相似度,或与主题的相关性,并选取评价最好的一个或几个URL进行抓取。它叧访问经过网页分析算法预测为“有用”的网页。特点 是,最佳优先策略是一种局部最优搜索算法,在爬虫抓取路径上的很多相关网页可能被忽略。
深度优先搜索 策略从起始网页开始,选择一个URL进入,分析这个网页中的URL,选择一个再进入。如此一个链接一个链接地抓取下去,直到处理完一条路线之后再处理下一条路线。 特点 是,深度优先策略算法设计较为简单,但每深入一层,网页价值和PageRank都会相应地有所下降,相对与其他两种策略而言,此种策略很少被使用。
2.网络爬虫的分类
通常来说,网络爬虫可以分为以下几类: • 通用网络爬虫 • 增量爬虫 • 垂直爬虫 • Deep Web 爬虫
通用网络爬虫 又称全网爬虫( Scalable Web Crawler)爬行对象从一些种子URL扩充到整个Web,主要为门站点搜索引擎和大型Web服务提供商采集数据。通用网络爬虫根据预先设定的一个或若干初始种子URL开始,以此获得初始网页上的URL列表,在爬行过程中不断从URL队列中获一个的URL,进而访问并下载该页面。
增量网络爬虫 ( Incremental Web Crawler)是指对已下载网页采取增量式更新和只爬行新产生的或者已经发生变化网页的爬虫,它能够在定程度上保证所爬行的页面是尽可能新的页面。增量式爬虫有两个目标:保持本地页面集中存储的页面为最新页面和提高本地页面集中页面的质量。通用的商业搜索引擎如谷歌,百度等,本质上都属于增量爬虫。
垂直爬虫 ,又称为聚焦网络爬虫( Focused Crawler),或主题网络爬虫( Topical Crawler)。是指选择性地爬取那些与预先定义好的主题相关页面的网络爬虫。如Email地址,电子书,商品价格等。爬行策略实现的关键是评价页面内容和链接的重要性,不同的方法计算出的重要性不同,由此导致链接的访问顺序也不同。
Deep Web爬虫 是那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的,只有用户提交一些关键词才能获得的 Web 页面。Deep Web 爬虫爬行过程中最重要部分就是表单填写,包含两种类型:基于领域知识的表单填写,基亍网页结构分析的表单填写。
3.网络爬虫的使用范围
作为搜索引擎的网页搜集器,抓取整个互联网,如谷歌,百度等;
作为垂直搜索引擎,抓取特定主题信息,如视频网站,招聘网站等。
作为测试网站前端的检测工具,用来评价网站前端代码的健壮性。
作为数据分析流程中的关键一步-数据采集。
对数据分析师来说,网络爬虫是进行数据采集的重要技术工具。
Robots协议 又称机器人协议或爬虫协议, 该协议就搜索引擎抓取网站内容的范围作了约定,包括网站是否希望被搜索引擎抓取,哪些内容不允许被抓取,网络爬虫据此“自觉地”抓取或者不抓取该网页内容。自推出以来 Robots协议已成为网站保护自有敏感数据和网民隐私的国际惯例。
robots协议通过robots.txt实现
robots.txt文件应该放置在网站根目录下。
当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。
4.爬虫的基本架构
网络爬虫通常包含四个模块: • URL管理模块 • 下载模块 • 解析模块 • 存储模块 爬虫框架:
二、代码实现
1.环境配置
打开Anaconda Prompt,创建虚拟环境
conda create -n crawler python = 3.7
crawler为虚拟环境名称,python=3.7为python版本。 激活环境:
activate crawler
使用pip或conda命令下载将会用到的包:
pip install requests
pip install beautifulsoup4
pip install tqdm
pip install csv
2.对南阳理工学院ACM题目网站练习题目数据的抓取和保存
2.1 分析网址
目标地址: http://www.51mxd.cn/
查看源代码:
找到目标爬取内容:
在其中Ctrl + F 搜索该页的某一个题目(此处以最大和为例):
能够搜索到,说明此数据不是动态加载,可直接get该页面以获取。
按F12 打开开发者工具(或者右键选择检查),在元素(有的浏览器是Element)中点击箭头工具(如下图②所示),点击一个题目,可在元素中显示:
可发现,每一行信息都在一个标签中,每个小信息都在一个标签的字符串里面,在Element中Ctrl + F 搜索
一页有100个题目,一行有7个,正好是700个,因此只需要获取所有标签:
分析完成后,开始编写代码。
2.2 代码编写
import requests
from bs4 import BeautifulSoup
import csv
from tqdm import tqdm
Headers = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'
csvHeaders = [ '题号' , '难度' , '标题' , '通过率' , '通过数/总提交数' ]
subjects = [ ]
print ( '题目信息爬取中:\n' )
for pages in tqdm( range ( 1 , 11 + 1 ) ) :
r = requests. get( f'http://www.51mxd.cn/problemset.php-page= { pages} .htm' , Headers)
r. raise_for_status( )
r. encoding = 'utf-8'
soup = BeautifulSoup( r. text, 'html.parser' )
td = soup. find_all( 'td' )
subject = [ ]
for t in td:
if t. string is not None :
subject. append( t. string)
if len ( subject) == 5 :
subjects. append( subject)
subject = [ ]
with open ( 'NYOJ_Subjects.csv' , 'w' , newline= '' ) as file :
fileWriter = csv. writer( file )
fileWriter. writerow( csvHeaders)
fileWriter. writerows( subjects)
print ( '\n题目信息爬取完成!!!' )
运行中:
运行完毕:
查看生成的csv文件:
一共1126条数据,与原网页数量相同。
3.爬取重庆交通大学新闻网站中近几年所有的信息通知的发布日期和标题全部
3.1 分析网页
目标地址: http://news.cqjtu.edu.cn/xxtz.htm
第一页url为http://news.cqjtu.edu.cn/xxtz.htm,第二页为http://news.cqjtu.edu.cn/xxtz/65.htm,第三页为http://news.cqjtu.edu.cn/xxtz/64.htm…第66页为http://news.cqjtu.edu.cn/xxtz/1.htm 一共66页,由此可表示如下:
base_url = "http://news.cqjtu.edu.cn/xxtz/"
for i in range ( 1 , 67 ) :
if ( i == 1 ) :
url = 'http://news.cqjtu.edu.cn/xxtz.htm'
else :
url = 'http://news.cqjtu.edu.cn/xxtz/' + str ( 67 - i) + '.htm'
查看源代码,找到目标爬取内容:
在其中Ctrl + F 搜索该页的某一个题目(此处以交通运输新型智库研究成果征集为例):
能够搜索到,说明此数据不是动态加载,可直接get该页面以获取。
F12 打开开发者工具(或者右键选择检查),在元素(有的浏览器是Element)中点击箭头工具(如下图②所示),点击一个题目,可在元素中显示:
可发现,每一行信息都在一个
标签中,所有 都在class="left-list"的div下的下,搜索得只有一个class="left-list"的元素,该元素下只有一个
import requests
from bs4 import BeautifulSoup
import csv
from tqdm import tqdm
def get_one_page ( url) :
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}
try :
info_list_page = [ ]
resp = requests. get( url, headers= headers)
resp. encoding = resp. status_code
page_text = resp. text
soup = BeautifulSoup( page_text, 'html.parser' )
li_list = soup. select( '.left-list > ul > li' )
for li in li_list:
divs = li. select( 'div' )
date = divs[ 0 ] . string. strip( )
title = divs[ 1 ] . a. string
info = [ date, title]
info_list_page. append( info)
except Exception as e:
print ( '爬取' + url + '错误' )
print ( e)
return None
else :
resp. close( )
return info_list_page
print ( '信息爬取中:\n' )
info_list_all = [ ]
base_url = 'http://news.cqjtu.edu.cn/xxtz/'
for i in tqdm( range ( 1 , 66 + 1 ) ) :
if i == 1 :
url = 'http://news.cqjtu.edu.cn/xxtz.htm'
else :
url = base_url + str ( 67 - i) + '.htm'
info_list_page = get_one_page( url)
info_list_all+= info_list_page
with open ( 'CQJTU_news.csv' , 'w' , newline= '' , encoding= 'utf-8' ) as file :
fileWriter = csv. writer( file )
fileWriter. writerow( [ '日期' , '标题' ] )
fileWriter. writerows( info_list_all)
print ( '\n信息爬取完成!!!' )
截止到运行代码的时间,共有987条新闻。
三、总结
爬取静态网页信息时,要查看网页源代码,分析要获取信息在什么标签,然后从标签中取出信息。因为信息较多,1页是显示不完的,就会有不同的url,所以要通过循环获取所有相关url不断获取信息才能得到所有的数据。通过爬虫能更快的获取我们想要得到的信息。
参考资料
爬虫-python入门1.pdf Python爬虫练习(爬取OJ题目和学校信息通知)
你可能感兴趣的:(总结,python)
Python自动登陆、登出南京理工大学NJUST校园网程序
JimesMz
python 开发语言
本文程序针对南京理工大学NJUST和NJUST-FREE校园网开发,其他学校无法使用。文章目录开发目的使用说明参考资料开发目的今天突然想要用代码实现一下自动登陆校园网,上网搜寻了一下。知乎有一些教程,CSDN也有一些完整的代码,但是我跟随教程或者直接运行现有代码都没有能够成功登陆,且NJUST校园网付费,我想要一个“登出”功能,借助Kimi自己写了一下。本人技术不精,以实现功能为主。使用说明请确保
Python爬虫笔记一(来自MOOC) Requests库入门
小灰不停前进
# Python python pycharm 爬虫
Python爬虫笔记一通用代码框架:importrequestsdefgetHTMLText(url):try:r=requests.get(url,timeput=30)r.raise_for_status()#如果状态不是200,引发HTTPError异常r.encoding=r.apparemt_encodingreturnr.textexcept:return"产生异常"if__name_
Python调用fofa API接口并写入csv文件中
YOHO !GIRL
网络测绘 python 网络安全
前言一.功能目的二.功能调研三.编写代码1.引入库2.读取数据3.写入csv文件中总结前言上一篇我们讲述了目前较为主流的几款网络探测系统,简单介绍了页面的使用方法。链接如下,点击跳转:网络空间测绘引擎集合:Zoomeye、fofa、360、shodan、censys、鹰图然而当我们需要针对单个引擎进行二次开发时,页面就不能满足我们的需求了,这就需要参考API文档进行简单的数据处理,接下来,给大家介
SenseVoice 部署记录
安静六角
开源软件
最近试用了SenseVoice(阿里团队开源的语音转文字)效果可以,可以本地部署,有webui界面,测试了万字以上的转换效果可以。首先部署好conda环境和cuda,这个可以查看他人的文章。步骤1.创建虚拟环境:condacreate-nmainenvpython=3.102.然后安装依赖condaactivatemainenvpipinstall-rC:\Users\xx\Documents\P
Python基于深度学习的动物图片识别技术的研究与实现
Java老徐
Python 毕业设计 python 深度学习 开发语言 深度学习的动物图片识别技术 Python动物图片识别技术
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w+、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌文末获取源码联系精彩专栏推荐订阅不然下次找不到哟2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅Java项目精品实战案例《100套》Java微信小程序项目实战《100套》感兴趣的可以先收藏起来,还有大家
Python实现微信自动发送消息
热心市民小汪
python 微信 开发语言
实现需求:Python定时发送微信消息importpyautoguiaspgimportpyperclipaspcfromapscheduler.schedulers.blockingimportBlockingScheduler"""实现定时自动发送消息"""#操作间隔为1秒pg.PAUSE=1name='Hello~'msg='是时候点餐啦!!'defmain():#打开微信pg.hotkey
【论文阅读】实时全能分割模型
万里守约
论文阅读 论文阅读 图像分割 图像处理 计算机视觉
文章目录导言1、论文简介2、论文主要方法3、论文针对的问题4、论文创新点总结导言在最近的计算机视觉领域,针对实时多任务分割的需求日益增长,特别是在交互式分割、全景分割和视频实例分割等多种应用场景中。为了解决这些挑战,本文介绍了一种新方法——RMP-SAM(Real-TimeMulti-PurposeSegmentAnything),旨在实现实时的多功能分割。RMP-SAM结合了动态卷积与高效的模型
程序代码篇---Pyqt的密码界面
Ronin-Lotus
程序代码篇 上位机知识篇 pyqt 数据库 python ubuntu
文章目录前言一、代码二、代码解释2.1用户数据库定义2.2窗口初始化2.3认证逻辑2.5角色处理2.6错误处理优化2.7功能扩展说明2.7.1用户类型区分管理员普通用户其他用户2.7.2安全增强建议三、运行效果四、运行命令五、界面改进建议5.1密码显示5.2用户头像显示5.3输入框动画效果5.4加载进度显示5.5键盘快捷键前言本文简单介绍了在Ubuntu系统上使用Python的Pyqt创建密码登录
深度学习 | pytorch + torchvision + python 版本对应及环境安装
zfgfdgbhs
深度学习 python pytorch
目录一、版本对应二、安装命令(pip)1.版本(1)v2.5.1~v2.0.0(2)v1.13.1~v1.11.0(3)v1.10.1~v1.7.02.安装全过程(1)选择版本(2)安装结果参考文章一、版本对应下表来自pytorch的github官方文档:pytorch/vision:Datasets,TransformsandModelsspecifictoComputerVisionpytor
Python读取.nc文件的方法与技术详解
傻啦嘿哟
关于python那些事儿 人工智能 前端 服务器
目录一、引言二、使用netCDF4库读取.nc文件安装netCDF4库导入netCDF4库打开.nc文件获取变量读取变量数据案例与代码三、使用xarray库读取.nc文件安装xarray库导入xarray库打开.nc文件访问变量数据案例与代码四、性能与优化分块读取使用Dask进行并行计算减少不必要的变量加载五、其他注意事项文件路径变量命名数据类型文件关闭六、总结一、引言.nc文件,即NetCDF(
Python画词云图,Python画圆形词云图,API详解
请一直在路上
python 开发语言
在Python中,词云图的常用库是wordcloud。以下是核心API参数的详细讲解,以及一个完整的使用示例。一、参数类型默认值说明参数类型默认值说明widthint400词云图的宽度(像素)heightint200词云图的高度(像素)background_colorstr“black”背景颜色,可以是颜色名称(如“white”)或十六进制值(如“#FFFFFF”)colormapstr/matp
23、nc文件快速切片与索引
爱转呼啦圈的小兔子
气象数据处理与可视化 python 气象 气象可视化 气候变化
1前言在气象、海洋学和环境科学等领域,.nc(NetCDF)格式文件是存储和共享多维科学数据的常用格式。这些数据文件通常包含大量的经度、纬度、时间和垂直层次数据。在处理这些数据时,研究人员常常需要根据特定的地理和时间范围提取数据,以便进行深入分析。为此,我们开发了一个名为nc_slice的Python函数,用于从一个或多个.nc格式文件中高效地筛选和提取数据。nc_slice函数提供了一种简洁而灵
【最新】TensorFlow、cuDNN、CUDA三者之间的最新版本对应及下载地址
江上_酒
开发环境及工具配置 TensorFlow CUDA cuDNN
TensorFlow、cuDNN、CUDA对应关系官网查询地址CUDA下载地址cuDNN下载地址VersionPythonversionCompilerBuildtoolscuDNNCUDAtensorflow_gpu-2.9.03.7-3.10MSVC2019Bazel5.0.08.111.2tensorflow_gpu-2.8.03.7-3.10MSVC2019Bazel4.2.18.111.
Python读取nc文件的几种方式
请一直在路上
python
在Python中,有多种方式可以读取NetCDF(.nc)文件。常见的方法包括使用以下库:1.netCDF4这是最常用的库之一,提供了直接读取、写入和处理NetCDF文件的功能。它支持版本3和版本4的NetCDF文件格式。安装:pipinstallnetCDF4用法:importnetCDF4asnc#打开文件dataset=nc.Dataset('example.nc')#查看文件的维度prin
UV - Python 包管理
丽英y
Python uv python 开发语言
文章目录创建uv项目已有项目已有uv项目创建uv项目#创建项目uvinitm3#创建环境cdm3uvvenv--python3.11#激活环境source.venv/bin/activate#添加库uvaddflask如果创建项目后,给库取别的名字,add的时候,会自动创建.venv文件夹>uvvenv--python3.12e312[0]UsingCPython3.12.8interpreter
漫谈JVM
weixin_34111790
运维 java python
2019独角兽企业重金招聘Python工程师标准>>>背景介绍创建了一个技术类公众号:一起源码分析,里面会分享最新的开源代码、源码解读、开发技巧等,欢迎大家关注。JVM已经是Java开发的必备技能了,JVM相当于Java的操作系统。JVM,javavirtualmachine,即Java虚拟机,是运行javaclass文件的程序。Java代码经过Java编译器编译,会编译成class文件,一种平台
开发语言漫谈-脚本语言
大道不孤,众行致远
技术杂谈 开发语言
前面讲的都称之为编程语言,就是做系统用的。还有一大类称之为脚本语言的语言,这类语言数量极多,大部分程序员用不上,也不关心,这是系统维护人员专用的邻域。这个定义其实也很不准确,不必较真。更准确的来讲,能直接运行的文本都可以称之为脚本语言,按这个标准,python也是。但是python同样用于做系统。我们今天讲的脚本语言纯粹用于系统维护邻域。我们重点将编程语言,对这些脚本语言就打包一起介绍了bash:
Python环境管理新利器:UV工具详解
云水木石
python uv 开发语言
Python包和环境管理最好的工具无疑是Anaconda,但我在之前的一篇文章《注意,使用这款Python软件可能会带来麻烦》写过,个人使用完全没有问题。如果在公司内使用,就需要格外小心,可能会招来官司。在我们公司,Anaconda(包括Miniconda)就是禁止安装的软件之一。但是在工作中,确实又存在需要切换不同Python版本的需求,比如编译Chromium需要Python3.8以上的版本,
IT项目管理第二章作业
是努力站桩的奶酪呀~
java python
在管理具体项目时,项目管理团队应该根据具体需要裁剪()。A.组织过程资产B.组织结构C.组织文化D.事业环境因素在以下哪种组织中,项目经理能对项目资源进行最有力的控制?A.项目型组织B.项目指挥部组织C.强矩阵组织D.平衡式矩阵组织项目的技术工作已经全部完成,产品也通过了最终验收,接着应该开展以下哪一项工作?A.写项目总结B.遣散团队成员C.更新问题日志D.举办庆功宴在下列哪一种组织结构中,项目成
Python新手入门 python流程控制基础1——条件语句if~~else;if~elif~else;
不爱纸片人
python
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、条件语句是什么?二、语句使用方法1.if.....2.if.......elif......3.if.......elif......else.......总结一、条件语句是什么?在Python中,条件语句用于根据不同的条件执行不同的代码块二、语句使用方法一共有三种if…if’…elif…if…elif…else…1.if
一文讲清楚深度学习和机器学习
平凡而伟大.
机器学习 人工智能 深度学习 机器学习 人工智能
目录1.定义机器学习(MachineLearning,ML)深度学习(DeepLearning,DL)2.工作原理机器学习深度学习3.应用场景机器学习深度学习4.主要区别5.为什么选择深度学习?6.总结深度学习和机器学习是人工智能(AI)领域中两个密切相关但有所区别的概念。要清楚地解释它们之间的关系,我们可以从定义、工作原理、应用场景以及两者的主要区别等方面进行探讨。1.定义机器学习(Machin
使用 NetworkX 进行图论分析与可视化
aiweker
跟我学python 图论 python
使用NetworkX进行图论分析与可视化NetworkX是一个用于创建、操作和研究复杂网络的Python库。它提供了丰富的图论算法和数据结构,适用于各种网络分析任务。本文将分点介绍NetworkX的主要功能,并通过代码示例进行详细说明。1.安装NetworkX在开始使用NetworkX之前,首先需要安装它。可以通过pip进行安装:pipinstallnetworkx2.创建图NetworkX支持多
C语言_数据结构总结8:链式队列
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧
C语言—数据结构 数据结构 c语言 开发语言 visualstudio visual studio 链表
纯C语言实现,不涉及C++链队列队列的链式表示称为链队列,它实际上是一个同时具有队头指针和队尾指针的单链表,头指针指向对头结点,尾指针指向队尾结点。头结点是链式队列中的特殊结点,通常不存储实际的队列元素数据,其主要作用是方便对队列的操作,例如在进行入队、出队操作时,可以统一操作逻辑,无需特殊处理队列为空的情况。它作为队列的头部标识,其next指针指向队列中的第一个真正存储数据的结点。尾结点(注意区
C语言_数据结构总结10:二叉树的递归/非递归遍历
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧
C语言—数据结构 数据结构 算法 链表 visualstudio visual studio c语言 b树
纯C语言实现,不涉及C++遍历是二叉树各种操作的基础,例如对于一棵给定二叉树求结点的双亲/求结点的孩子/求二叉树的高度/求叶结点个数/判断两棵二叉树是否相等……所有这些操作都是在二叉树遍历的过程中进行的。因此必须掌握二叉树的各种遍历过程,并能灵活用以解决各种问题。常见的遍历次序有:先序,中序,后序->其中“序”是指根结点何时被访问。先序:根结点->左子树->右子树中序:左子树->根结点->右子树后
使用 UV 管理 Python 项目 | python小知识
aiweker
跟我学python uv python 人工智能
使用UV管理Python项目|python小知识1.引言在Python开发中,项目管理工具是必不可少的。常见的工具如pip、pipenv、poetry等,它们各有优缺点。近年来,uv作为一个新兴的Python项目管理工具,逐渐受到开发者的关注。uv旨在提供更快的依赖解析和安装速度,同时保持与现有工具的兼容性。本文将详细介绍uv的功能和应用场景,并通过代码示例展示其使用方法。最后,我们将对比uv与其
Python 常用内建模块-HTMLParser
赔罪
Python 系统学习 python 开发语言
目录HTMLParser小结练习HTMLParser如果我们要编写一个搜索引擎,第一步是用爬虫把目标网站的页面抓下来,第二步就是解析该HTML页面,看看里面的内容到底是新闻、图片还是视频。假设第一步已经完成了,第二步应该如何解析HTML呢?HTML本质上是XML的子集,但是HTML的语法没有XML那么严格,所以不能用标准的DOM或SAX来解析HTML。好在Python提供了HTMLParser来非
Python 常用内建模块-venv
赔罪
Python 系统学习 python 开发语言
目录venv小结venv在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.x。所有第三方的包都会被pip安装到Python3的site-packages目录下。如果我们要同时开发多个应用程序,那这些应用程序都会共用一个Python,就是安装在系统的Python3。如果应用A需要jinja2.7,而应用B需要jinja2.6怎么办?这种情况下,每个应用可能需要各自拥有一套“
python Qt
Solkatt's
最近帮朋友做了一个将文本文件按条件导出到excel里面的小程序。使用了PyQT,发现Python真是一门强大的脚本语言,开发效率极高。首先需要引用fromPyQt4importQtGui,uic,QtCore很多控件像QPushButton是从QtGui的空间中得来的,下面def__init__(self,parent=None)中定义了界面的设计及与控件相互联系的方法。classAddressB
pyspark学习rdd处理数据方法——学习记录
亭午
学习
python黑马程序员"""文件,按JSON字符串存储1.城市按销售额排名2.全部城市有哪些商品类别在售卖3.上海市有哪些商品类别在售卖"""frompysparkimportSparkConf,SparkContextimportosimportjsonos.environ['PYSPARK_PYTHON']=r"D:\anaconda\envs\py10\python.exe"#创建Spark
第十八章:模板的多态力量_《C++ Templates》notes
郭涤生
c/c++ c++ 开发语言 笔记
模板的多态力量一、动态多态vs静态多态二、奇异递归模板模式(CRTP)三、策略模式(编译期策略选择)关键要点总结第一部分:多选题(10题)第二部分:设计题(5题)答案与详解多选题答案:设计题参考答案1.编译期策略选择器2.类型安全访问者模式3.概念约束数学库4.编译期工厂模式5.静态多态容器测试说明一、动态多态vs静态多态核心概念:动态多态:基于虚函数和继承体系,函数调用在运行时决定(通过虚函数表
jQuery 键盘事件keydown ,keypress ,keyup介绍
107x
js jquery keydown keypress keyup
本文章总结了下些关于jQuery 键盘事件keydown ,keypress ,keyup介绍,有需要了解的朋友可参考。
一、首先需要知道的是: 1、keydown() keydown事件会在键盘按下时触发. 2、keyup() 代码如下 复制代码
$('input').keyup(funciton(){  
AngularJS中的Promise
bijian1013
JavaScript AngularJS Promise
一.Promise
Promise是一个接口,它用来处理的对象具有这样的特点:在未来某一时刻(主要是异步调用)会从服务端返回或者被填充属性。其核心是,promise是一个带有then()函数的对象。
为了展示它的优点,下面来看一个例子,其中需要获取用户当前的配置文件:
var cu
c++ 用数组实现栈类
CrazyMizzz
数据结构 C++
#include<iostream>
#include<cassert>
using namespace std;
template<class T, int SIZE = 50>
class Stack{
private:
T list[SIZE];//数组存放栈的元素
int top;//栈顶位置
public:
Stack(
java和c语言的雷同
麦田的设计者
java 递归 scaner
软件启动时的初始化代码,加载用户信息2015年5月27号
从头学java二
1、语言的三种基本结构:顺序、选择、循环。废话不多说,需要指出一下几点:
a、return语句的功能除了作为函数返回值以外,还起到结束本函数的功能,return后的语句
不会再继续执行。
b、for循环相比于whi
LINUX环境并发服务器的三种实现模型
被触发
linux
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器。按处理方式来分有循环服务器和并发服务器。
1 循环服务器与并发服务器模型
在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求。
目前最常用的服务器模型有:
·循环服务器:服务器在同一时刻只能响应一个客户端的请求
·并发服务器:服
Oracle数据库查询指令
肆无忌惮_
oracle数据库
20140920
单表查询
-- 查询************************************************************************************************************
-- 使用scott用户登录
-- 查看emp表
desc emp
ext右下角浮动窗口
知了ing
JavaScript ext
第一种
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/
浅谈REDIS数据库的键值设计
矮蛋蛋
redis
http://www.cnblogs.com/aidandan/
原文地址:http://www.hoterran.info/redis_kv_design
丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解使用场景。
maven编译可执行jar包
alleni123
maven
http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven
<build>
<plugins>
<plugin>
<artifactId>maven-asse
人力资源在现代企业中的作用
百合不是茶
HR 企业管理
//人力资源在在企业中的作用人力资源为什么会存在,人力资源究竟是干什么的 人力资源管理是对管理模式一次大的创新,人力资源兴起的原因有以下点: 工业时代的国际化竞争,现代市场的风险管控等等。所以人力资源 在现代经济竞争中的优势明显的存在,人力资源在集团类公司中存在着 明显的优势(鸿海集团),有一次笔者亲自去体验过红海集团的招聘,只 知道人力资源是管理企业招聘的 当时我被招聘上了,当时给我们培训 的人
Linux自启动设置详解
bijian1013
linux
linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。
阅读之前建议先看一下附图。
本文中假设inittab中设置的init tree为:
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc
Spring Aop Schema实现
bijian1013
java spring AOP
本例使用的是Spring2.5
1.Aop配置文件spring-aop.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmln
【Gson七】Gson预定义类型适配器
bit1129
gson
Gson提供了丰富的预定义类型适配器,在对象和JSON串之间进行序列化和反序列化时,指定对象和字符串之间的转换方式,
DateTypeAdapter
public final class DateTypeAdapter extends TypeAdapter<Date> {
public static final TypeAdapterFacto
【Spark八十八】Spark Streaming累加器操作(updateStateByKey)
bit1129
update
在实时计算的实际应用中,有时除了需要关心一个时间间隔内的数据,有时还可能会对整个实时计算的所有时间间隔内产生的相关数据进行统计。
比如: 对Nginx的access.log实时监控请求404时,有时除了需要统计某个时间间隔内出现的次数,有时还需要统计一整天出现了多少次404,也就是说404监控横跨多个时间间隔。
Spark Streaming的解决方案是累加器,工作原理是,定义
linux系统下通过shell脚本快速找到哪个进程在写文件
ronin47
一个文件正在被进程写 我想查看这个进程 文件一直在增大 找不到谁在写 使用lsof也没找到
这个问题挺有普遍性的,解决方法应该很多,这里我给大家提个比较直观的方法。
linux下每个文件都会在某个块设备上存放,当然也都有相应的inode, 那么透过vfs.write我们就可以知道谁在不停的写入特定的设备上的inode。
幸运的是systemtap的安装包里带了inodewatch.stp,位
java-两种方法求第一个最长的可重复子串
bylijinnan
java 算法
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class MaxPrefix {
public static void main(String[] args) {
String str="abbdabcdabcx";
Netty源码学习-ServerBootstrap启动及事件处理过程
bylijinnan
java netty
Netty是采用了Reactor模式的多线程版本,建议先看下面这篇文章了解一下Reactor模式:
http://bylijinnan.iteye.com/blog/1992325
Netty的启动及事件处理的流程,基本上是按照上面这篇文章来走的
文章里面提到的操作,每一步都能在Netty里面找到对应的代码
其中Reactor里面的Acceptor就对应Netty的ServerBo
servelt filter listener 的生命周期
cngolon
filter listener servelt 生命周期
1. servlet 当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后调用它的service方法处理请求。当第二次请求这个servlet资源时,servlet容器就不在创建实例,而是直接调用它的service方法处理请求,也就是说
jmpopups获取input元素值
ctrain
JavaScript
jmpopups 获取弹出层form表单
首先,我有一个div,里面包含了一个表单,默认是隐藏的,使用jmpopups时,会弹出这个隐藏的div,其实jmpopups是将我们的代码生成一份拷贝。
当我直接获取这个form表单中的文本框时,使用方法:$('#form input[name=test1]').val();这样是获取不到的。
我们必须到jmpopups生成的代码中去查找这个值,$(
vi查找替换命令详解
daizj
linux 正则表达式 替换 查找 vim
一、查找
查找命令
/pattern<Enter> :向下查找pattern匹配字符串
?pattern<Enter>:向上查找pattern匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找
字符串匹配
pattern是需要匹配的字符串,例如:
1: /abc<En
对网站中的js,css文件进行打包
dcj3sjt126com
PHP 打包
一,为什么要用smarty进行打包
apache中也有给js,css这样的静态文件进行打包压缩的模块,但是本文所说的不是以这种方式进行的打包,而是和smarty结合的方式来把网站中的js,css文件进行打包。
为什么要进行打包呢,主要目的是为了合理的管理自己的代码 。现在有好多网站,你查看一下网站的源码的话,你会发现网站的头部有大量的JS文件和CSS文件,网站的尾部也有可能有大量的J
php Yii: 出现undefined offset 或者 undefined index解决方案
dcj3sjt126com
undefined
在开发Yii 时,在程序中定义了如下方式:
if($this->menuoption[2] === 'test'),那么在运行程序时会报:undefined offset:2,这样的错误主要是由于php.ini 里的错误等级太高了,在windows下错误等级
linux 文件格式(1) sed工具
eksliang
linux linux sed工具 sed工具 linux sed详解
转载请出自出处:
http://eksliang.iteye.com/blog/2106082
简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾
Android应用程序获取系统权限
gqdy365
android
引用
如何使Android应用程序获取系统权限
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1. 在应用程序的AndroidManifest.xml中的manifest节点
HoverTree开发日志之验证码
hvt
.net C# asp.net hovertree webform
HoverTree是一个ASP.NET的开源CMS,目前包含文章系统,图库和留言板功能。代码完全开放,文章内容页生成了静态的HTM页面,留言板提供留言审核功能,文章可以发布HTML源代码,图片上传同时生成高品质缩略图。推出之后得到许多网友的支持,再此表示感谢!留言板不断收到许多有益留言,但同时也有不少广告,因此决定在提交留言页面增加验证码功能。ASP.NET验证码在网上找,如果不是很多,就是特别多
JSON API:用 JSON 构建 API 的标准指南中文版
justjavac
json
译文地址:https://github.com/justjavac/json-api-zh_CN
如果你和你的团队曾经争论过使用什么方式构建合理 JSON 响应格式, 那么 JSON API 就是你的 anti-bikeshedding 武器。
通过遵循共同的约定,可以提高开发效率,利用更普遍的工具,可以是你更加专注于开发重点:你的程序。
基于 JSON API 的客户端还能够充分利用缓存,
数据结构随记_2
lx.asymmetric
数据结构 笔记
第三章 栈与队列
一.简答题
1. 在一个循环队列中,队首指针指向队首元素的 前一个 位置。
2.在具有n个单元的循环队列中,队满时共有 n-1 个元素。
3. 向栈中压入元素的操作是先 移动栈顶指针&n
Linux下的监控工具dstat
网络接口
linux
1) 工具说明dstat是一个用来替换 vmstat,iostat netstat,nfsstat和ifstat这些命令的工具, 是一个全能系统信息统计工具. 与sysstat相比, dstat拥有一个彩色的界面, 在手动观察性能状况时, 数据比较显眼容易观察; 而且dstat支持即时刷新, 譬如输入dstat 3, 即每三秒收集一次, 但最新的数据都会每秒刷新显示. 和sysstat相同的是,
C 语言初级入门--二维数组和指针
1140566087
二维数组 c/c++ 指针
/*
二维数组的定义和二维数组元素的引用
二维数组的定义:
当数组中的每个元素带有两个下标时,称这样的数组为二维数组;
(逻辑上把数组看成一个具有行和列的表格或一个矩阵);
语法:
类型名 数组名[常量表达式1][常量表达式2]
二维数组的引用:
引用二维数组元素时必须带有两个下标,引用形式如下:
例如:
int a[3][4]; 引用:
10点睛Spring4.1-Application Event
wiselyman
application
10.1 Application Event
Spring使用Application Event给bean之间的消息通讯提供了手段
应按照如下部分实现bean之间的消息通讯
继承ApplicationEvent类实现自己的事件
实现继承ApplicationListener接口实现监听事件
使用ApplicationContext发布消息