目录
- 一, 信息组织读后感
(1)ICT环境下信息组织的任务与挑战——元数据的管理 - 二, 爬虫报告
(1) robots协议分析—-以淘宝为例
(2) Python数据采集 - quotes
(3) Scrapy框架抓取四川大学公共管理学院教师信息
(4) 八爪鱼爬取网页数据的简单使用 - 三, 分词报告
(1)分词工具介绍与简单实例 - 四, 文本解析报告
(1)Apache Tika格式转换的简单使用 - 五, 索引报告
(1)Solr+MMSEG4J的简单学习 - 六, 查询报告
(1)Solr基础练习
一, 信息组织读后感
ICT环境下信息组织的任务与挑战——元数据的管理
ICT代表Information 信息,Communications通信Technology技术的意思,ICT即 信息通信技术。随着数字技术的发展,在人们日常看似简单的通信背后其实蕴藏着的巨大信息不断刷新人们对通信与信息的认知看法。信息技术与通信技术之间的关系变得越来越密不可分,并逐渐合成一个概念。ICT在给人类生活带来一系列变革的同时也给我们的信息组织带来全新的挑战,下面,我将以ICT环境下元数据的管理为主题来说明其对信息组织的任务与挑战。
信息组织是利用一定的规则,方法和技术对信息的外部特征和内部内容进行揭示和描述,并按给定的参数和序列公式排列,使信息从无序集转为有序集合的过程。
元数据是关于数据的数据,而ICT环境下由通信行为产生的信息自然也可以用元数据来描述,充分管理好元数据,从而来加深对信息通信技术的认识。下面,通过一个情景来描述一下在一个通信过程当中,元数据有哪些并且发挥着什么作用:晚上8点,你在自己家中用自己的手机给好友拨打了一个电话,并且持续通话了10分钟。那么,在这个通信行为当中,看似一个简单的过程却包含了最基本和最通用的一些元数据。通话,是我们的主题(Subject)也是我们这一行为的名称(Title),动作的发出者是你,你是这个过程的创造者(Creator)之一,通信地点在家,这个我们的运营商可以通过手机定位很精确的得到这一信息,这可以来说是一个相关资源(Relation),晚上8点,是我们的通话时间(Date),好友对象是另一个资源,通话时间是另一个有效资源,在元数据指导下,我们可以通过运营商得到的信息并根据已知情况结合当前信息技术进而可以推断出一系列潜在的信息,这就是信息技术与通信技术的完美结合。正如上例展示的那样,我们无法得知也没有权利获取通话的内容,但是我们可以利用已知信息和一些信息理论推断出人们的行为习惯从而更好的促进通信行业的发展。而正因此,信息技术的应用在通信领域当中,带来了一系列问题。
挑战一
首先是元数据的描述。ICT是一个新兴的技术,而对于以往的元数据元素集,在一些情况下它们并不足以或者不够准确的来描述ICT环境当中的实体和元素。因为,并没有专门的一个元数据元素集是用来描述通信领域,即使有像都柏林这样的元素集,但是他们的针对性却不强。从信息组织的角度来说,通过语法,语义和语用上对选择的信息内,外特征进行细化,挖掘,加工整理并归类,无疑来说是一项巨大的挑战。元数据描述不清晰,实体认知不够,对于通信技术和信息技术的发展来说,是一个要解决的基础任务也是一个长期面临的挑战。
挑战二
另一个不可避免的问题是通信信息的隐私问题即元数据的使用问题。就目前的技术来说,想要得知一个用户的通信信息简直是轻而易举,技术上目前基本没有障碍,所以,我们在利用信息技术的时候,就要明确规定什么数据是可以被获取的,这些获取的数据可以进行怎样的信息技术分析,并且可以用于怎样的商业活动,而这是我们面临的第二挑战。怎样让运营商既可以获取到有价值的用户信息又能做到不侵犯用户的基本权利,从信息组织的角度出发就是对信息资源的主题内容,形式特征,物质特征等进行分析,选择,记录的活动必须是合法的,对于我们信息技术在通信领域内的应用这是我们必须考虑的第二大任务与挑战。
挑战三
最后一个任务我认为是信息通信领域与其他领域之间元数据的关联问题。一切数据都是可以关联的,关联的实体越多,可扩展的领域越宽,元数据网络就越丰富。但是,通信领域当中运营商们却不得不考虑一个问题,即关联的开放数据越多,信息将越复杂,如何有取舍有针对的对一些元数据进行关联,是信息通信领域技术上和策略上要考虑的问题。
总结
信息和通讯技术是20世纪90年代以来,最具影响力的技术。在此期间,ICT的开放,制造及服务得到迅猛发展,应用越来越广泛。IT 与 CT 均属于信息产业,它们之间有着密不可分的关系,而元数据在两者之间扮演着重要作用,充分挖掘ICT数据,加强元数据管理,促进ICT行业发展,从而推动社会的经济发展。
参考文献:
二, 爬虫报告
(1) robots协议分析—-以淘宝为例
User-agent: * * , 这里的 *代表的所有的搜索引擎种类,是一个通配符
Disallow: /admin/ 这里定义是禁止爬寻admin目录下面的目录
Allow: /tmp 这里定义是允许爬寻tmp的整个目录
淘宝的robots协议摘要如下:
User-agent: Baiduspider
Allow: /articl
Allow: /oshtml
Allow: /wenzhang
Disallow: /product/
Disallow: /
仅允许百度的机器人爬寻article,oshtml,wenzhang下的整个目录,不允许访问product目录下面的目录和其他任何目录
User-Agent: Googlebot
Allow: /article
Allow: /oshtml
Allow: /product
Allow: /spu
Allow: /dianpu
Allow: /wenzhang
Allow: /oversea
Disallow: /
仅允许谷歌的Googlebot爬寻article,oshtml,product,spu,dianpu,wenzhang,oversea下的整个目录,其他目录均不允许访问
User-agent: Bingbot
Allow: /article
Allow: /oshtml
Allow: /product
Allow: /spu
Allow: /dianpu
Allow: /wenzhang
Allow: /oversea
Disallow: /
仅允许Bingbot爬寻article,oshtml,product,spu,dianpu,wenzhang,oversea下的整个目录,其他目录均不允许访问
User-Agent: 360Spider
Allow: /article
Allow: /oshtml
Allow: /wenzhang
Disallow: /
仅允许360的爬寻机器爬寻article,oshtml,wenzhang下的整个目录,其他目录均不允许访问
User-Agent: Yisouspider
Allow: /article
Allow: /oshtml
Allow: /wenzhang
Disallow: /
仅允许Yisouspider爬寻article,oshtml,wenzhang下的整个目录,其他目录均不允许访问
User-Agent: Sogouspider
Allow: /article
Allow: /oshtml
Allow: /product
Allow: /wenzhang
Disallow: /
仅允许Sogouspider爬寻article,oshtml,product,wenzhang下的整个目录,其他目录均不允许访问
User-Agent: Yahoo! Slurp
Allow: /product
Allow: /spu
Allow: /dianpu
Allow: /wenzhang
Allow: /oversea
Disallow: /
仅允许Yahoo! Slurp爬寻product,spu,dianpu,wenzhang,oversea下的整个目录,其他目录均不允许访问
User-Agent: *
Disallow: /
禁止其他搜索引擎访问网站的任何部分
分析:以淘宝对百度搜索引擎的抓取限制为例,百度和淘宝都试图成为中国互联网行业的巨头,拥有最多的用户群体。假设如果淘宝对百度公开图片,店家等详细信息,那么百度利用Baiduspider进行抓取之后,从而将相关信息放到自己的平台,这个时候,百度成为可以提供商品信息的一个站外搜索平台,这跟直接上淘宝搜索无异,势必会影响淘宝的用户,所以淘宝只允许百度爬虫抓取article,oshtml,wenzhang目录下的信息,在给淘宝提供了一定的信息的同时,又可以保证自己牢牢的掌握用户群。
相关链接:
taobao.robots.txt
robots协议百度百科
(2) Python数据采集 - quotes
Scrapy ;Python; Aliyun; MobaXterm
###准备工具:
1.首先要有一个云服务器。我们组选取的是阿里云,在云端完成云服务器的配置和设置。
2.要有一个远程连接客户端。选择易配置的MobaXterm,完成基本的配置,个人文件的建立,创建一个虚拟开发环境并且下载好Scrapy依赖包。
数据采集
- 首先,我创建了一个Scrapy项目kx_quotes(图为操作完成后的树图)
之后编写了两个个spider程序,name分别为kx_quotes 和 kx_quotes01,详细代码如下
import scrapy class QuotesSpider(scrapy.Spider): name = "kx_quotes" def start_requests(self): urls = [ 'http://quotes.toscrape.com/page/1', 'http://quotes.toscrape.com/page/2', ] for url in urls: yield scrapy.Request(url = url, callback = self.parse) def parse(self, response): page = response.url.split("/")[-2] filename = 'kx-quotes-%s.html' % page with open(filename, 'wb') as f: f.write(response.body) self.log('Saved file %s' % filename)
import scrapy class QuotesSpider(scrapy.Spider): name = "kx_quotes01" start_urls = [ 'http://quotes.toscrape.com/page/1/', ] def parse(self, response): for quote in response.css('div.quote'): yield { 'text':quote.css('span.text::text').extract_first(), 'author':quote.css('small.author::text').extract_first(), 'tags':quote.css('div.tags a.tag::text').extract(), } next_page = response.css('li.next a::attr(href)').extract_first() if next_page is not None: next_page = response.urljoin(next_page) yield scrapy.Request(next_page,callback = self.parse)
- 导入spiders文件并执行数据爬取命令,即可以生成html文档和json文档,之后下载即可。
问题和注意事项
- MobaXterm 连接不稳定,操作过程中会不断出现连接断开现象,导致许多命令必须重复操作。
- 每次进入虚拟环境之前,要注意重新激活
cd /home/kx/venv //进入寻环境的目录
source bin/activate // 激活命令 - 目录和文件要清楚。在实际操作过程中,新建目录和文件较多,在进行路径下文件操作时,经常因不清楚多个文件之间的层级关系,导致找不到相应的文件和内容。
4.权限问题。在导入spider程序文件时候,因为权限受阻,导致多次导入失败,最后通过命令[Ubuntu常用命令] ‘chmod abc file’得以解决。
5.要注意name属性。在执行数据爬寻命令时,输入的name必须是对应的python文件里面定义的name,并且这个name在每个爬虫中都是唯一标识的;不同的爬虫对应不同的name
6.json文件内容为空。采集到的数据json文件为空,里面没有任何抓取到的数据,通过检查spider代码,文件属性以及输入指令均没有找到解决办法。
相关链接:
[Ubuntu常用命令](http://www.jianshu.com/p/1340bb38e4aa(http://www.jianshu.com/p/1340bb38e4aa)
Linux云服务器下配置Scrapy并抓取数据:http://www.jianshu.com/p/735f32afd70f
课件参考:ccftp.scu.edu.cn:8090/Download/HttpUpload/ShowFile
(3) Scrapy框架抓取四川大学公共管理学院教师信
目录
- 项目要求
- 准备步骤
- 代码编写
- 结果分析
- 问题解析
- 相关链接
一,项目要求
- 明确目标网址和items:我们要抓取的是四川大学公共管理学院教师主页128位教师信息,包括的item有name(x姓名),title(职称),dep(所属部系),email(邮件),img(图片)以及详情页面的decs(个人简介)
- 明确分页处理的方法
- 明确怎么获取详情页信息
- 会使用xpath来编写数据路径
二 , 准备步骤
- 在Scrapy当中下载requests库,如果已经下载了的,则可以跳过这个步骤
代码如下:Scrapy使用request对象来爬取web站点。
request对象由spiders对象产生,经由Scheduler传送到Downloader,Downloader执行request并返回response给spiders。
scrapy install request
- 新建一个项目,在这里我新建的项目名是teacher。在项目当中会用到pipelines.py,items.py, settings.py以及spider文件夹
scrapy startproject teacher
三, 代码编写
- 解读四川大学公共管理学院教师主页页面代码:
1.编码方式:
从上图可以看出编码方式采用的是UTF-8,因为抓取的是中文信息,有可能出现乱码或者抓取到的数据是/073801/aj90/ 等形式,这里我们先记住它的编码方式。
2.数据所在目录和路径:
上图中我们可以看到我们要抓取的教师信息都在 //ul[@class=’teachers_ul mt20 cf’]/li 这里面,而且姓名所在的路径是div[@class=’r fr’]/h3/text() ,职称所在路径是div[@class=’r fr’]/p/text() ,邮件所在路径div[@class=’r fr’]/div[@class=’desc’]/p[2]/text() ,部门所在路径div[@class=’r fr’]/div[@class=’desc’]/p[1]/text() ,以及图片对应的链接 div[@class=’l fl’]/a/@href ,图片地址div[@class=’l fl’]/img/@src
在编写路径时,可以用scrapy shell 进行验证,这里不再详述.
3.下一页
可以看到下一页是在li标签的倒数第二个,因此我的下一页路径可以写成 //div[@class=’pager cf tc pt10 pb10 mobile_dn’]/li[last()-1]/a/@href
- 代码编写
1.item.py
我们要在item.y中定义我们的变量名
import scrapy
class TeacherItem(scrapy.Item):
name = scrapy.Field()
title = scrapy.Field()
img = scrapy.Field()
dep = scrapy.Field()
email = scrapy.Field()
url = scrapy.Field()
decs = scrapy.Field()
pass
2.编写teachespider.py文件并导入spider中,完整代码如下:
#coding:utf-8
#!/usr/bin/python
# -*- coding:utf-8 -*-
import scrapy
import requests
import urllib2
from scrapy.selector import Selector
from teacher.items import TeacherItem
import re
import os
from urllib2 import urlopen
class TeacherSpider(scrapy.Spider):
name = "teacherspider" #爬虫名teacherspider
allowed_domains = ["ggglxy.scu.edu.cn"]
start_urls = [
'http://ggglxy.scu.edu.cn/index.php?c=article&a=type&tid=18',
]
webdata = requests.get('http://ggglxy.scu.edu.cn/index.php')
webdata.encoding = 'UTF-8'
print(webdata.text) #打印出网页html信息
def parse(self, response):
sel = Selector(response)
for teacher in response.xpath("//ul[@class='teachers_ul mt20 cf']/li"): #爬取数据所在目录
item = TeacherItem()
item['name'] = teacher.xpath("div[@class='r fr']/h3/text()").extract_first()
item['title'] = teacher.xpath("div[@class='r fr']/p/text()").extract_first()
# -*- 图片处理 -*-
img_src = teacher.xpath("div[@class='l fl']/img/@src").extract_first() #图片路径
teacher_name = "%s.jpg" % (item['name']) #给图片重新命名
img_path = os.path.join("E:\\io&ir\\teacher", teacher_name) #将图片下载到本地
item['img'] = img_path
item['email'] = teacher.xpath("div[@class='r fr']/div[@class='desc']/p[2]/text()").extract_first()
item['dep'] = teacher.xpath("div[@class='r fr']/div[@class='desc']/p[1]/text()").extract_first()
href = teacher.xpath("div[@class='l fl']/a/@href").extract_first()
request=scrapy.http.Request(response.urljoin(href),callback=self.parse_decs) #回调抓取详情页信息函数
request.meta['item']=item
yield request
# -*- 分页处理 -*-
nextpage = sel.xpath("//div[@class='pager cf tc pt10 pb10 mobile_dn']/li[last()-1]/a/@href").extract_first()
if nextpage:
nextpage = 'http://ggglxy.scu.edu.cn/index.php'+nextpage
yield scrapy.http.Request(nextpage, callback=self.parse)
# -*- 详情页信息抓取 -*-
def parse_decs(self,response):
item=response.meta['item']
item['url']=response.url
item['decs']=response.xpath("//div[@class='desc']/text()").extract_first()
yield item
执行爬取命令
scrapy crawl teacherspider -o teacher.xml
3.pipeline.py数据处理和setting.py设置 ( [相关参考](http://www.cnblogs.com/yosha/p/6192569.html)) 执行上述爬取命令,有可能出现乱码数据,这里介绍两种处理方法: (1)在 scrapy crawl teacherspider -o teacher.json后面再加上 -s FEED-EXPORT-ENCODING=utf-8,下载时数据自动导成为utf-8编码的数据,即
scrapy crawl teacherspider -o teacher.xml -s FEED_EXPORT_ENCODING=utf-8
(2)在pipelines.py中加入如下代码
import codecs
class TeacherPipeline(object):
def __init__(self):
self.file = codecs.open('teacher.xml', 'w', encoding='utf-8') #文件自动保存为utf-8格式的teacher.xml文件
def process_item(self, item, spider):
line = json.dumps(dict(item),ensure_ascii=False) + '\n'
#print line
#self.file.write(line.decode("unicode_escape"))
self.file.write(line)
return item
同时,在settings.py中启用
# Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
'teacher.pipelines.TeacherPipeline': 300,
}
设置好之后,执行爬取命令即可得到正常编码数据
scrapy crawl teacherspider
上面两种方法各有优势,根据个人喜好使用。第一种是不需要再编写代码,但是每次执行爬取命令时较复杂;而第二种的话是数据爬取之后的处理操作,更偏向结构化,而且爬取命令更简单,且会自动生成文档。
四,结果解读
![抓取结果显示](http://upload-images.jianshu.io/upload_images/5858538-528261e278e67a40.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 页面成功抓取信息,下载teacher.json文件并打开如下图,刚好128条 ![teacher.json](http://upload-images.jianshu.io/upload_images/5858538-29bb5897bbac0ef5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)五,问题解析
- 路径问题,在写xpath过程当中一定要注意路径,严格按照要求来编写,常见报错
scrapy异步处理Request请求,Scrapy发送请求之后,不会等待这个请求的响应,可以同时发送其他请求或者做别的事情。
六,相关链接
- [scrapy shell]http://blog.csdn.net/php_fly/article/details/19555969
- [requests]http://www.cnblogs.com/thunderLL/p/6551641.html
- [编码问题]http://www.cnblogs.com/yosha/p/6192569.html
- [常见错误]http://blog.csdn.net/sunshine_in_moon/article/details/51250023
- [参考案例1]http://blog.csdn.net/u011781521/article/details/70196644
- [参考案例2]http://www.jianshu.com/p/ad6bf3f2a883?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=qq
(4) 八爪鱼爬取网页数据的简单使用
目录
- 八爪鱼介绍
- 八爪鱼实例一
- 八爪鱼实例二
八爪鱼介绍
八爪鱼数据采集系统以完全自主研发的分布式云计算平台为核心,可以在很短的时间内,轻松从各种不同的网站或者网页获取大量的规范化数据,帮助任何需要从网页获取信息的客户实现数据自动化采集,编辑,规范化,摆脱对人工搜索及收集数据的依赖,从而降低获取信息的成本,提高效率。
八爪鱼爬取数据操作简单,可视化高。
直接去官网下载压缩包进行解压缩即可运行。
八爪鱼实例一
以抓取四川大学教师信息为例
打开八爪鱼->我的任务->新建高级任务模式->给文件命名
下一步,自己进行爬取操作设置
直接下一步:
启动单机采集: