• 网络爬虫文档

以下是我们软工小组关于网络爬虫部分代码的的说明文档。至于一些分功能的小函数或方法就不在此赘述,一看就能明白。下面就主要的函数进行说明。

从总体上来说主要有三部分:店家信息爬取部分,菜品信息爬取部分,数据库部分。下面就三个部分一个一个说明。

数据库部分

整个程序是用java实现的,所以数据库部分主要由两个类Db.java和Dbop.java组成。

Db.java主要提供数据库的接口,包含如下:

      • 静态加载数据库驱动

static {

try {

Class.forName(dbClassName);//加载驱动

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

      • 建立到MySQL的连接,即建立到数据库的连接

public static Connection getDbConnection() {//建立到MySQL的连接

try {

conn = DriverManager.getConnection(DbHost, user, password);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return conn;

}

      • 关闭到MySQL的连接,即关闭到数据库的连接

public static void closeDbConnection(Connection connection) {//关闭数据库MYSQL

if (connection != null) {

try {

if (!connection.isClosed()) {

connection.close();

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

Dbop.java主要提供数据库的操作,包含如下:

      • 将爬取的店家信息存入数据库

public static void InsertToStoreDb(long id,String StoreUrl,String StoreName,String LogoUrl,

int DeliveryTime,String Opentime,int Quantity,String Sale,String location,String lng,String lat)

      • 清空店家信息表

public static void clearStore()

      • 清空菜品信息

public static void clearProduct()

      • 将爬取的菜品信息存入数据库

public static void insertToProductDb(long product_id,String product_name,String product_img,int price,String sold_quantity,String left_quantity,long store_id,String store_name,String lng,String lat,int delivery_time)

      • 从数据库中取出店家名字

public static String getStoreName(int id)

      • 取出送餐时间

public static String getStoreDeliveryTime(int id)

      • 取出店家所在位置的经度

public static String getStoreLng(int id)

      • 取出店家所在位置的纬度

public static String getStoreLat(int id)

店家信息爬取部分

这一部分主要是从饿了么网页上爬取店家相关的信息存入数据库。

首先是Storeurl.java

      • 实例化网页分析器

public void createParser(String url) throws ParserException

      • 重置网页分析器

public void resetParser()

      • 爬取并将爬取的数据存入数据库(总函数)

public void crawlerToDb()

      • 根据分析网页找到的节点进行信息提取

public void parserMethod(String url)

      • 根据找到的特定节点提取店家链接和店家logo(后面还有相同的函数用于提取其他信息,就不一一赘述)

public void getStoreUanal(NodeFilter url,NodeFilter img,Parser parser) throws ParserException{//get store url and name and logo

其次是GetLungAndLat.java

      • 百度提供的一个接口,用于查询地址的经纬度

public static String getCoordinate( String st)

{

String str= new String();//从服务器端获取的数据转换为字符串形式

String url = "http://api.map.baidu.com/geocoder/v2/?address="+st+"&output=json&ak=DWDtiXpQ9UBnnkwXmpoYYxLs";

try{

HttpGet request = new HttpGet(url);

HttpResponse response = HttpClients.createDefault().execute(request);

if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK)

str=EntityUtils.toString(response.getEntity());

}catch(Exception e)

{

e.printStackTrace();

}

return str;//.replace(' ', ',');

}

      • 从百度提供的接口查询到的结果中分别提取经度和纬度。

public static String getLnAndLa(String address)

      • 利用正则表达式处理出错的查询结果,主要用于查询提取经纬度时使用。

public static String special(String address)

菜品信息爬取部分

这个则主要根据前面爬取的店家信息中店家链接爬取相应店家的菜品信息,主要是product.java。具体如下:

      • 根据相应爬取分析得到的菜品数据存入数据库(主函数)

public void crawlerToDbproduct()

      • 判断是否该店家的信息是否已经爬取并存入数据库,如果已经存入数据库,则不进行爬取,否则进行爬取。

public static boolean ifExist(List<String> usedlink,String url)

      • 根据提供的店家链接进行相应的信息提取

public void parserMethod(String url)

      • 根据网页分析器找到的节点提取店家名字(后面有很多相似的分程序,一看就明白,就不在次赘述)

public void getProductName(NodeFilter n,Parser parser) throws ParserException

到此,整个爬虫程序的主体部分已经说明清楚。

优化部署部分

这部分主要是后期在优化程序和部署程序时对原程序做的修改,主要包括ProductTime.java和StoreTime.java两个类。他们分别是将爬虫的菜品信息爬取和店家信息爬取部署到服务器上实现爬虫程序的定时运行,实现了数据的定时自动更新。

  • 服务端文档

服务端文档借助phpdoc工具自动生成齐全文档。

  • 客户端文档

客户端文档借助javadoc文档自动生成齐全文档。

  • 服务端代码规范

* 基于 Zend Framework 编码规范

1、缩进为一个 Tab 或者 4 个空格,按层次缩进。

2、require/require_once 以及 include/include_once 统一使用标准调用写法,比如:
require_once 'Hush/Page.php';
require_once 'Hush/Db.php';

3、一般类库的名称必须以 ZF 方式的命名,比如:Path_To_Class
除开特殊的 Page 类、Service 类以及 Dao 类文件,他们的命名规则分别如下:
Dao 类:Database_Tablename {} 类文件在 Dao 类库目录下
Page 类:XxxPage {} 类文件在页面类库目录下
Service 类:XxxService {} 类文件在 Service 类库目录下

4、一般变量以及函数的名称以骆驼命名法(首字母小写),比如:
$variableName = 1;
public function methodName()
而 private/protected 变量或函数以 _ 开头,比如:private function _methodName()

5、类声名和函数声名后的第一个 { 符号换行,比如:
Class_Name
{
public function methodName ()
{
// TODO : method process
}
}

6、每个文件顶部必须有该类的说明注释,比如:
<?php
/**
* XXX Dao
*
* @category XXX
* @package XXX_Dao
* @author zmpy
* @version $Id$
*/

7、每个类文件前必须有类定义说明,比如:
...
/**
* @abstract
* @package XXX_Dao
*/
class XXX_Dao
{
...

8、被调用类库文件函数名前必须有说明注释(页面类可省略,因为基本不会被调用),比如:
...
/**
* Load data by primary key id
*
* @param mixed $id Primary key value
* @param string $pk Primary key name
* @return array
*/
public function methodName ()
{
// TODO : method process
}
...

9、被调用类库文件后面的 php 结束符 ?> 可不用写。要写也可以,但是结束符后不要加任何字符。

  • 客户端代码规范

1、缩进为一个 Tab 或者 4 个空格,按层次缩进。

2、包命名以com.app.takeout为前缀。包名的后续部分根据不同功能各自命名规范而不尽相同。但均为小写字母。

3、一般变量以及函数的名称以骆驼命名法(首字母小写),比如:
variableName = 1;
public void methodName()

5、layout 命名
layout xml 的命名必须以 全部单词小写,单词间以下划线分割,并且使用名词或名词词组,即使用 模块名_功能名称 来命名。

6、id 命名
layout 中所使用的id必须以全部单词小写,单词间以下划线分割,并且使用名词或名词词组,并且要求能够通过id直接理解当前组件要实现的功能。

7、资源命名
layout中所使用的所有资源(如drawable,style等)命名必须以全部单词小写,单词间以下划线分割,并且尽可能的使用名词或名词组,即使用 模块名_用途 来命名。如果为公共资源,如分割线等,则直接用用途来命名

sixsix团队“餐站”应用代码规范及开发文档的更多相关文章

  1. sixsix团队“餐站”应用M2阶段发布报告

    一.新功能 客户端 搜索功能 我们在M2中实现了对地点的搜索菜品,可以直接在主页页面中的输入框输入用户喜欢的菜品,系统将返回与对应关键字所对应的选择,更加高效直观的满足客户的口味. 菜品图片加载 我们 ...

  2. 为了增强团队的协作和高效开发,提升代码质量,TGideas团队一起制订的代码规范。主要包括五部分内容:PC规范、移动端规范、性能优化、CP规范、其他项目规范

    http://tguide.qq.com/main/index.htm

  3. 《团队-手机app便签-开发文档》

    项目托管平台地址:https://github.com/Vcandoit/Notepad.git 我主要负责文件存储部分,文字部分使用sqlite保存. 因为我们想实现备忘录记录照片.语音的功能,所以 ...

  4. Forward团队-爬虫豆瓣top250项目-开发文档

    项目地址:https://github.com/xyhcq/top250 我在本次项目中负责写爬虫中对数据分析的一部分,根据马壮分析过的html,我来进一步写代码获取数据,具体的功能及实现方法我已经写 ...

  5. 《Forward团队-爬虫豆瓣top250项目-开发文档》

    码云地址:https://github.com/xyhcq/top250 模块功能:获取豆瓣top250网页的源代码,并分析. def getHTMLText(url,k): # 获取网页源代码 tr ...

  6. 前端规范之JS代码规范(ESLint + Prettier)

    代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到或思考过这一问题.而随着前端应用的大型化和复杂化,越来越多的前端团队也开始重视代码规范.同样,前段时间,笔者所在的团队也开展了一 ...

  7. 项目Alpha冲刺(团队)-代码规范、冲刺任务与计划

    课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(团队)-代码规范.冲刺任务与计划 团队名称:SkyReach 作业目标:确定团队项目的代码规范.冲刺任务与计划 代码规范:隐流 ...

  8. 腾讯Alloy团队代码规范

    概述 我个人很看重代码规范,因为代码是写给别人看的,按规范写别人才更容易理解.之前苦于没有代码规范的资料,现在在github上面看到了腾讯Alloy团队的代码规范,于是学习了一下,并记录下我自己还没怎 ...

  9. 团队开发前端VUE项目代码规范

    团队开发前端VUE项目代码规范 2018年09月22日 20:18:11 我的小英短 阅读数 1658   一.规范目的: 统一编码风格,命名规范,注释要求,在团队协作中输出可读性强,易维护,风格一致 ...

随机推荐

  1. 国内常用的几个NTP时间服务器

    问题描述: 经常Windows或者Linux系统上面的时间跟我们本地的时间不一致 有时候就是Windows的Internet时间设置里面的Windows自带的时间同步服务器不好使 Linux配置NTP ...

  2. Postgresql - jsonb_pretty & dateStyle

    1. SHOW datestyle; DateStyle ----------- ISO, MDY(1 row) INSERT INTO container VALUES ('13/01/2010') ...

  3. 第 15 章 位操作(fields)

    /*----------------------------------- fields.c -- 定义并使用字段 -----------------------------------*/ #inc ...

  4. 串口-CreateFile的使用

    在32位的windows系统中,串口和其他通信设备是作为文件处理的.对串口的操作和对文件的操作是完全一样的.通信以调用CreateFile()开始. 函数原型如下: HANDLE CreateFile ...

  5. Dubbo+zookeeper+SpringMVC搭建最简单的分布式项目

    Dubbo 是什么 一款分布式服务框架 高性能和透明化的RPC远程服务调用方案 SOA服务治理方案 Dubbo 架构流程图 Provider:服务提供方 Consumer:服务消费者 Registry ...

  6. 转载 三、并行编程 - Task同步机制。TreadLocal类、Lock、Interlocked、Synchronization、ConcurrentQueue以及Barrier等

    随笔 - 353, 文章 - 1, 评论 - 5, 引用 - 0 三.并行编程 - Task同步机制.TreadLocal类.Lock.Interlocked.Synchronization.Conc ...

  7. go标准库的学习-net/http

    参考:https://studygolang.com/pkgdoc 概念解释: request:用户请求的信息,用来解析用户的请求信息,包括post.get.cookie.url等信息 respons ...

  8. Java基础之集合篇(模块记忆、精要分析)

    千里之行,始于足下.把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程.本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过. 集合的作用与特点 Java是一门面向对象语 ...

  9. Echarts中太阳图(Sunburst)的实例

    Echarts中太阳图(Sunburst)的实例 目前在项目中要实现一个Echars中的太阳图,但是Echars中的太阳图的数据格式是一个树形结构,如下代码格式如下: var mapData = [ ...

  10. 吴恩达机器学习CS229课程笔记学习

    监督学习(supervised learning) 假设我们有一个数据集(dataset),给出居住面积和房价的关系如下: 我们以居住面积为横坐标,房价为纵坐标,组成数据点,如(2104, 400), ...