当前位置

导入大量名录数据到Drupal网站的例子

James Qi 在 2010年12月26日 - 00:21 提交
内容摘要:2010年5月17日我在日志中写了一篇《导入大量名录数据到MediaWiki网站的例子》,详细记录了导入数据的过程步骤,后面进行了不少导入工作,也都是基本上按照那个步骤来的。 前段时间在国外的空间中......

  2010年5月17日我在日志中写了一篇《导入大量名录数据到MediaWiki网站的例子》,详细记录了导入数据的过程步骤,后面进行了不少导入工作,也都是基本上按照那个步骤来的。

  前段时间在国外的空间中安装了Drupal以及一些模块,进行了数据导入的尝试工作,这个月又在国内的服务器上设置了Drupal平台的新站jamesqi.com和adsensebook.cn,明年初将会开始导入大量数据的工作。这几天还在让技术部的同事帮忙修改php模板来实现一些功能。为了让自己后面的工作更清晰,也将过程记录如下:

1 导入前

1.1 搭建安装

先架设好网站,安装Drupal软件及需要的模块,让网址可以访问。

一般安装以下的模块:

  • 核心模块
  • 核心可选模块
  • pathauto: 自动生成路径别名
  • token: 被其他模块调用
  • cck: 自定义字段
  • views: 视图(暂未用)
  • xmlsitemap: 生成sitemap提交给搜索引擎
  • boost: 文件缓存
  • node import: 导入txt, csv文件到页面
  • contemplate: cck输出模板
  • taxonomy import/export via xml: 导出、导入分类(暂未用)
  • taxonomy menu: 用户生成分类菜单
  • taxonomy manager: 用于分类管理、批量增加
  • page title: 自定义页面标题

另外有几个方便管理和编辑的模块,也可以根据需要安装:

  • admin_menu: 管理菜单
  • ckeditor(暂未用)
  • imce(暂未用)
  • imce_wysiwyg(暂未用)
  • wysiwyg(暂未用)
  • capcha: 验证码
  • external links: 判断处理外部链接
  • Devel: 开发调试

如果是导入一系列的数据做网站群,可以只安装一套Drupal系统,采用多网站共享的安装方式。如果是站群,可以考虑这几个方面:

  • 一组类似的子站群只需要安装一套Drupal程序以及模块
  • 一组类似的子站群建议使用同一MySQL服务器中不同的数据库,特别是数据量非常大的时候,便于分别备份等操作
  • 用户帐号、密码共享的问题,待解决

1.2 初始设置

安装完成后进行基本的设置,例如:

  • 站点信息设置,包括名称、口号、使命、页脚、首页等设置;
  • 站点主题选择,以及颜色、logo、favicon.ico等设置;
  • 区块设置,嵌入Google DFP, Analytics等代码;
  • 角色添加、权限设置;
  • 留言设置,验证码方式设置;
  • 在线联络提交邮件的分类设置、外部SMTP设置。

另外,每种添加的新模块都需要设置权限以及设置配置,例如:

  • autopath: 路径别名自动生成的规则;
  • pagetitle: 各种类型页面的标题构成规则;
  • boost: 缓存的各种设置;
  • xmlsitemap: 生成sitemap的规则。

1.3 准备数据

  • 从.mdb的Aceess文件(或者.xls的Execl文件)导出文本文件,注意字段间隔用制表符;
  • 如果有需要修改的地方,可以批量修改替换;
  • 注意编辑保存为UTF-8字符形式,以免汉字不被Drupal识别;
  • 在Drupal中新建内容类型,例如:机器可读名称“minglu”,人类可读名称“名录”;
  • 在Drupal中的CCK模块设置新的字段,例如:公司名称、公司类型、法定代表人等,可全部用text类型字段,可以先手工新建内容类型,然后导入从其他站导出的相同结构字段列表;
  • 在Drupal中设置需要的Taxonomy词汇表和术语,可用Taxonomy Import/Export via XML批量导入或者用Taxonomy Manager批量添加。

2 导入中

2.1 导入实验

可先用少量数据来做导入实验,例如10条、100条数据,只需要很短时间可以完成导入,检查是否有报错、字段设置是否合理等。

2.2 正式导入

在Drupal后台用node import来导入.cvs或者.txt数据,第一行为标题,还要设置标题对应的CCK字段,然后开始导入。如果数据量大,例如10万条、100万条数据,需要较长时间完成,实测大约1秒5条左右。

3 导入后

3.1 内部工作

  • 修改字段设置、显示设置、字段权限;
  • 修改Content Template,达到需要的变换效果;
  • 编写php程序来更新node_term表,将页面进行归类;
  • 生成taxonomy菜单,添加主链接菜单等其它菜单项;
  • 如果需要,修改node.tpl.php和garland.info来添加新区域(Region)来放置区块(Block);
  • 如果需要,模拟蜘蛛爬去,提前批量生成缓存文件;
  • 检查内部搜索,批量生成文本索引。

3.2 外部工作

  • 修改robots.txt,包含提交sitemap的链接,允许访问“/分类”开头的页面,禁止不需要访问的页面;
  • 修改sitemap的设置,定期自动生成网站地图;
  • www.google.com/webmastertools中添加该网站;
  • www.google.com/adsense中添加URL渠道来跟踪收入;
  • www.google.com/analytics中添加配置来跟踪流量;
  • 服务器crontab设置,定期执行cron。

笔记先做到这里,有新遇到的问题再回头来补充修改。

评论

-- 发自IP地址: 58.48.27.53 (位置 | 谁是)

我整理成这样几步:

  1. 网站初设:创建数据库、创建文件目录、设置文件权限、Web方式(或者drush批量安装和设置)运行安装、设置网站名称、添加模块、外观设置、用户设置和添加等;
  2. 文件处理:文件分析、导出csv文件、编辑csv文件、上传到服务器;
  3. 设置导入:新建术语表、内容类型、添加字段设置feeds import、导入;
  4. 后期处理:修改模板添加views、添加block、生成搜索索引、网站地图、提交搜索引擎等。

其中粗体字的几个步骤比较麻烦,需要人工花费较多时间精力,其它部分可以尽量多用drush来批量处理。

我在Drupal 7与Drupal 6导入过程中最大的区别是用的导入模块不一样,Drupal 7下的Feeds有两个大的优点:

  1. 对于术语字段可以自动分类(所以需要先建术语表、再设置内容类型中对应的字段、再在Feeds map中设置导入数据的对应),不需要导入后运行自己写的PHP程序来归类;
  2. 新增导入内容更新功能,用了GUID字段,避免重复导入。

James Qi / 祁劲松

-- 发自IP地址: 58.48.155.5 (位置 | 谁是)

Feeds导入内容避免重复很容易啊,你添加了GUID字段是对的,在做字段映射mapping的时候,将GUID设置成Used as unique,再就是“Node processor 的设置”中每个选项的意思都看明白、不选错就可以。

James Qi / 祁劲松