.*?(.*?) ', html)[0]
return areahtml.decode('utf-8')
if __name__ == '__main__':
html = urllib.request.urlopen('http://example.webscraping.com/view/United-Kingdom-239').read()
print(scrape(html))
获得结果244,820 square kilometres
。 正则表达式为我们提供了抓取数据的快捷方式,但是该方法过去脆弱,容易在网页更新后出现问题。
Beautiful Soup
Beautiful Soup是非常流行的Python模块。该模块可以解析网页,并提供定位内容的便捷接口。如果你还没有安装模块,可以使用下面的命令安装其最新版本:pip install beautifulsoup4
使用Beautiful Soup的第一步是将已下载的HTML内容解析为soup文档。由于大多数网页都不具备良好的HTML格式,因此Beautiful Soup需要对其实际格式进行确定。例如,在下面这个简单网页的列表中,存在属性值两侧引号缺失和标签未闭合的问题。
如果Population列表项被解析为Area列表项的子元素,而不是并列的两个列表项的话,我们在抓取时就会得到错误的结果。下面让我们看一下Beautiful Soup 是如何处理的。
>>> from bs4 import BeautifulSoup
>>> broken html = ’ ’
>>> # parse the HTML
>>> soup = BeautifulSoup(broken_html , ’ html.parser’)
>>> fixed html = soup.prettify( )
>>> print(fixed_html)
从上面的执行结果中可以看出,Beautiful Soup能够正确解析缺失的引导关闭合标签,此外还添加了
和
标签使其成为完整的HTML文档。现在可以使用find()和find_all()方法来定位我们需要的元素了。
>>> ul = soup.find('ul', sttrs=('class', 'country'))
>>> ul.find('li') # returns just the first match
Area
>>> ul.find_all('li') # returns all matches
[Area , Population ]
下面是使用该方法抽取示例国家面积数据的完整代码
import urllib.request
from bs4 import BeautifulSoup
def scrape(html):
soup = BeautifulSoup(html, "lxml")
tr = soup.find(attrs={'id': 'places_area__row'}) # 找到区域行
# 'class'是一个特殊的Python属性,所以使用‘class_’替换
td = tr.find(attrs={'class':'w2p_fw'}) # 找到区域标签
area = td.text # 从该标签提取区域内容
return area
if __name__ == '__main__':
html = urllib.request.urlopen('http://example.webscraping.com/view/United-Kingdom-239').read()
print(scrape(html))
输出为244,820 square kilometres
Lxml
Lxml是基于libxml2这一XML解析库的Python封装。该模块使用C语言编写,解析速度比Beautiful Soup更快,不过安装过程也更复杂。最新的安装说明可以参考http://Lxml.de/installation.html。 和Beautiful Soup一样,使用lxml模块的第一步也是将有可能不合法的HTML解析为统一格式。下面是使用该模块解析同一个不完整的HTML的例子。
>>> import lxml.html
>>> broken html = ’’
>>> tree = lxml.html.fromstring(broken_ html) #parse the HTML
>>> fixed html = lxml.html.tostring( tree , pretty_print=True )
>>> print(fixed_html)
同样地,lxml也可以正确解析属性两侧缺失的引号,并闭合标签,不过该模块没有额外添加和
标签。 解析完输入内容之后,进入选择元素的步骤,此时lxml有几种不同的方法,比如XPath选择器和类似Beautiful Soup的find()方法。不过,在本例和后续示例中,我们将会使用CSS选择器,因为它更加简洁,并且能够在解析动态内容时得以复用。此外,一些拥有jQuery选择器相关经验的读者也会对其更加熟悉。 下面是使用lxml的CSS选择器抽取面积数据的示例代码。
import urllib.request
import lxml.html
def scrape(html):
html = html.decode('utf-8')
tree = lxml.html.fromstring(html)
td = tree.cssselect('tr#places_area__row > td.w2p_fw')[0]
area = td.text_content()
return area
if __name__ == '__main__':
html = urllib.request.urlopen('http://example.webscraping.com/view/United-Kingdom-239').read()
print(scrape(html))
CSS选择器首选会找到ID为places_area__row的表格行元素,然后选择class为w2p_fw的表格数据子标签。 需要注意的是,lxml在内部实现中,实际上是将CSS选择器转换为等价的XPath选择器。
如果你的爬虫瓶颈时下载网页,而不是抽取数据的话,那么使用较慢的方法(如Beautiful Soup)也不成问题。如果只需抓取少量数据,并且想要避免依赖的话,那么正则表达式可能更加适合。不过,通常情况下,lxml是抓取数据的最好选择,这是因为该方法即快速又健壮,而正则表达式和Beautiful Soup只在默写特定场景下有用。
为链接爬虫添加抓取回调
我们将抓取的国家数据集成到链接爬虫当中,要想复用这段爬虫代码抓取其他网站,我们需要添加一个callback参数处理抓取行为。callback是一个函数,在发生某个特定事件之后调用该函数(在本例中,会在网页下载完成后调用)。该抓取callback函数包含url和html两个参数,并且可以返回一个待爬取的URL列表。下面是添加回调之后的链接爬虫。
def link_crawler(seed_url, link_regex=None, delay=5, max_depth=-1,
max_urls=-1, headers=None, user_agent='wswp', proxy=None,
num_retries=1, scrape_callback=None):
"""从指定的种子网址按照link_regex匹配的链接进行抓取"""
crawal_queue = queue.deque([seed_url]) # 仍然需要抓取的网址队列
seen = {seed_url: 0} # 已经看到的网址以及深度
num_urls = 0 # 跟踪已下载了多少个URL
rp = get_robots(seed_url)
throttle = Throttle(delay)
headers = headers or {}
if user_agent:
headers['User-agent'] = user_agent
while crawal_queue:
url = crawal_queue.pop()
depth = seen[url]
# 检查网址传递的robots.txt限制
if rp.can_fetch(user_agent, url):
throttle.wait(url)
html = download(url, headers, proxy=proxy, num_retries=num_retries)
links = []
if scrape_callback:
links.extend(scrape_callback(url, html) or [])
if depth != max_depth:
# 仍然可以进一步爬行
if link_regex:
# 过滤符合我们的正则表达式的链接
links.extend(link for link in get_links(html) if re.match(link_regex, link))
for link in links:
link = normalize(seed_url, link)
# 检查是否已经抓取这个链接
if link not in seen:
seen[link] = depth + 1
# 检查链接在同一域内
if same_domain(seed_url, link):
# 成功! 添加这个新链接到队列里
crawal_queue.append(link)
# 检查是否已达到下载的最大值
num_urls += 1
if num_urls == max_urls:
break
else:
print("Blocked by robots.txt:", url) # 链接已被robots.txt封锁
在上面的代码片段中,我们增加了抓取callback函数代码。 现在,我们只需要传入的scrap_callback函数定制化处理,就能使用该爬虫抓取其他网站了。下面对lxml抓取示例的代码进行了修改,使其能够在callback函数中使用,并且我们将得到的结果保存到CSV表格中。
import csv
import re
import urllib.parse
import lxml.html
from link_crawler import link_crawler
class ScrapeCallback:
def __init__(self):
self.writer = csv.writer(open('countries.csv', 'w'))
self.fields = ('area', 'population', 'iso', 'country',
'capital', 'continent', 'tld', 'currency_code',
'currency_name', 'phone', 'postal_code_format',
'postal_code_regex', 'languages', 'neighbours')
self.writer.writerow(self.fields)
def __call__(self, url, html):
if re.search('/view/', url):
tree = lxml.html.fromstring(html)
row = []
for field in self.fields:
row.append(tree.cssselect('table > tr#places_{}__row > td.w2p_fw'.format(field))[0].text_content())
self.writer.writerow(row)
if __name__ == '__main__':
link_crawler('http://example.webscraping.com/', '/(index|view)', scrape_callback=ScrapeCallback())
为了实现该callback,我们使用了会掉泪,而不在是回调函数,以便保持csv中writer属性的状态。csv的writer属性在构造方法中进行了实例化处理,然后在__call__
方法中执行了多次写操作。请注意:__call__
是一个特殊方法,在对象作为函数被调用时会调用该方法,这也是链接爬虫中的cache_callback
的调用方法。也即是说,scrape_callback(url, html)
和调用scrape_callback.__call__(url html)
是等价的。 现在,当我们运行这个使用了callback的爬虫时,程序就会将结果写入一个CSV文件中,我们可以使用类似Excel或者LibreOffice的应用查看该文件。
你可能感兴趣的:(Python学习数据抓取)
python学习笔记(汇总)
朕的剑还未配妥
python学习笔记整理 python 学习 开发语言
文章目录一.基础知识二.python中的数据类型三.运算符四.程序的控制结构五.列表六.字典七.元组八.集合九.字符串十.函数十一.解决bug一.基础知识print函数字符串要加引号,数字可不加引号,如print(123.4)print('小谢')print("洛天依")还可输入表达式,如print(1+3)如果使用三引号,print打印的内容可不在同一行print("line1line2line
Python学习——Django模型——表关系
关系型数据库最强大之处在于“关系”,表和表之间是有关联的,表之间的关系有一对一,一对多,多对多。1.1一对一学生和档案之间属于一对一,学生表和档案表就是一对一关系,学生表是主表,档案表是从表。从表中有一个外键和学生表关联,并且要求外键取值唯一,对应关键字为:OneToOneField#创建模型classStudent(models.Model):sno=models.CharField(max_l
python学习(六)字典
August________
字典学习如何访问和修改字典中的信息学习如何遍历字典中的数据学习储存字典的列表,存储列表中的字典和存储字典中的字典。理解字典,可以更准确的为各种真实物体建模。一个简单的字典alien_0={'color':'green','points':5}print(alien_0['color'])print(alien_0['points'])green5使用字典字典就是一系列的键-值对,每个键都有一个值相
Python游戏数据抓取全攻略:从基础到高级的爬虫实战
Python爬虫项目
python 游戏 爬虫 开发语言 数据分析 c++
引言:游戏数据抓取的价值与挑战在当今数字游戏产业蓬勃发展的时代,游戏数据抓取已成为游戏分析、市场研究和玩家行为研究的重要工具。通过抓取游戏数据,我们可以:分析游戏市场趋势和玩家偏好监控游戏内经济系统和物品价格波动构建游戏数据库和Wiki类网站开发游戏辅助工具和数据分析平台然而,游戏数据抓取也面临着诸多挑战:反爬虫机制的日益复杂化动态加载内容的普遍应用API接口的频繁变更法律和道德边界的考量本文将带
数据挖掘实战-基于随机森林算法的空气质量污染预测模型
艾派森
数据挖掘实战合集 信息可视化 人工智能 python 数据挖掘 随机森林
♂️个人主页:@艾派森的个人主页✍作者简介:Python学习者希望大家多多支持,我们一起进步!如果文章对你有帮助的话,欢迎评论点赞收藏加关注+目录1.项目背景2.数据集介绍3.技术工具4.实验过程
Python学习之旅:进阶阶段(六)数据结构-有序字典(collections.OrderedDict)
在Python编程的进阶学习中,数据结构的选择和运用十分关键。今天,我们要探讨的是有序字典collections.OrderedDict,它是Python标准库collections模块中的一个特殊数据类型,能够让我们在处理字典时保持元素的插入顺序,这在很多场景下都有着独特的优势。下面,让我们一起深入了解有序字典。一、什么是有序字典 在Python中,普通字典dict是一种无序的数据结构,它
python学习DAY12打卡
星仔编程
python学习打卡 学习
启发式算法超参数调整专题2三种启发式算法的示例代码:遗传算法、粒子群算法、退火算法学习优化算法的思路(避免浪费无效时间)今天以自由探索的思路为主,尝试检索资料、视频、文档,用尽可能简短但是清晰的语言看是否能说清楚这三种算法每种算法的实现逻辑,帮助更深入的理解。启发式算法(HeuristicAlgorithm)是一种“经验法则”式的求解方法,用近似、快速、可接受的策略,在合理时间内找到问题的“足够好
python学习DAY4打卡
星仔编程
python学习打卡 学习
DAY4缺失值的处理题目:初识pandas库与缺失数据的补全pandas是Python里一个强大且广泛使用的开源数据分析与处理库按照示例代码的要求,去尝试补全信贷数据集中的数值型缺失值打开数据(csv文件、excel文件)查看数据(尺寸信息、查看列名等方法)查看空值众数、中位数填补空值利用循环补全所有列的空值完成后在py文件中独立完成一遍,并且利用debugger工具来查看属性(不借助函数显式查看
python学习DAY1打卡
星仔编程
python
DAY1变量与格式化字符串今天学习的知识点:1.变量的命名和定义2.学习Trae字节编译器的使用,很方便3.debug工具的使用(pycharm和vscode)4.print函数题目一:变量的认识题目:定义三个变量a,b,c,并分别将整数1,2,3赋值给它们。然后,使用print()函数将每个变量的值单独打印出来,每个值占一行。输入:无输出:123答案:a=1b=2c=3print(a)print
python学习Day5打卡
WYH49
学习
day5离散特征的独热编码先按照示例代码过一遍,然后完成下列题目现在在py文件中一次性处理data数据中所有的连续变量和离散变量1.读取data数据importpandasaspddata=pd.read_csv(r"C:\Users\LENOVO\Desktop\daim\data.csv")fordesribe_featuresindata.columns:ifdata[desribe_fea
python学习DAY22打卡
星仔编程
python学习打卡 学习
作业:自行学习参考如何使用kaggle平台,写下使用注意点,并对下述比赛提交代码kaggle泰坦尼克号人员生还预测importwarningswarnings.filterwarnings("ignore")#忽略警告信息#数据处理清洗包importpandasaspdimportnumpyasnpimportrandomasrnd#可视化包importseabornassnsimportmatp
用Python爬虫玩转数据可视化(实战向)
文章目录一、先来点有意思的!二、开整!数据抓取部分2.1选个软柿子捏2.2数据提取黑科技三、数据清洗骚操作3.1温度数据大改造3.2风力等级提取四、可视化ShowTime!4.1折线图基础款4.2进阶版热力图4.3动态图表黑科技五、避坑指南(血泪经验)六、还能玩得更花吗?七、完整代码哪里找?八、说点掏心窝的话一、先来点有意思的!你相不相信只需要30行代码,就能把网页上的原始数据变成酷炫的图表?今天
【SSL证书校验问题】通过 monkey-patch 关掉 SSL 证书校验
shengchao0920
ssl 网络协议 网络 python 爬虫
标签:Python、SSL、monkey-patch、httpx、aiohttp、requests、OpenAI1为什么会有这篇文章?在本地调试OpenAI代理、数据抓取、私有服务、访问外网时,经常会碰到如下报错:SSLCertVerificationError:[SSL:CERTIFICATE_VERIFY_FAILED]certificateverifyfailedraiseSSLError(
python学习心得
lzzy_cgy_20246030833
python 开发语言
我的Python学习之旅:从入门到实践在当今这个技术日新月异的时代,编程已成为一项不可或缺的技能。我选择Python作为我的编程语言,因为它简洁、高效且功能强大。以下是我在Python学习过程中的一些心得体会。初识Python:简洁之美Python的语法简洁明了,非常适合初学者。我被它的简洁性所吸引,它让我能够快速上手,而不需要深陷复杂的语法细节。Python的这种简洁性不仅体现在代码的编写上,更
Python 爬虫性能优化实战:从请求压缩到并发提速,抓取效率翻倍技巧
Python核芯
Python爬虫实战项目 python 爬虫 性能优化
一、前言在数据抓取的世界中,爬虫的性能至关重要。无论是处理大规模数据还是应对高频率的请求,一个高效、稳定的爬虫可以大大节省时间和资源。本文将从多个角度探讨如何优化Python爬虫的性能,包括请求压缩、并发提速、缓存策略等,帮助你将爬虫的抓取效率提升到一个新的水平。在实际的爬虫开发中,性能优化是一个不可或缺的环节。一个低效的爬虫可能会导致请求超时、服务器拒绝服务,甚至触发反爬机制。因此,优化爬虫性能
python爬虫项目(一百一十四):招聘网站简历信息自动抓取系统
斌擎人工智能官方账号
python 爬虫 开发语言 数据分析 机器学习
引言在如今竞争激烈的就业市场中,企业和招聘机构需要高效地筛选简历,以找到合适的人才。本文将介绍如何构建一个自动化的简历信息抓取系统,帮助用户从招聘网站中高效提取求职者的简历信息。我们将使用Python编程语言,通过现代的爬虫技术,实现数据的抓取和存储。目录引言1.数据需求与目标网站1.1数据需求2.确定抓取策略2.1分析目标网页2.2确定爬取方式3.环境准备4.数据抓取4.1使用requests和
python学习——PyTorch框架的学习(1)
北温凉
python学习 python 学习 pytorch
PyTorch框架的学习简要声明基于小土堆课程视频BiliBili课程资源文章目录PyTorch框架的学习简要声明一、概要二、自定义`Dataset`实现数据加载1.`MyDataset`类的定义数据集初始化获取单个数据样本获取数据集长度2.`MyDataset`的实例化与合并三、使用TensorBoard进行可视化1.引入必要的库2.初始化`SummaryWriter`3.图像数据的处理与可视化
Python爬虫进阶:解决反爬虫机制的技巧
程序员威哥
python 爬虫 开发语言
✨前言在爬虫初学阶段,我们常常使用requests和BeautifulSoup就能轻松抓取网页数据。但当目标网站对爬虫设置了各种“反爬虫机制”时,简单的方法往往无效,甚至直接被封禁IP或跳转到验证页面。本篇文章将深入讲解常见的反爬虫机制类型,并配合Python解决策略与代码实例,帮助你掌握破解反爬的核心技巧,提升数据抓取成功率与稳定性。️一、常见反爬虫机制类型反爬类型说明举例网站User-Agen
python学习路线(从菜鸟到起飞)
突突突然不会编了
python 学习 开发语言
以下是基于2025年最新技术趋势的Python学习路线,综合多个权威资源整理而成,涵盖从零基础到进阶应用的全流程,适合不同学习目标(如Web开发、数据分析、人工智能等)的学习者。路线分为基础、进阶、实战、高级、方向拓展五个阶段,并附学习资源推荐:一、基础阶段(1-2个月)目标:掌握Python核心语法与编程思维,熟悉开发环境。环境搭建安装Python3.10+,配置PyCharm或VSCode开发
Python爬虫高阶:Selenium+Scrapy+Playwright融合架构,攻克动态页面与高反爬场景
程序员威哥
python 爬虫 selenium
随着互联网应用的不断发展,越来越多的网站采用JavaScript动态渲染页面,常见的静态页面数据抓取方式逐渐失效。此外,高反爬技术也使得传统爬虫架构面临着更大的挑战,许多网站通过复杂的反爬机制如验证码、IP屏蔽、请求频率限制等来防止数据抓取。为了应对这些挑战,我们需要采用更为先进和灵活的爬虫架构。在此背景下,结合Selenium、Scrapy和Playwright这三种技术,能够帮助我们突破动态页
Python 线程优先队列 PriorityQueue - Python零基础入门教程
猿说编程
目录一.Python线程队列Queue分类二.Python线程优先队列PriorityQueue简介三.Python线程优先队列PriorityQueue函数介绍四.Python线程优先队列PriorityQueue使用五.猜你喜欢零基础Python学习路线推荐:Python学习目录>>Python基础入门在线程队列Queue/线程队列LifoQueue文章中分别介绍了先进先出队列Queue和先进
python如何抓取网页里面的文字_如何利用python抓取网页文字、图片内容?
weixin_39917437
想必新老python学习者,对爬虫这一概念并不陌生,在如今大数据时代,很多场景都需要利用爬虫去爬取数据,而这刚好时python领域,如何实现?怎么做?一起来看下吧~获取图片:1、当我们浏览这个网站时,会发现,每一个页面的URL都是以网站的域名+page+页数组成,这样我们就可以逐一的访问该网站的网页了。2、当我们看图片列表时中,把鼠标放到图片,右击检查,我们发现,图片的内容由ul包裹的li组成,箭
python学习打卡:DAY 18 推断聚类后簇的类型
西西西仓鼠
python训练营 python 学习 聚类
@浙大疏锦行聚类后的分析:推断簇的类型知识点回顾:推断簇含义的2个思路:先选特征和后选特征通过可视化图形借助ai定义簇的含义科研逻辑闭环:通过精度判断特征工程价值作业:参考示例代码对心脏病数据集采取类似操作,并且评估特征工程后模型效果有无提升。在聚类分析中,推断簇的类型是理解数据内在结构和业务意义的关键步骤。以下是系统化的推断方法及常见簇类型的总结:一、簇的基本类型明显分离的簇特征:不同簇中任意两
如何使用爬虫简单的爬取一个网页的静态前端代码
什么是爬虫?Python爬虫是一种使用Python语言编写的程序,用于自动访问网页并提取所需信息。它通常用于网络数据抓取、数据挖掘和信息收集。Python爬虫可以模拟浏览器行为,向服务器发送请求并接收响应数据,然后解析这些数据以获取有用的信息。爬虫的基本原理(流程)发送请求:爬虫向目标网站的服务器发送HTTP请求(通常是GET请求)。获取响应:服务器返回网页的HTML内容。解析内容:爬虫解析HTM
Python学习笔记
cherishSpring
python python 学习 笔记
目录一、名词解释二、数据类型(变量名无类型,变量值有类型)三、数据类型转换(万物皆可转字符串)四、标识符五、运算符六、字符串扩展七、数据输入八、if语句九、while语句十、for循环语句十一、函数十二、数据容器1、List列表2、tuple元组3、字符串4、序列的常用操作-切片5、set集合6、dict字典7、数据容器相互转换8、通用操作十三、文件编码一、名词解释1、字面量被写在代码中的固定的值
企业级AI搜索引擎从零到一开发实战:全链路技术解析与代码实现
简介从零开始构建一个企业级AI搜索引擎,是掌握现代搜索技术栈的重要实践。本文将深入剖析基于大语言模型、知识图谱和分布式架构的智能搜索引擎开发全流程,从数据抓取、索引构建到查询处理模块,提供完整的代码实现和架构设计。通过整合多平台数据并应用优化策略,构建一个具备高并发处理能力、精准语义理解及高效搜索排序的智能搜索引擎系统。一、架构设计:智能搜索引擎的核心组件智能搜索引擎架构由三个核心模块组成:数据抓
基于 Python/PHP/Node.js 的淘宝 API 商品数据抓取开发教程
在电商数据分析、竞品监控等场景中,抓取淘宝商品数据是常见需求。淘宝开放平台(OpenPlatform)提供了标准化的API接口,通过合法途径调用可高效获取商品信息。本文将分别基于Python、PHP、Node.js三种语言,详解淘宝API商品数据抓取的开发流程,并提供完整代码示例。一、淘宝API准备工作在开发前,需完成以下准备步骤:注册开发者账号访问注册账号并完成实名认证,创建应用(应用类型选择“
Python爬虫【二十四章】分布式爬虫架构实战:Scrapy-Redis亿级数据抓取方案设计
程序员_CLUB
Python入门到进阶 python 爬虫 分布式
目录一、背景:单机爬虫的五大瓶颈二、Scrapy-Redis架构深度解析1.架构拓扑图2.核心组件对比三、环境搭建与核心配置1.基础环境部署2.Scrapy项目配置四、分布式爬虫核心实现1.改造原生Spider2.布隆过滤器集成五、五大性能优化策略1.动态优先级调整2.智能限速策略3.连接池优化4.数据分片存储5.心跳监控系统六、实战:新闻聚合平台数据抓取1.集群架构2.性能指标七、总结1.核心收
分布式爬虫:设计一个分布式爬虫架构来抓取大规模数据
Python爬虫项目
2025年爬虫实战项目 分布式 爬虫 架构 开发语言 redis 测试工具 python
✨引言随着互联网信息的爆炸式增长,单机爬虫面对大规模网站数据抓取显得力不从心。特别是爬取新闻、商品、社交平台等网站时,经常遇到响应慢、IP被封等问题。为了解决这些问题,分布式爬虫系统应运而生。在本文中,我们将手把手带你打造一个基于Scrapy+Redis+Celery+FastAPI+Docker的现代分布式爬虫架构,实现任务调度、去重控制、分布式抓取与结果存储。本文代码均基于Python3.10
Selenium 中 findElement 方法全解析:定位网页元素的 7 种方式
二向箔reverse
selenium 测试工具
在自动化测试和网页数据抓取场景中,准确找到目标元素是核心任务。Selenium提供的findElement方法支持多种定位策略,本文将深入介绍各种搜索模式的完整语法及适用场景。一、CSS选择器定位CSS选择器是定位网页元素的首选方式,它具有语法简洁、性能优异的特点。1.基本选择器元素选择器语法与说明:driver.find_element(By.CSS_SELECTOR,"标签名")通过HTML标
解线性方程组
qiuwanchi
package gaodai.matrix;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Sc
在mysql内部存储代码
annan211
性能 mysql 存储过程 触发器
在mysql内部存储代码
在mysql内部存储代码,既有优点也有缺点,而且有人倡导有人反对。
先看优点:
1 她在服务器内部执行,离数据最近,另外在服务器上执行还可以节省带宽和网络延迟。
2 这是一种代码重用。可以方便的统一业务规则,保证某些行为的一致性,所以也可以提供一定的安全性。
3 可以简化代码的维护和版本更新。
4 可以帮助提升安全,比如提供更细
Android使用Asynchronous Http Client完成登录保存cookie的问题
hotsunshine
android
Asynchronous Http Client是android中非常好的异步请求工具
除了异步之外还有很多封装比如json的处理,cookie的处理
引用
Persistent Cookie Storage with PersistentCookieStore
This library also includes a PersistentCookieStore whi
java面试题
Array_06
java 面试
java面试题
第一,谈谈final, finally, finalize的区别。
final-修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能
网站加速
oloz
网站加速
前序:本人菜鸟,此文研究总结来源于互联网上的资料,大牛请勿喷!本人虚心学习,多指教.
1、减小网页体积的大小,尽量采用div+css模式,尽量避免复杂的页面结构,能简约就简约。
2、采用Gzip对网页进行压缩;
GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNⅨ系统的文件压缩。我们在Linux中经常会用到后缀为.gz
正确书写单例模式
随意而生
java 设计模式 单例
单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你。
懒汉式,线程不安全
当被问到要实现一个单例模式时,很多人的第一反应是写出如下的代码,包括教科书上也是这样
单例模式
香水浓
java
懒汉 调用getInstance方法时实例化
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if(null == ins
安装Apache问题:系统找不到指定的文件 No installed service named "Apache2"
AdyZhang
apache http server
安装Apache问题:系统找不到指定的文件 No installed service named "Apache2"
每次到这一步都很小心防它的端口冲突问题,结果,特意留出来的80端口就是不能用,烦。
解决方法确保几处:
1、停止IIS启动
2、把端口80改成其它 (譬如90,800,,,什么数字都好)
3、防火墙(关掉试试)
在运行处输入 cmd 回车,转到apa
如何在android 文件选择器中选择多个图片或者视频?
aijuans
android
我的android app有这样的需求,在进行照片和视频上传的时候,需要一次性的从照片/视频库选择多条进行上传
但是android原生态的sdk中,只能一个一个的进行选择和上传。
我想知道是否有其他的android上传库可以解决这个问题,提供一个多选的功能,可以使checkbox之类的,一次选择多个 处理方法
官方的图片选择器(但是不支持所有版本的androi,只支持API Level
mysql中查询生日提醒的日期相关的sql
baalwolf
mysql
SELECT sysid,user_name,birthday,listid,userhead_50,CONCAT(YEAR(CURDATE()),DATE_FORMAT(birthday,'-%m-%d')),CURDATE(), dayofyear( CONCAT(YEAR(CURDATE()),DATE_FORMAT(birthday,'-%m-%d')))-dayofyear(
MongoDB索引文件破坏后导致查询错误的问题
BigBird2012
mongodb
问题描述:
MongoDB在非正常情况下关闭时,可能会导致索引文件破坏,造成数据在更新时没有反映到索引上。
解决方案:
使用脚本,重建MongoDB所有表的索引。
var names = db.getCollectionNames();
for( var i in names ){
var name = names[i];
print(name);
Javascript Promise
bijian1013
JavaScript Promise
Parse JavaScript SDK现在提供了支持大多数异步方法的兼容jquery的Promises模式,那么这意味着什么呢,读完下文你就了解了。
一.认识Promises
“Promises”代表着在javascript程序里下一个伟大的范式,但是理解他们为什么如此伟大不是件简
[Zookeeper学习笔记九]Zookeeper源代码分析之Zookeeper构造过程
bit1129
zookeeper
Zookeeper重载了几个构造函数,其中构造者可以提供参数最多,可定制性最多的构造函数是
public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long sessionId, byte[] sessionPasswd, boolea
【Java命令三】jstack
bit1129
jstack
jstack是用于获得当前运行的Java程序所有的线程的运行情况(thread dump),不同于jmap用于获得memory dump
[hadoop@hadoop sbin]$ jstack
Usage:
jstack [-l] <pid>
(to connect to running process)
jstack -F
jboss 5.1启停脚本 动静分离部署
ronin47
以前启动jboss,往各种xml配置文件,现只要运行一句脚本即可。start nohup sh /**/run.sh -c servicename -b ip -g clustername -u broatcast jboss.messaging.ServerPeerID=int -Djboss.service.binding.set=p
UI之如何打磨设计能力?
brotherlamp
UI ui教程 ui自学 ui资料 ui视频
在越来越拥挤的初创企业世界里,视觉设计的重要性往往可以与杀手级用户体验比肩。在许多情况下,尤其对于 Web 初创企业而言,这两者都是不可或缺的。前不久我们在《右脑革命:别学编程了,学艺术吧》中也曾发出过重视设计的呼吁。如何才能提高初创企业的设计能力呢?以下是 9 位创始人的体会。
1.找到自己的方式
如果你是设计师,要想提高技能可以去设计博客和展示好设计的网站如D-lists或
三色旗算法
bylijinnan
java 算法
import java.util.Arrays;
/**
问题:
假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,
您希望将之分类,并排列为蓝、白、红的顺序,要如何移动次数才会最少,注意您只能在绳
子上进行这个动作,而且一次只能调换两个旗子。
网上的解法大多类似:
在一条绳子上移动,在程式中也就意味只能使用一个阵列,而不使用其它的阵列来
警告:No configuration found for the specified action: \'s
chiangfai
configuration
1.index.jsp页面form标签未指定namespace属性。
<!--index.jsp代码-->
<%@taglib prefix="s" uri="/struts-tags"%>
...
<s:form action="submit" method="post"&g
redis -- hash_max_zipmap_entries设置过大有问题
chenchao051
redis hash
使用redis时为了使用hash追求更高的内存使用率,我们一般都用hash结构,并且有时候会把hash_max_zipmap_entries这个值设置的很大,很多资料也推荐设置到1000,默认设置为了512,但是这里有个坑
#define ZIPMAP_BIGLEN 254
#define ZIPMAP_END 255
/* Return th
select into outfile access deny问题
daizj
mysql txt 导出数据到文件
本文转自:http://hatemysql.com/2010/06/29/select-into-outfile-access-deny%E9%97%AE%E9%A2%98/
为应用建立了rnd的帐号,专门为他们查询线上数据库用的,当然,只有他们上了生产网络以后才能连上数据库,安全方面我们还是很注意的,呵呵。
授权的语句如下:
grant select on armory.* to rn
phpexcel导出excel表简单入门示例
dcj3sjt126com
PHP Excel phpexcel
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
if (PHP_SAPI == 'cli')
die('This example should only be run from a Web Brows
美国电影超短200句
dcj3sjt126com
电影
1. I see. 我明白了。2. I quit! 我不干了!3. Let go! 放手!4. Me too. 我也是。5. My god! 天哪!6. No way! 不行!7. Come on. 来吧(赶快)8. Hold on. 等一等。9. I agree。 我同意。10. Not bad. 还不错。11. Not yet. 还没。12. See you. 再见。13. Shut up!
Java访问远程服务
dyy_gusi
httpclient webservice get post
随着webService的崛起,我们开始中会越来越多的使用到访问远程webService服务。当然对于不同的webService框架一般都有自己的client包供使用,但是如果使用webService框架自己的client包,那么必然需要在自己的代码中引入它的包,如果同时调运了多个不同框架的webService,那么就需要同时引入多个不同的clien
Maven的settings.xml配置
geeksun
settings.xml
settings.xml是Maven的配置文件,下面解释一下其中的配置含义:
settings.xml存在于两个地方:
1.安装的地方:$M2_HOME/conf/settings.xml
2.用户的目录:${user.home}/.m2/settings.xml
前者又被叫做全局配置,后者被称为用户配置。如果两者都存在,它们的内容将被合并,并且用户范围的settings.xml优先。
ubuntu的init与系统服务设置
hongtoushizi
ubuntu
转载自:
http://iysm.net/?p=178 init
Init是位于/sbin/init的一个程序,它是在linux下,在系统启动过程中,初始化所有的设备驱动程序和数据结构等之后,由内核启动的一个用户级程序,并由此init程序进而完成系统的启动过程。
ubuntu与传统的linux略有不同,使用upstart完成系统的启动,但表面上仍维持init程序的形式。
运行
跟我学Nginx+Lua开发目录贴
jinnianshilongnian
nginx lua
使用Nginx+Lua开发近一年的时间,学习和实践了一些Nginx+Lua开发的架构,为了让更多人使用Nginx+Lua架构开发,利用春节期间总结了一份基本的学习教程,希望对大家有用。也欢迎谈探讨学习一些经验。
目录
第一章 安装Nginx+Lua开发环境
第二章 Nginx+Lua开发入门
第三章 Redis/SSDB+Twemproxy安装与使用
第四章 L
php位运算符注意事项
home198979
位运算 PHP &
$a = $b = $c = 0;
$a & $b = 1;
$b | $c = 1
问a,b,c最终为多少?
当看到这题时,我犯了一个低级错误,误 以为位运算符会改变变量的值。所以得出结果是1 1 0
但是位运算符是不会改变变量的值的,例如:
$a=1;$b=2;
$a&$b;
这样a,b的值不会有任何改变
Linux shell数组建立和使用技巧
pda158
linux
1.数组定义 [chengmo@centos5 ~]$ a=(1 2 3 4 5) [chengmo@centos5 ~]$ echo $a 1 一对括号表示是数组,数组元素用“空格”符号分割开。
2.数组读取与赋值 得到长度: [chengmo@centos5 ~]$ echo ${#a[@]} 5 用${#数组名[@或
hotspot源码(JDK7)
ol_beta
java HotSpot jvm
源码结构图,方便理解:
├─agent Serviceab
Oracle基本事务和ForAll执行批量DML练习
vipbooks
oracle sql
基本事务的使用:
从账户一的余额中转100到账户二的余额中去,如果账户二不存在或账户一中的余额不足100则整笔交易回滚
select * from account;
-- 创建一张账户表
create table account(
-- 账户ID
id number(3) not null,
-- 账户名称
nam