文章目录
1. select()方法
1.1 通过标签来提取
1.2 通过类名来查找
1.3 通过ip来查找
1.4 组合提取
1.5 案例
1.5.1 获取所有的tr标签
1.5.2 获取第二个tr标签
1.5.3 获取所有class等于even的tr标签
1.5.4 获取所有a标签的href属性
1.5.5 获取职位信息
2. 修改文档树
2.1 修改tag的名称和属性
2.2 修改string值
2.2 append()添加值
2.3 删除值
3. 爬取天气信息
3.1 思路分析
3.2 实践步骤
3.2.1 初试代码
3.2.2 找寻数据
3.2.3 解决两个问题
3.2.3.1 省会城市名字问题
3.2.3.2 港澳台地区乱码问题
3.2.4 扩展功能
3.3 写入csv文件
4. selenium介绍
1. select()方法
我们也可以通过css选择器来提取数据,但需要我们掌握一些css语法。具体可以参考网页 css选择器参考手册。 示例代码(后面的代码都是在这个代码的基础上继续的):
from bs4 import BeautifulSoup
html_doc = """
The Dormouse's story
The Dormouse's story
Once upon a time there were three little sisters; and their names were
Elsie ,
Lacie and
Tillie ;
and they lived at the bottom of a well.
...
"""
soup = BeautifulSoup(html_doc,'lxml')
1.1 通过标签来提取
# 提取并打印所有的标签a
print(soup.select('a'))
结果以列表返回所有的标签a,可以通过遍历列表取出所需元素。
[Elsie , Lacie , Tillie ]
1.2 通过类名来查找
比如我们要查找所有类名为"sister"的a标签。
# 提取并打印所有class="sister"的标签
print(soup.select('.sister'))
结果以列表形式返回
[Elsie , Lacie , Tillie ]
1.3 通过ip来查找
# 通过id来提取 #id
print(soup.select('#link1'))
结果
[Elsie ]
1.4 组合提取
我们提取p标签下的所有a标签
# 组合标签提取
print(soup.select('p>a'))
结果以列表返回
[Elsie , Lacie , Tillie ]
# 提取p标签下的id=link1的标签
print(soup.select('p #link1'))
结果
[Elsie ]
选择所有p元素和a元素
# 选取所有p元素和a元素
print(soup.select('p,a'))
结果选出了所有p标签和a标签,以列表返回
[The Dormouse's story
, Once upon a time there were three little sisters; and their names were
Elsie ,
Lacie and
Tillie ;
and they lived at the bottom of a well.
, Elsie , Lacie , Tillie , ...
]
选择所有p元素内的a元素
# 选取所有p元素下的a元素
print(soup.select('p a'))
结果以列表返回
[Elsie , Lacie , Tillie ]
选取所有带有href属性的元素
# 选取所有带有href属性的元素
print(soup.select('[href]'))
结果以列表返回
[Elsie , Lacie , Tillie ]
# 选取所有class = "sister"的元素
print(soup.select('[class=sister]'))
结果以列表返回
[Elsie , Lacie , Tillie ]
# 从属性为title的标签中取出文本
print(soup.select('.title')[0].get_text())
因为print(soup.select(’.title’))返回的是列表,所以这里需要取出列表里面的元素再.get_text()。
The Dormouse's story
1.5 案例
我们把上节课的示例用select()方法操作一下
from bs4 import BeautifulSoup
html = """
"""
soup_2 = BeautifulSoup(html,'lxml')
1.5.1 获取所有的tr标签
# 获取所有的tr标签
print(soup_2.select('tr'))
结果以列表返回
[
职位名称
职位类别
人数
地点
发布时间
,
22989-金融云区块链高级研发工程师(深圳)
技术类
1
深圳
2017-11-25
,
22989-金融云高级后台开发
技术类
2
深圳
2017-11-25
,
SNG16-腾讯音乐运营开发工程师(深圳)
技术类
2
深圳
2017-11-25
,
SNG16-腾讯音乐业务运维工程师(深圳)
技术类
1
深圳
2017-11-25
,
TEG03-高级研发工程师(深圳)
技术类
1
深圳
2017-11-24
,
TEG03-高级图像算法研发工程师(深圳)
技术类
1
深圳
2017-11-24
,
TEG11-高级AI开发工程师(深圳)
技术类
4
深圳
2017-11-24
,
15851-后台开发工程师
技术类
1
深圳
2017-11-24
,
15851-后台开发工程师
技术类
1
深圳
2017-11-24
,
SNG11-高级业务运维工程师(深圳)
技术类
1
深圳
2017-11-24
]
1.5.2 获取第二个tr标签
print(soup_2.select('tr')[1])
结果
22989-金融云区块链高级研发工程师(深圳)
技术类
1
深圳
2017-11-25
1.5.3 获取所有class等于even的tr标签
# 获取所有class等于even的tr标签
trs = soup_2.select('.even')
for tr in trs:
print(tr)
结果
22989-金融云区块链高级研发工程师(深圳)
技术类
1
深圳
2017-11-25
SNG16-腾讯音乐运营开发工程师(深圳)
技术类
2
深圳
2017-11-25
TEG03-高级研发工程师(深圳)
技术类
1
深圳
2017-11-24
TEG11-高级AI开发工程师(深圳)
技术类
4
深圳
2017-11-24
15851-后台开发工程师
技术类
1
深圳
2017-11-24
1.5.4 获取所有a标签的href属性
# 获取所有a标签的href属性
a_lst= soup_2.select('a')
for a in a_lst:
# href = a['href']
href = a.get('href')
print(href)
结果
position_detail.php?id=33824&keywords=python&tid=87&lid=2218
position_detail.php?id=29938&keywords=python&tid=87&lid=2218
position_detail.php?id=31236&keywords=python&tid=87&lid=2218
position_detail.php?id=31235&keywords=python&tid=87&lid=2218
position_detail.php?id=34531&keywords=python&tid=87&lid=2218
position_detail.php?id=34532&keywords=python&tid=87&lid=2218
position_detail.php?id=31648&keywords=python&tid=87&lid=2218
position_detail.php?id=32218&keywords=python&tid=87&lid=2218
position_detail.php?id=32217&keywords=python&tid=87&lid=2218
position_detail.php?id=34511&keywords=python&tid=87&lid=2218
1.5.5 获取职位信息
# 获取职位信息
trs = soup_2.select('tr')[1:] # 因为第一个tr标签内无职位信息,故过滤掉。
for tr in trs:
pos_info = list(tr.stripped_strings) # 由于tr.stripped_strings返回的是一个生成器,所以这里需要转化为列表才能提取其中的元素
print(pos_info[0])
结果
22989-金融云区块链高级研发工程师(深圳)
22989-金融云高级后台开发
SNG16-腾讯音乐运营开发工程师(深圳)
SNG16-腾讯音乐业务运维工程师(深圳)
TEG03-高级研发工程师(深圳)
TEG03-高级图像算法研发工程师(深圳)
TEG11-高级AI开发工程师(深圳)
15851-后台开发工程师
15851-后台开发工程师
SNG11-高级业务运维工程师(深圳)
2. 修改文档树
作为一个了解知识点,一般不主张修改。 示例代码(以下的代码是这个代码的继续):
from bs4 import BeautifulSoup
html_doc = """
The Dormouse's story
The Dormouse's story
Once upon a time there were three little sisters; and their names were
Elsie ,
Lacie and
Tillie ;
and they lived at the bottom of a well.
...
"""
soup = BeautifulSoup(html_doc,'lxml')
2.1 修改tag的名称和属性
tag_p = soup.p
print(tag_p)
tag_p.name = 'w' # 修改标签名称
print(tag_p)
tag_p['title'] = 'age' # 修改属性值为"title"
print(tag_p)
结果
The Dormouse's story
The Dormouse's story
The Dormouse's story
2.2 修改string值
tag_p = soup.p
print(tag_p.string)
tag_p.string = 'you need python' # 修改string值
print(tag_p.string)
结果对比
The Dormouse's story
you need python
2.2 append()添加值
tag_p = soup.p
print(tag_p)
tag_p.append('abcd') # 添加值
print(tag_p)
结果对比
The Dormouse's story
The Dormouse's story abcd
2.3 删除值
r = soup.find(class_='title')
print(r)
print('-'*100)
r.decompose() # 删除这个标签
print(soup)
结果对比
The Dormouse's story
----------------------------------------------------------------------------------------------------
The Dormouse's story
Once upon a time there were three little sisters; and their names were
Elsie ,
Lacie and
Tillie ;
and they lived at the bottom of a well.
...
通过与示例代码对比发现,虚线上方的那个标签被删除了。
3. 爬取天气信息
我们下面做一个项目,爬取一个网站上的天气信息。 我们的需求是获取全中国城市的名字,以及对应的温度,保存到csv文件中。
3.1 思路分析
我们先以华北地区为例,华北地区共五个城市:北京、天津、河北、内蒙古、石家庄。我们分析一下源码: 如上图,我们找到了每个区域所有的数据都在class = "conMidtab"的一个大标签里,而城市名在table标签下的第三个tr标签里的第一个或第二个td标签里,温度在倒数第二个td标签里。
我们打算定义三个模块,第一个用来解析网页数据,第二个来写入数据,第三个是主函数。
import requests
from bs4 import BeautifulSoup
import csv
def parse_page(url):
pass
def writeData(list):
pass
def main():
pass
if __name__ == '__main__':
main()
3.2 实践步骤
我们来写代码吧。
3.2.1 初试代码
下面我们我们一步一步的写代码:
import requests
from bs4 import BeautifulSoup
import csv
def parse_page(url):
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'}
response = requests.get(url,headers = headers)
html = response.content.decode('utf-8')
print(html)
def writeData(list):
pass
def main():
url = 'http://www.weather.com.cn/textFC/hb.shtml'
parse_page(url)
if __name__ == '__main__':
main()
我们可以运行一下程序,看看打印结果:
D:\Python38\python.exe D:/work/爬虫/Day09/weather_2.py
省/直辖市
城市
周三(1月20日)白天
周三(1月20日)夜间
天气现象
风向风力
最高气温
天气现象
风向风力
最低气温
结果是正确的,我们可以把这个结果复制下来,重新定义一个html,令其等于这个结果,以后每次测试就不用再次打扰该网站的服务器了,推荐这样做,道德爬网。等所有的代码检测没有问题了,我们再向服务器发起请求。
3.2.2 找寻数据
html = '''... ...'''
soup = BeautifulSoup(html,'lxml')
conMidtab = soup.find('div',class_='conMidtab')
tables = conMidtab.find_all('table')
for table in tables:
print(table)
print('*-'*60)
结果我们发现有五个省份的数据,继续提取出五个省份城市的名字:
html = '''... ...'''
soup = BeautifulSoup(html,'lxml')
conMidtab = soup.find('div',class_='conMidtab')
tables = conMidtab.find_all('table')
for table in tables:
trs = table.find_all('tr')[2:]
for tr in trs:
tds = tr.find_all('td')
city_td = tds[0]
city = city_td.strings
print(city)
结果就是这样的 是一个生成器。 需要转化成列表
# html = '''... ...'''
soup = BeautifulSoup(html,'lxml')
conMidtab = soup.find('div',class_='conMidtab')
tables = conMidtab.find_all('table')
for table in tables:
trs = table.find_all('tr')[2:]
for tr in trs:
tds = tr.find_all('td')
city_td = tds[0]
city = list(city_td.strings)
print(city)
这一次结果出来了:
['\n', '北京', '\n']
['\n', '海淀']
['\n', '朝阳']
['\n', '顺义']
... ...
发现里面有不必要的字符,可以去除一下。而且我们发现结果是列表,我们需要提取其中的城市名字,于是:
html = '''... ...'''
soup = BeautifulSoup(html,'lxml')
conMidtab = soup.find('div',class_='conMidtab')
tables = conMidtab.find_all('table')
for table in tables:
trs = table.find_all('tr')[2:] # 过滤掉前两个tr标签,里面是表头内容
for tr in trs:
tds = tr.find_all('td')
city_td = tds[0]
city = list(city_td.stripped_strings)[0]
print(city)
结果:
北京
海淀
朝阳
顺义
怀柔
...
出现了我们想要的结果。 下面我们补充上温度的数据就可以了,发现温度在倒数第二个td标签里面。于是:
html = '''... ...'''
soup = BeautifulSoup(html,'lxml')
conMidtab = soup.find('div',class_='conMidtab')
tables = conMidtab.find_all('table')
for table in tables:
trs = table.find_all('tr')[2:]
for tr in trs:
tds = tr.find_all('td')
city_td = tds[0]
temp_td = tds[-2]
city = list(city_td.stripped_strings)[0]
temp = list(temp_td.stripped_strings)[0]
print('city',city,'temp',temp)
结果出来了:
city 北京 temp -6
city 海淀 temp -6
city 朝阳 temp -5
city 顺义 temp -7
city 怀柔 temp -9
city 通州 temp -8
... ...
3.2.3 解决两个问题
下面这两个问题让我们学会到:
一个新的函数:enumerate()
一个容错率比较高的解析器:html5lib
当然还有一个换源安装方法
3.2.3.1 省会城市名字问题
本来以为万事大吉了,没想到在测试其他区域时出现了新的问题。比如,在测试华东地区的时候,第一个城市的名字不是“哈尔滨”,而是“黑龙江”。后来检查网页的源代码发现,第一个td里显示的是省份的名字,第二个td里显示的才是该省份的省会城市。而北京是直辖市,两个td里显示的相同。不仅北京,上海,天津,所有的直辖市都是如此。但如果碰到不是直辖市的省份就出错了。怎么解决这个问题呢?如果我们只取第二个td标签里的城市可以吗?不可以,因为,其他的城市第二个标签是天气状况,是阴天和是晴天这样的信息。只有每个table里第一个tr标签里的第二个td是省会城市名。如果我们全都提取第二个td标签的内容,那么其他的城市的名字都显示成天气状况了。这样怎么办呢?既然只有第一个tr标签的第二个td是省会城市名,那么我们只需要当index(tr)==0的时候(即每个省份的第一个tr标签)取第二个td标签里的信息就可以了。于是我们只需要加一个判断就可以了,这里我们需要一个新的函数来帮助,enumerate()函数,它返回两个值,第一个返回值是列表里的元素的索引值,第二个返回值是元素本身。用法举例:
w_lst = ['a','b','c','d','e']
for index,i in enumerate(w_lst):
print(index,i)
输出的结果:
0 a
1 b
2 c
3 d
4 e
所以我们把url地址换成东北地区的,我们的代码就可以改变成这样的了:
url = 'http://www.weather.com.cn/textFC/db.shtml'
def parse_page(url):
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'}
response = requests.get(url,headers = headers)
html = response.content.decode('utf-8')
soup = BeautifulSoup(html,'lxml')
conMidtab = soup.find('div',class_='conMidtab')
tables = conMidtab.find_all('table')
for table in tables:
trs = table.find_all('tr')[2:] # 过滤掉前两个tr标签,里面是表头内容
for index,tr in enumerate(trs): # 使用enumerate()函数来判断tr标签的索引值
tds = tr.find_all('td')
city_td = tds[0]
if index == 0: # 当tr的索引值为0时,即第一个tr标签时,
city_td =tds[1] # 城市名取第二个td标签里的内容。
temp_td = tds[-2]
city = list(city_td.stripped_strings)[0]
temp = list(temp_td.stripped_strings)[0]
print('city',city,'temp',temp)
parse_page(url)
结果:
city 哈尔滨 temp -18
city 齐齐哈尔 temp -21
city 牡丹江 temp -25
city 佳木斯 temp -22
city 绥化 temp -20
... ...
第一个城市名字就是哈尔滨了。
3.2.3.2 港澳台地区乱码问题
本以为这次应该没有问题了,可是当我们把url换成港澳台地区的时候结果是这样子地:
city 香港 temp 16
city 省/直辖市 temp 周三(1月20日)夜间
city 天气现象 temp 风向风力
city 澳门 temp 15
city 省/直辖市 temp 周三(1月20日)夜间
city 天气现象 temp 风向风力
city 台湾 temp 17
city 高雄 temp 19
city 台中 temp 12
city 省/直辖市 temp 周四(1月21日)夜间
city 天气现象 temp 风向风力
city 香港 temp 17
信息是错乱的,完全驴头对不住马嘴。这是什么原因呢?经过分析网页源代码发现,代码的标签不完整,也就是说源代码有错误。而浏览器的解析会自动补充这些标签代码的缺失,所以渲染出来仍然没有问题。是不是程序员偷懒了,给我们造成了麻烦。不过不要紧,我们有另一个解析器大家还记得吗?html5lib,他老人家就是按照浏览器的解析方式来解析代码的。缺点是慢,但优点是容错率贼高。所以我们试试吧?不过要先安装html5lib解析器才能使用哦。我安装的时候发现直接用pip install html5lib贼慢,而且失败了。于是用了一次从没有用过的方式,传说中的换源安装。简单介绍:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple html5lib
这里我用的是清华的源,你也可以用其他的,格式就是这么个格式。发现瞬间安装成功了。 然后我们的代码就把解析器换成这个就行了,其他的都不用改。
soup = BeautifulSoup(html,'html5lib') # 只需要改这一句就可以了。
于是乎,我们的问题解决了。
soup = BeautifulSoup(html,'html5lib')
conMidtab = soup.find('div',class_='conMidtab')
tables = conMidtab.find_all('table')
for table in tables:
trs = table.find_all('tr')[2:]
for index,tr in enumerate(trs): # 使用enumerate()函数来判断tr标签的索引值
tds = tr.find_all('td')
city_td = tds[0]
if index == 0: # 当tr的索引值为0时,即第一个tr标签时,
city_td =tds[1] # 城市名取第二个td标签里的内容。
temp_td = tds[-2]
city = list(city_td.stripped_strings)[0]
temp = list(temp_td.stripped_strings)[0]
print('city',city,'temp',temp)
结果
city 香港 temp 16
city 澳门 temp 15
city 台北 temp 17
city 高雄 temp 19
city 台中 temp 12
很规矩的数据。
3.2.4 扩展功能
在这里我们需要将代码扩展一下,使得能够适用于爬取所有地区的数据。这里可以把所有的url制作成一个列表,然后用循环的方式提取url就可以了。扩展后的完整代码是这样子的:
import requests
from bs4 import BeautifulSoup
import csv
url = 'http://www.weather.com.cn/textFC/gat.shtml'
def parse_page(url):
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'}
response = requests.get(url,headers = headers)
html = response.content.decode('utf-8')
soup = BeautifulSoup(html,'html5lib')
conMidtab = soup.find('div',class_='conMidtab')
tables = conMidtab.find_all('table')
for table in tables:
trs = table.find_all('tr')[2:] # 过滤掉前两个tr标签,里面是表头内容
for index,tr in enumerate(trs): # 使用enumerate()函数来判断tr标签的索引值
tds = tr.find_all('td')
city_td = tds[0]
if index == 0: # 当tr的索引值为0时,即每个省(每个table是一个省)的第一个tr标签时,
city_td =tds[1] # 城市名取第二个td标签里的内容。
temp_td = tds[-2]
city = list(city_td.stripped_strings)[0]
temp = list(temp_td.stripped_strings)[0]
print('city',city,'temp',temp)
def main():
url_head = 'http://www.weather.com.cn/textFC/{}.shtml'
end_lst = ['hb','db','hd','hz','hn','xb','xn','gat']
for i in end_lst:
url = url_head.format(i)
parse_page(url)
print('*()*_'*20)
if __name__ == '__main__':
main()
运行后结果:
... ...
city 巴彦淖尔 temp -12
city 锡林郭勒 temp -17
city 呼伦贝尔 temp -23
city 兴安盟 temp -20
city 阿拉善盟 temp -7
*()*_*()*_*()*_*()*_*()*_*()*_*()*_*()*_*()*_*()*_*()*_*()*_*()*_*()*_*()*_*()*_*()*_*()*_*()*_*()*_
city 哈尔滨 temp -18
city 齐齐哈尔 temp -21
city 牡丹江 temp -25
city 佳木斯 temp -22
city 绥化 temp -20
city 黑河 temp -26
... ...
结果太长了,我就复制这么多。
3.3 写入csv文件
我们仍然采用字典的方式写入,代码如下:
import requests
from bs4 import BeautifulSoup
import csv
url = 'http://www.weather.com.cn/textFC/gat.shtml'
def parse_page(url):
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'}
response = requests.get(url,headers = headers)
html = response.content.decode('utf-8')
soup = BeautifulSoup(html,'html5lib')
conMidtab = soup.find('div',class_='conMidtab')
tables = conMidtab.find_all('table')
info_list = [] # 先定义一个空列表用来盛装要写入的数据
for table in tables:
trs = table.find_all('tr')[2:]
for index,tr in enumerate(trs): # 使用enumerate()函数来判断tr标签的索引值
info_Dict = {} # 先定义一个空字典,后面把对应城市和天气信息作为键值对添加
tds = tr.find_all('td')
city_td = tds[0]
if index == 0: # 当tr的索引值为0时,即第一个tr标签时,
city_td =tds[1] # 城市名取第二个td标签里的内容。
temp_td = tds[-2]
info_Dict['city'] = list(city_td.stripped_strings)[0]
info_Dict['temp'] = list(temp_td.stripped_strings)[0]
info_list.append(info_Dict)
return info_list
def writeData(inf_list):
with open('China_weather.csv','w',encoding='utf-8',newline='') as f:
writer = csv.DictWriter(f,fieldnames=['city','temp'])
writer.writeheader()
writer.writerows(inf_list)
def main():
lst = []
url_head = 'http://www.weather.com.cn/textFC/{}.shtml'
end_lst = ['hb','db','hd','hz','hn','xb','xn','gat']
for i in end_lst:
url = url_head.format(i)
lst += parse_page(url)
writeData(lst)
print('正在写入'+i+'地区的信息')
if __name__ == '__main__':
main()
运行结果:
正在写入hb地区的信息
正在写入db地区的信息
正在写入hd地区的信息
正在写入hz地区的信息
正在写入hn地区的信息
正在写入xb地区的信息
正在写入xn地区的信息
正在写入gat地区的信息
在我的对应文件夹里多出来了一个csv文件 在我的文件管理器里打开是这样子地: 这个项目到此就完成了。
4. selenium介绍
selenium本身是一款网站自动化测试的工具,并非为爬虫开发。但被借用来为爬虫解决一些问题。比如,一些数据是用ajax加载的,从网页的url里请求不到,所以,就可以用selenium工具模仿人工操作。好处是,所见即所得。坏处就是速度太慢,而且容易被识别。因为现在很多网站,如某宝,都能识别出这个工具,就用不了了。它常常和chromedriver一起使用。selenium+chromedriver chromedriver是一款浏览器驱动程序,可以驱动chrome浏览器。当然,不同的浏览器有不同的驱动器。
Chrome:https://sites.google.com/a/chromium.org/chromedriver/downloads
Firefox:https://github.com/mozilla/geckodriver/releases
Edge:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Safari:https://webkit.org/blog/6900/webdriver-support-in-safari-10/
下载chromedriver
百度搜索:淘宝镜像(https://npm.taobao.org/)
安装总结:https://www.jianshu.com/p/a383e8970135
安装Selenium:pip install selenium 要求安装的驱动要和安装的浏览器对应。 下节课我们再继续讲selenium的应用。
你可能感兴趣的:(爬虫)
Python从0到100(三十九):数据提取之正则(文末免费送书)
是Dream呀
python mysql 开发语言
前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!欢迎大家订阅专栏:零基础学Python:Python从0到100最新
Python 舆论风向分析爬虫:全流程数据获取、清洗与情感剖析
西攻城狮北
python 爬虫 开发语言 实战案例
引言在当今信息爆炸的时代,互联网上充斥着海量的用户言论和观点。了解舆论风向对于企业、政府机构以及研究者等具有重要的意义,可以帮助他们及时把握公众情绪、调整策略与决策。Python作为一种强大的编程语言,在数据爬取与分析方面具有得天独厚的优势,能够助力我们高效地实现舆情监测与深入剖析。一、环境搭建与目标确定1.环境搭建为了顺利完成爬虫与数据分析任务,首先需要确保你的开发环境已经安装了以下Python
Python爬虫requests(详细)
dme.
Python爬虫零基础入门 爬虫 python
本文来学爬虫使用requests模块的常见操作。1.URL参数无论是在发送GET/POST请求时,网址URL都可能会携带参数,例如:http://www.5xclass.cn?age=19&name=dengres=requests.get(url="https://www.5xclass.cn?age=19&name=deng")res=requests.get(url="https://www
Python中的 redis keyspace 通知_python 操作redis psubscribe(‘__keyspace@0__ ‘)
2301_82243733
程序员 python 学习 面试
最后Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习Python门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的Pytho
Selenium使用指南
程序员杰哥
selenium 测试工具 python 测试用例 职场和发展 程序人生 功能测试
概述selenium是网页应用中最流行的自动化测试工具,可以用来做自动化测试或者浏览器爬虫等。官网地址为:相对于另外一款web自动化测试工具QTP来说有如下优点:免费开源轻量级,不同语言只需要一个体积很小的依赖包支持多种系统,包括Windows,Mac,Linux支持多种浏览器,包括Chrome,FireFox,IE,safari,opera等支持多语言,包括Java,C,python,c#等主流
基于Python的搜索引擎的设计与实现
AI大模型应用之禅
DeepSeek R1 & AI大模型与大数据 java python javascript kotlin golang 架构 人工智能
搜索引擎,Python,爬虫,自然语言处理,信息检索,索引,算法,数据库1.背景介绍在信息爆炸的时代,海量数据无处不在,高效地获取所需信息变得至关重要。搜索引擎作为信息获取的桥梁,扮演着不可或缺的角色。传统的搜索引擎往往依赖于庞大的服务器集群和复杂的算法,对资源消耗较大,且难以满足个性化搜索需求。基于Python的搜索引擎设计,则凭借Python语言的易学易用、丰富的第三方库和强大的社区支持,为开
python进程数上限_python 多进程数量 对爬虫程序的影响
weixin_39759995
python进程数上限
1.首先看一下python多进程的优点和缺点多进程优点:1.稳定性好:多进程的优点是稳定性好,一个子进程崩溃了,不会影响主进程以及其余进程。基于这个特性,常常会用多进程来实现守护服务器的功能。然而多线程不足之处在于,任何一个线程崩溃都可能造成整个进程的崩溃,因为它们共享了进程的内存资源池。2.能充分利用多核cpu:由于python设计之初,没预料到多核cpu能够得到现在的发展,只考虑到了单核cpu
python爬虫--安装XPath Helper
S903784597
python 爬虫 开发语言
给chrome浏览器安装xpath插件。-从网盘下载xpath的插件文件链接:https://pan.baidu.com/s/1B85d5cLDyAz1xUQqmL3uug?pwd=3306提取码:3306-在chrome中输入chrome://extensions/打开扩展程序。-将从百度网盘中下载的xpath.zip文件直接拖到浏览器的扩展程序页面中-得到chrome插件,将插件开关开启,并且
使用Python爬虫实时监控行业新闻案例
海拥✘
python 爬虫 开发语言
目录背景环境准备请求网页数据解析网页数据定时任务综合代码使用代理IP提升稳定性运行截图与完整代码总结在互联网时代,新闻的实时性和时效性变得尤为重要。很多行业、技术、商业等领域的新闻都可以为公司或者个人发展提供有价值的信息。如果你有一项需求是要实时监控某个行业的新闻,自动化抓取并定期输出这些新闻,Python爬虫可以帮你轻松实现这一目标。本文将通过一个案例,带你一步一步实现一个简单的Python爬虫
Python爬虫-猫眼电影的影院数据
写python的鑫哥
爬虫案例1000讲 python 爬虫 猫眼 电影 电影院 数据 采集
前言本文是该专栏的第46篇,后面会持续分享python爬虫干货知识,记得关注。本文笔者以猫眼电影为例子,获取猫眼的影院相关数据。废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整代码)正文地址:aHR0cHM6Ly93d3cubWFveWFuLmNvbS8=目标:获取猫眼电影的影院数据1.项目场景介绍老规矩,我们还是通过接码
Python从0到100(四):Python中的运算符介绍(补充)
是Dream呀
python java 数据库
前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!欢迎大家订阅专栏:零基础学Python:Python从0到100最新
Python从0到100(三十五):beautifulsoup的学习
是Dream呀
Dream的茶话会 python beautifulsoup 学习
前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!欢迎大家订阅专栏:零基础学Python:Python从0到100最新
python分布式爬虫去重_Python分布式爬虫(三) - 爬虫基础知识
weixin_39997311
python分布式爬虫去重
0相关源码1技术选型爬虫能做什么1.1scrapyVSrequests+beautifulsoup做爬虫的时候,经常都会听到scrapyVSrequests+beautifulsoup的组合在本次分布式爬虫实现中只用scrapy而不用后者的原因是:requests和beautifulsoup都是库,scrapy是一个框架框架中可以应用requests等,可以集合很多第三方库基于twisted(异步
Scrapy分布式爬虫系统
ivwdcwso
开发 运维 scrapy 分布式 爬虫 python 开发
一、概述在这篇博文中,我们将介绍如何使用Docker来部署Scrapy分布式爬虫系统,包括Scrapyd、Logparser和Scrapyweb三个核心组件。这种部署方式适用于Scrapy项目和Scrapy-Redis分布式爬虫项目。需要安装的组件:Scrapyd-服务端,用于运行打包后的爬虫代码,所有爬虫机器都需要安装。Logparser-服务端,用于解析爬虫日志,配合Scrapyweb进行实时
使用Python抓取新闻媒体网站的最新头条与相关内容:深入的爬虫开发与数据分析实战
Python爬虫项目
2025年爬虫实战项目 python 爬虫 数据分析 数据挖掘 人工智能 开发语言
引言在互联网时代,新闻媒体网站是人们获取信息和了解世界的重要渠道。随着新闻的即时更新,获取最新头条并进行数据分析成为许多行业领域(如媒体、广告、舆情监测等)的重要需求。通过抓取新闻媒体网站的内容,我们不仅能获取各类新闻文章,还能为后续的数据分析、情感分析、舆情监控等提供基础数据。本篇博客将详细讲解如何使用Python编写一个爬虫,抓取新闻媒体网站的最新头条及其相关内容。我们将使用最新的技术栈,包括
Python爬虫实战:获取笔趣阁图书信息,并做数据分析
ylfhpy
爬虫 python 爬虫 数据分析
注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力!1.环境准备与反爬策略pythonimportrequestsfrombs4importBeautifulSoupimportpandasaspdimportreimporttimeimportrandomfromfake_useragentimportUserAgent#需安装:pip
如何利用Python爬虫获取淘宝分类详情:实战案例指南
数据小爬虫@
python 爬虫 开发语言
在电商领域,淘宝作为中国最大的电商平台之一,其分类详情数据对于市场分析、竞争策略制定以及电商运营优化具有极高的价值。通过Python爬虫技术,我们可以高效地获取这些数据,为电商从业者提供强大的数据支持。本文将详细介绍如何利用Python编写爬虫程序,快速获取淘宝分类详情数据。一、准备工作(一)环境搭建确保你的开发环境中已经安装了以下必要的库:requests:用于发送HTTP请求。Beautifu
Python 爬虫功能介绍
chengxuyuan1213_
python 爬虫 网络爬虫
在当今互联网信息爆炸的时代,数据的获取与分析成为了各行各业不可或缺的一部分。Python,作为一种简洁、易读且功能强大的编程语言,凭借其丰富的库和框架,在数据抓取(即网络爬虫)领域展现了极大的优势。本文旨在介绍Python爬虫的基础功能,帮助初学者快速入门,理解爬虫的基本工作原理及常用技术。一、什么是网络爬虫网络爬虫(WebCrawler),又称网络蜘蛛(WebSpider)或网络机器人(WebR
Python爬虫+数据分析:京东商品评论数据接口
代码逐梦人
爬虫技能晋升路线 python 爬虫 数据分析
一、引言在电商领域,商品评论数据蕴含着丰富的信息,如消费者的满意度、产品的优缺点等。京东作为国内知名的电商平台,其商品评论数据对于商家进行市场调研、改进产品,以及消费者了解商品真实情况都具有重要价值。通过获取京东商品评论数据接口,我们可以方便、高效地获取这些有价值的信息,为后续的数据分析和决策提供支持。二、接口概述需要说明的是,京东并没有公开免费的商品评论数据接口供开发者随意使用。如果要获取京东商
python爬虫多线程原理
代码逐梦人
爬虫技能晋升路线 python 爬虫 开发语言
多线程爬虫原理与优势在Python爬虫中,多线程是一种提升爬取效率的有效技术。在传统的单线程爬虫里,每次只能处理一个请求,只有等当前请求完成(包括发送请求、等待响应、解析数据)之后,才能开始下一个请求。而多线程爬虫可以让多个请求同时进行,在等待某个请求响应的时间里,CPU可以去处理其他请求,充分利用了CPU时间,大大提高了爬取效率。多线程爬虫的实现步骤1.引入必要的库importrequestsi
Python爬虫+数据分析:淘宝商品评论页面数据
代码逐梦人
爬虫技能晋升路线 python 爬虫 数据分析
一、引言在电商平台中,商品评论包含了大量消费者的反馈信息,这些信息对于商家了解产品优缺点、改进服务,以及消费者做出购买决策都具有重要价值。淘宝作为国内知名的电商平台,其商品评论页面的数据蕴含着丰富的信息。通过Python爬虫技术获取这些数据,并运用数据分析方法进行处理和解读,可以挖掘出有价值的商业洞察。然而,需要注意的是,淘宝有严格的反爬机制,在进行爬虫操作时要遵守相关法律法规和平台规则,避免过度
Python网络爬虫-WebSocket数据抓取
程序小勇
faiss 爬虫 python 网络协议 websocket 开发语言
目录前言1、WebSocket请求的分析通常涉及以下几个方面:2、利用WebSocket爬取数据总结最后,创作不易!非常感谢大家的关注、点赞、评论啦!谢谢三连哦!好人好运连连,学习进步!工作顺利哦!博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,
流行编程语言全解析:优势、应用与短板
a小胡哦
python java c++ c语言 javascript swift r语言
Python:优势Python以其简洁、易读的语法闻名,新手能快速上手。丰富的库和框架,能极大地提高开发效率。适用领域数据科学与分析:处理和分析大规模数据集,进行数据可视化。典型示例:Google用Python进行数据分析,处理海量数据以支持各种业务决策。机器学习与人工智能:构建和训练模型。典型示例:OpenAI在很多人工智能项目中广泛使用Python,如GPT系列模型的研发。网络爬虫:轻松从网页
052_爬虫_爬虫相关概念(引用《尚硅谷Python爬虫教程(小)小 白零基础速通》052章)
一个有趣的昵称
python 爬虫 开发语言
爬虫解释:通过程序,根据url(http://taobao.com)进行网页的爬取获取有用的信息实用程序模拟浏览器,去向服务发送请求,获取响应信息爬虫的核心爬取网页:爬取整个网页包含了网页中所的内容解析数据:将网页中得到的数据进行解析难点:爬虫和但爬虫之间的博弈爬虫的类型实例通用爬虫百度,360,Google,搜狗等搜索引擎功能访问网页-》抓取数据-》数据储存-》数据处理-》提供检索服务robot
尚硅谷爬虫note007
CSDNy666999
爬虫
一、urllib—异常1.urllib.error.HTTPError2.urllib.error.URLError#_*_coding:utf-8_*_#@Time:2025/2/1411:33#@Author:20250206-里奥#@File:demo26_异常#@Project:PythonProject10-14importurllib.requestimporturllib.error
【Python爬虫(15)】从0到1:Python爬虫实战攻克电商网站动态数据堡垒
奔跑吧邓邓子
Python爬虫 python 爬虫 开发语言 电商网站 动态数据
【Python爬虫】专栏简介:本专栏是Python爬虫领域的集大成之作,共100章节。从Python基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发者,都能从中汲取知识,助力掌握爬虫核心技能,开拓技术视野。目录一、引言二、准备工作2.1环境搭建2.2目标电商网站分析三、攻克登
字节跳动后端或大数据基础知识面试题及参考答案(2万字长文)
大模型大数据攻城狮
大数据 大厂面试 数据结构 算法 leetcode
目录Redis的数据类型Redis数据类型的底层数据结构三次握手、四次挥手Redis持久化机制购物车为什么用Redis存,是永久存储吗MySQL的InnoDB索引数据结构哪些SQL的关键字会让索引失效队列、栈、数组、链表有什么不同讲讲爬虫的构成爬虫抓到的数据不清洗吗?不去重吗?对爬虫的更多了解Linux进程间通信机制进程和线程的区别线程私有的数据讲一下堆排序,每次调整的时间复杂度?堆排序是稳定的吗
爬虫快速上手之正则表达式总结
Athena945
python 正则表达式 正则表达式 python
目录一、正则表达式二、查找相关方法三、re.Match类的使用四、re.compile()方法的使用五、正则修饰符六、标点符号的特殊意义七、字母的特殊含义八、正则替换九、贪婪模式和非贪婪模式十、正则表达式小结一、正则表达式1、概念正则表达式是一个特殊的字符序列,通常被用来检索、替换那些符合某个模式(规则)的文本;在python中需要通过正则表达式对字符串进行匹配的时候,可以使用re模块实现全部的正
Go分布式爬虫笔记(五)_golang分布式爬虫架构
2401_87198107
golang 分布式 爬虫
系统级别优化与架构设计:如何对服务进行拆分如何将服务链接在一起服务调用的关系以及调用频率各种问题:如何让服务随着负载的增加具有可扩展性?是否采用DDD的架构设计?如何进行分布式的协调?选择何种中间件、缓存数据库与存储数据库?使用何种通信方式?如何设计缓存与数据库的关系,才能避免缓存失效之后大量数据直接打到数据库导致的服务响应变慢甚至服务雪崩的问题呢?分布式系统中数据的一致性,如果业务能够接受读取到
这知识点真细,Python获取HTTP响应头和响应体
梦想橡皮擦
Python爬虫120 python 浏览器工具 爬虫 python爬虫 开发者工具
哈喽!大家好,我是【梦想橡皮擦】,10年产研经验,致力于Python相关技术栈传播本文如果觉得不错,动动小手点个赞赞吧本文如果发现错误,欢迎在评论区中指正哦技术博客日更者,我喜欢写文章,如果任意一篇文章对你有帮助,就挺好的~欢迎大家订阅专栏⭐️⭐️《Python爬虫120》⭐️⭐️最近更新:2022年3月23日,橡皮擦的第610篇原创博客文章目录⛳️实战案例场景⛳️可获取的响应头⛳️实战案例场景这
apache 安装linux windows
墙头上一根草
apache inux windows
linux安装Apache 有两种方式一种是手动安装通过二进制的文件进行安装,另外一种就是通过yum 安装,此中安装方式,需要物理机联网。以下分别介绍两种的安装方式
通过二进制文件安装Apache需要的软件有apr,apr-util,pcre
1,安装 apr 下载地址:htt
fill_parent、wrap_content和match_parent的区别
Cb123456
match_parent fill_parent
fill_parent、wrap_content和match_parent的区别:
1)fill_parent
设置一个构件的布局为fill_parent将强制性地使构件扩展,以填充布局单元内尽可能多的空间。这跟Windows控件的dockstyle属性大体一致。设置一个顶部布局或控件为fill_parent将强制性让它布满整个屏幕。
2) wrap_conte
网页自适应设计
天子之骄
html css 响应式设计 页面自适应
网页自适应设计
网页对浏览器窗口的自适应支持变得越来越重要了。自适应响应设计更是异常火爆。再加上移动端的崛起,更是如日中天。以前为了适应不同屏幕分布率和浏览器窗口的扩大和缩小,需要设计几套css样式,用js脚本判断窗口大小,选择加载。结构臃肿,加载负担较大。现笔者经过一定时间的学习,有所心得,故分享于此,加强交流,共同进步。同时希望对大家有所
[sql server] 分组取最大最小常用sql
一炮送你回车库
SQL Server
--分组取最大最小常用sql--测试环境if OBJECT_ID('tb') is not null drop table tb;gocreate table tb( col1 int, col2 int, Fcount int)insert into tbselect 11,20,1 union allselect 11,22,1 union allselect 1
ImageIO写图片输出到硬盘
3213213333332132
java image
package awt;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imagei
自己的String动态数组
宝剑锋梅花香
java 动态数组 数组
数组还是好说,学过一两门编程语言的就知道,需要注意的是数组声明时需要把大小给它定下来,比如声明一个字符串类型的数组:String str[]=new String[10]; 但是问题就来了,每次都是大小确定的数组,我需要数组大小不固定随时变化怎么办呢? 动态数组就这样应运而生,龙哥给我们讲的是自己用代码写动态数组,并非用的ArrayList 看看字符
pinyin4j工具类
darkranger
.net
pinyin4j工具类Java工具类 2010-04-24 00:47:00 阅读69 评论0 字号:大中小
引入pinyin4j-2.5.0.jar包:
pinyin4j是一个功能强悍的汉语拼音工具包,主要是从汉语获取各种格式和需求的拼音,功能强悍,下面看看如何使用pinyin4j。
本人以前用AscII编码提取工具,效果不理想,现在用pinyin4j简单实现了一个。功能还不是很完美,
StarUML学习笔记----基本概念
aijuans
UML建模
介绍StarUML的基本概念,这些都是有效运用StarUML?所需要的。包括对模型、视图、图、项目、单元、方法、框架、模型块及其差异以及UML轮廓。
模型、视与图(Model, View and Diagram)
&
Activiti最终总结
avords
Activiti id 工作流
1、流程定义ID:ProcessDefinitionId,当定义一个流程就会产生。
2、流程实例ID:ProcessInstanceId,当开始一个具体的流程时就会产生,也就是不同的流程实例ID可能有相同的流程定义ID。
3、TaskId,每一个userTask都会有一个Id这个是存在于流程实例上的。
4、TaskDefinitionKey和(ActivityImpl activityId
从省市区多重级联想到的,react和jquery的差别
bee1314
jquery UI react
在我们的前端项目里经常会用到级联的select,比如省市区这样。通常这种级联大多是动态的。比如先加载了省,点击省加载市,点击市加载区。然后数据通常ajax返回。如果没有数据则说明到了叶子节点。 针对这种场景,如果我们使用jquery来实现,要考虑很多的问题,数据部分,以及大量的dom操作。比如这个页面上显示了某个区,这时候我切换省,要把市重新初始化数据,然后区域的部分要从页面
Eclipse快捷键大全
bijian1013
java eclipse 快捷键
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt+↑ 当前行和上面一行交互位置(同上)Alt+← 前一个编辑的页面Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)Alt+En
js 笔记 函数
征客丶
JavaScript
一、函数的使用
1.1、定义函数变量
var vName = funcation(params){
}
1.2、函数的调用
函数变量的调用: vName(params);
函数定义时自发调用:(function(params){})(params);
1.3、函数中变量赋值
var a = 'a';
var ff
【Scala四】分析Spark源代码总结的Scala语法二
bit1129
scala
1. Some操作
在下面的代码中,使用了Some操作:if (self.partitioner == Some(partitioner)),那么Some(partitioner)表示什么含义?首先partitioner是方法combineByKey传入的变量,
Some的文档说明:
/** Class `Some[A]` represents existin
java 匿名内部类
BlueSkator
java匿名内部类
组合优先于继承
Java的匿名类,就是提供了一个快捷方便的手段,令继承关系可以方便地变成组合关系
继承只有一个时候才能用,当你要求子类的实例可以替代父类实例的位置时才可以用继承。
在Java中内部类主要分为成员内部类、局部内部类、匿名内部类、静态内部类。
内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相
盗版win装在MAC有害发热,苹果的东西不值得买,win应该不用
ljy325
游戏 apple windows XP OS
Mac mini 型号: MC270CH-A RMB:5,688
Apple 对windows的产品支持不好,有以下问题:
1.装完了xp,发现机身很热虽然没有运行任何程序!貌似显卡跑游戏发热一样,按照那样的发热量,那部机子损耗很大,使用寿命受到严重的影响!
2.反观安装了Mac os的展示机,发热量很小,运行了1天温度也没有那么高
&nbs
读《研磨设计模式》-代码笔记-生成器模式-Builder
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/**
* 生成器模式的意图在于将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示(GoF)
* 个人理解:
* 构建一个复杂的对象,对于创建者(Builder)来说,一是要有数据来源(rawData),二是要返回构
JIRA与SVN插件安装
chenyu19891124
SVN jira
JIRA安装好后提交代码并要显示在JIRA上,这得需要用SVN的插件才能看见开发人员提交的代码。
1.下载svn与jira插件安装包,解压后在安装包(atlassian-jira-subversion-plugin-0.10.1)
2.解压出来的包里下的lib文件夹下的jar拷贝到(C:\Program Files\Atlassian\JIRA 4.3.4\atlassian-jira\WEB
常用数学思想方法
comsci
工作
对于搞工程和技术的朋友来讲,在工作中常常遇到一些实际问题,而采用常规的思维方式无法很好的解决这些问题,那么这个时候我们就需要用数学语言和数学工具,而使用数学工具的前提却是用数学思想的方法来描述问题。。下面转帖几种常用的数学思想方法,仅供学习和参考
函数思想
把某一数学问题用函数表示出来,并且利用函数探究这个问题的一般规律。这是最基本、最常用的数学方法
pl/sql集合类型
daizj
oracle 集合 type pl/sql
--集合类型
/*
单行单列的数据,使用标量变量
单行多列数据,使用记录
单列多行数据,使用集合(。。。)
*集合:类似于数组也就是。pl/sql集合类型包括索引表(pl/sql table)、嵌套表(Nested Table)、变长数组(VARRAY)等
*/
/*
--集合方法
&n
[Ofbiz]ofbiz初用
dinguangx
电商 ofbiz
从github下载最新的ofbiz(截止2015-7-13),从源码进行ofbiz的试用
1. 加载测试库
ofbiz内置derby,通过下面的命令初始化测试库
./ant load-demo (与load-seed有一些区别)
2. 启动内置tomcat
./ant start
或
./startofbiz.sh
或
java -jar ofbiz.jar
&
结构体中最后一个元素是长度为0的数组
dcj3sjt126com
c gcc
在Linux源代码中,有很多的结构体最后都定义了一个元素个数为0个的数组,如/usr/include/linux/if_pppox.h中有这样一个结构体: struct pppoe_tag { __u16 tag_type; __u16 tag_len; &n
Linux cp 实现强行覆盖
dcj3sjt126com
linux
发现在Fedora 10 /ubutun 里面用cp -fr src dest,即使加了-f也是不能强行覆盖的,这时怎么回事的呢?一两个文件还好说,就输几个yes吧,但是要是n多文件怎么办,那还不输死人呢?下面提供三种解决办法。 方法一
我们输入alias命令,看看系统给cp起了一个什么别名。
[root@localhost ~]# aliasalias cp=’cp -i’a
Memcached(一)、HelloWorld
frank1234
memcached
一、简介
高性能的架构离不开缓存,分布式缓存中的佼佼者当属memcached,它通过客户端将不同的key hash到不同的memcached服务器中,而获取的时候也到相同的服务器中获取,由于不需要做集群同步,也就省去了集群间同步的开销和延迟,所以它相对于ehcache等缓存来说能更好的支持分布式应用,具有更强的横向伸缩能力。
二、客户端
选择一个memcached客户端,我这里用的是memc
Search in Rotated Sorted Array II
hcx2013
search
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
Write a function to determine if a given ta
Spring4新特性——更好的Java泛型操作API
jinnianshilongnian
spring4 generic type
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——Groovy Bean定义DSL
Spring4新特性——更好的Java泛型操作API
Spring4新
CentOS安装JDK
liuxingguome
centos
1、行卸载原来的:
[root@localhost opt]# rpm -qa | grep java
tzdata-java-2014g-1.el6.noarch
java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64
java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64
[root@localhost
二分搜索专题2-在有序二维数组中搜索一个元素
OpenMind
二维数组 算法 二分搜索
1,设二维数组p的每行每列都按照下标递增的顺序递增。
用数学语言描述如下:p满足
(1),对任意的x1,x2,y,如果x1<x2,则p(x1,y)<p(x2,y);
(2),对任意的x,y1,y2, 如果y1<y2,则p(x,y1)<p(x,y2);
2,问题:
给定满足1的数组p和一个整数k,求是否存在x0,y0使得p(x0,y0)=k?
3,算法分析:
(
java 随机数 Math与Random
SaraWon
java Math Random
今天需要在程序中产生随机数,知道有两种方法可以使用,但是使用Math和Random的区别还不是特别清楚,看到一篇文章是关于的,觉得写的还挺不错的,原文地址是
http://www.oschina.net/question/157182_45274?sort=default&p=1#answers
产生1到10之间的随机数的两种实现方式:
//Math
Math.roun
oracle创建表空间
tugn
oracle
create temporary tablespace TXSJ_TEMP
tempfile 'E:\Oracle\oradata\TXSJ_TEMP.dbf'
size 32m
autoextend on
next 32m maxsize 2048m
extent m
使用Java8实现自己的个性化搜索引擎
yangshangchuan
java superword 搜索引擎 java8 全文检索
需要对249本软件著作实现句子级别全文检索,这些著作均为PDF文件,不使用现有的框架如lucene,自己实现的方法如下:
1、从PDF文件中提取文本,这里的重点是如何最大可能地还原文本。提取之后的文本,一个句子一行保存为文本文件。
2、将所有文本文件合并为一个单一的文本文件,这样,每一个句子就有一个唯一行号。
3、对每一行文本进行分词,建立倒排表,倒排表的格式为:词=包含该词的总行数N=行号